@hellolynk-ai/trae-work-mcp 0.0.0-stage → 0.4.94
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/LICENSE +92 -0
- package/README.md +86 -2
- package/bin/hellolynk-client-setup.mjs +2748 -0
- package/bin/hellolynk-mcp-config-shape.mjs +23 -0
- package/hellolynk-client-pack-manifest.json +619 -0
- package/hellolynk-client-pack-pin.json +4 -0
- package/integrations/trae-work/package.json +11 -0
- package/integrations/trae-work/runtime/neutral-host-bootstrap.mjs +38 -0
- package/integrations/trae-work/runtime/neutral-host-release-entry.mjs +16 -0
- package/integrations/trae-work/runtime/trae-work-bootstrap.mjs +30 -0
- package/integrations/trae-work/server/dynamic-ui-contract.mjs +376 -0
- package/integrations/trae-work/server/host-lifecycle.mjs +128 -0
- package/integrations/trae-work/server/mcp-proxy.mjs +181 -0
- package/integrations/trae-work/server/mcp-server.mjs +784 -0
- package/integrations/trae-work/server/native-task-cdp.mjs +241 -0
- package/integrations/trae-work/server/native-task-worker.mjs +199 -0
- package/integrations/trae-work/server/neutral-host-adapter.mjs +725 -0
- package/integrations/trae-work/server/trae-neutral-production.mjs +97 -0
- package/integrations/trae-work/server/trae-ui-launch.mjs +182 -0
- package/integrations/trae-work/server/ui-action-gate.mjs +122 -0
- package/integrations/trae-work/skills/hellolynk-inbox/SKILL.md +9 -0
- package/package.json +61 -4
- package/runtime/bootstrap/core/hellolynk-client-account.mjs +180 -0
- package/runtime/bootstrap/core/hellolynk-client-core.mjs +770 -0
- package/runtime/bootstrap/core/hellolynk-client-profile.mjs +191 -0
- package/runtime/bootstrap/core/hellolynk-host-auth.mjs +347 -0
- package/runtime/bootstrap/core/hellolynk-host-protected-store.mjs +2721 -0
- package/runtime/bootstrap/core/hellolynk-local-process-lock.mjs +157 -0
- package/runtime/bootstrap/core/hellolynk-neutral-host-installation-store.mjs +765 -0
- package/runtime/bootstrap/core/hellolynk-platform-credential-store.mjs +773 -0
- package/runtime/bootstrap/core/hellolynk-runtime-safety.cjs +471 -0
- package/runtime/bootstrap/platform/windows/hellolynk-host-protected-store.ps1 +2866 -0
- package/runtime/connect-activate.mjs +837 -0
- package/runtime/core/hellolynk-agent-configurator.mjs +701 -0
- package/runtime/core/hellolynk-client-account.mjs +180 -0
- package/runtime/core/hellolynk-client-core.mjs +770 -0
- package/runtime/core/hellolynk-client-profile.mjs +191 -0
- package/runtime/core/hellolynk-client-update-entry.mjs +31 -0
- package/runtime/core/hellolynk-client-update-runtime.mjs +600 -0
- package/runtime/core/hellolynk-client-update.mjs +453 -0
- package/runtime/core/hellolynk-contact-request-e2ee.mjs +867 -0
- package/runtime/core/hellolynk-device-enrollment.mjs +435 -0
- package/runtime/core/hellolynk-direct-text-e2ee-client.mjs +1964 -0
- package/runtime/core/hellolynk-direct-text-e2ee.mjs +1207 -0
- package/runtime/core/hellolynk-host-auth.mjs +347 -0
- package/runtime/core/hellolynk-host-protected-store.mjs +2721 -0
- package/runtime/core/hellolynk-host-transport-client.mjs +946 -0
- package/runtime/core/hellolynk-host.mjs +2374 -0
- package/runtime/core/hellolynk-human-confirmation-ledger.mjs +256 -0
- package/runtime/core/hellolynk-human-relationship-controller.mjs +1234 -0
- package/runtime/core/hellolynk-inbox-read-state.mjs +11 -0
- package/runtime/core/hellolynk-indexed-message-store.mjs +1558 -0
- package/runtime/core/hellolynk-instance-conversation.mjs +185 -0
- package/runtime/core/hellolynk-local-contact-requests.mjs +1733 -0
- package/runtime/core/hellolynk-local-contacts.mjs +1228 -0
- package/runtime/core/hellolynk-local-data-migration.mjs +766 -0
- package/runtime/core/hellolynk-local-data-protection.mjs +747 -0
- package/runtime/core/hellolynk-local-identity-trust.mjs +274 -0
- package/runtime/core/hellolynk-local-messaging.mjs +3043 -0
- package/runtime/core/hellolynk-local-peer-transport.mjs +103 -0
- package/runtime/core/hellolynk-local-process-lock.mjs +157 -0
- package/runtime/core/hellolynk-model-inbox.mjs +230 -0
- package/runtime/core/hellolynk-model-notices.cjs +60 -0
- package/runtime/core/hellolynk-native-addressing-tools.cjs +231 -0
- package/runtime/core/hellolynk-native-conversations.mjs +280 -0
- package/runtime/core/hellolynk-native-human-confirmation-broker.mjs +1036 -0
- package/runtime/core/hellolynk-native-inbox-runtime.mjs +553 -0
- package/runtime/core/hellolynk-native-notice.mjs +50 -0
- package/runtime/core/hellolynk-native-reply-routes.mjs +96 -0
- package/runtime/core/hellolynk-native-worker-lease.mjs +84 -0
- package/runtime/core/hellolynk-neutral-host-assembly.mjs +955 -0
- package/runtime/core/hellolynk-neutral-host-installation-store.mjs +765 -0
- package/runtime/core/hellolynk-neutral-host-launcher.mjs +665 -0
- package/runtime/core/hellolynk-neutral-host-process.mjs +4374 -0
- package/runtime/core/hellolynk-neutral-host-store-adapters.mjs +548 -0
- package/runtime/core/hellolynk-neutral-host-workbench-read-model.mjs +1365 -0
- package/runtime/core/hellolynk-platform-credential-store.mjs +773 -0
- package/runtime/core/hellolynk-relay-client-cli.mjs +232 -0
- package/runtime/core/hellolynk-release-retention.mjs +160 -0
- package/runtime/core/hellolynk-runtime-safety.cjs +471 -0
- package/runtime/core/hellolynk-workbench-action-grants.mjs +457 -0
- package/runtime/core/hellolynk-workbench-connection.mjs +234 -0
- package/runtime/neutral-host-bootstrap.mjs +38 -0
- package/runtime/neutral-host-release-entry.mjs +16 -0
- package/runtime/neutral-host-release-loader.mjs +156 -0
- package/runtime/neutral-host-release-manifest.json +394 -0
- package/runtime/neutral-host-release-pin.json +4 -0
- package/runtime/platform/windows/configure-agent.ps1 +281 -0
- package/runtime/platform/windows/credential-store.ps1 +844 -0
- package/runtime/platform/windows/hellolynk-host-protected-store.ps1 +2866 -0
- package/runtime/platform/windows/hellolynk-human-confirmation-ledger.ps1 +155 -0
- package/runtime/platform/windows/hellolynk-local-data-key.ps1 +300 -0
- package/runtime/platform/windows/hellolynk-native-human-confirmation-broker.ps1 +216 -0
- package/runtime/trae-work-bootstrap.mjs +30 -0
- package/runtime/workbench/candidate-bootstrap.mjs +54 -0
- package/runtime/workbench/contract.mjs +1314 -0
- package/runtime/workbench/hellolynk-workbench-build.json +215 -0
- package/runtime/workbench/host-capabilities.mjs +80 -0
- package/runtime/workbench/i18n.mjs +1127 -0
- package/runtime/workbench/loopback-surface.mjs +740 -0
- package/runtime/workbench/mcp-app-bundle.mjs +97 -0
- package/runtime/workbench/service.mjs +485 -0
- package/runtime/workbench/state.mjs +421 -0
- package/runtime/workbench/transports.mjs +171 -0
- package/runtime/workbench/ui/app.mjs +6120 -0
- package/runtime/workbench/ui/connection-form.mjs +155 -0
- package/runtime/workbench/ui/hellolynk-mark.png +0 -0
- package/runtime/workbench/ui/http-transport.mjs +247 -0
- package/runtime/workbench/ui/icons/arrow-left.svg +3 -0
- package/runtime/workbench/ui/icons/close.svg +3 -0
- package/runtime/workbench/ui/icons/contacts.svg +3 -0
- package/runtime/workbench/ui/icons/inbox.svg +3 -0
- package/runtime/workbench/ui/icons/refresh.svg +3 -0
- package/runtime/workbench/ui/icons/search.svg +3 -0
- package/runtime/workbench/ui/icons/security.svg +3 -0
- package/runtime/workbench/ui/icons/settings.svg +3 -0
- package/runtime/workbench/ui/index.html +139 -0
- package/runtime/workbench/ui/loopback-entry.mjs +26 -0
- package/runtime/workbench/ui/mcp-app-client.mjs +151 -0
- package/runtime/workbench/ui/mcp-app-entry.mjs +452 -0
- package/runtime/workbench/ui/styles.css +686 -0
- package/tools/hellolynk-activate-neutral-host-clients.mjs +837 -0
- package/tools/hellolynk-install-client-skills.mjs +1211 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { loadNeutralHostRelease } from "./neutral-host-release-loader.mjs";
|
|
5
|
+
|
|
6
|
+
export async function runNeutralHostBootstrap(argv = process.argv.slice(2)) {
|
|
7
|
+
const options = parse(argv);
|
|
8
|
+
const release = await loadNeutralHostRelease();
|
|
9
|
+
if (typeof release?.run !== "function") throw codeError("neutral_trae_work_runner_integrity_invalid");
|
|
10
|
+
return release.run({ root: options.root });
|
|
11
|
+
}
|
|
12
|
+
function parse(argv) { if (argv.length !== 3 || argv[0] !== "run" || argv[1] !== "--root" || !path.isAbsolute(String(argv[2] || ""))) throw codeError("neutral_trae_work_launch_configuration_required"); return { root: path.resolve(argv[2]) }; }
|
|
13
|
+
function codeError(code) { const error = new Error(code); error.code = code; return error; }
|
|
14
|
+
// Start failures and a failed Host both end here. A failed Host keeps its lock until this
|
|
15
|
+
// process exits on its own: a closed stderr pipe (the detached launcher may be gone) must
|
|
16
|
+
// not crash it before admitted work finishes.
|
|
17
|
+
function exitWithFailure(code) { process.stderr.on("error", () => {}); process.stderr.write(`${JSON.stringify({ ok: false, code })}\n`); process.exitCode = 1; }
|
|
18
|
+
|
|
19
|
+
// A stray rejection must not take the Host down: log a stable code and keep serving. A synchronous
|
|
20
|
+
// uncaught exception leaves state unknown: stop the Host (releases its lock), then exit; 15 s bounds a stuck stop.
|
|
21
|
+
function guardHostProcess(result) {
|
|
22
|
+
process.on("unhandledRejection", (reason) => writeFailure("neutral_trae_work_unhandled_rejection", reason));
|
|
23
|
+
process.on("uncaughtException", (error) => {
|
|
24
|
+
writeFailure("neutral_trae_work_uncaught_exception", error);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
const exit = () => process.exit(1);
|
|
27
|
+
setTimeout(exit, 15_000).unref?.();
|
|
28
|
+
Promise.resolve().then(() => result?.stop?.("uncaught_exception")).then(exit, exit);
|
|
29
|
+
});
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function writeFailure(code, cause) {
|
|
34
|
+
if (!process.stderr.listenerCount("error")) process.stderr.on("error", () => {});
|
|
35
|
+
process.stderr.write(`${JSON.stringify({ ok: false, code, cause: String(cause?.code || cause?.name || "").slice(0, 80) })}\n`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (import.meta.url === pathToFileURL(process.argv[1] || "").href) runNeutralHostBootstrap().then((result) => guardHostProcess(result)?.waitUntilStopped?.() || new Promise(() => {})).catch((error) => exitWithFailure(String(error?.code || "neutral_trae_work_launch_failed")));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createHostProtectedStore } from "./core/hellolynk-host-protected-store.mjs";
|
|
4
|
+
import { createNeutralHostInstallationStore, defaultNeutralHostStoreRoot } from "./core/hellolynk-neutral-host-installation-store.mjs";
|
|
5
|
+
import { startHelloLynkNeutralHostAssembly } from "./core/hellolynk-neutral-host-assembly.mjs";
|
|
6
|
+
|
|
7
|
+
export async function createNeutralHostReleaseRuntime() { return Object.freeze({ defaultStoreRoot: (env) => defaultNeutralHostStoreRoot("win32", env), createInstallationStore: (options) => createNeutralHostInstallationStore(options), createProtectedStore: (options) => createHostProtectedStore(options), run: async ({ root }) => runProductionHost(root) }); }
|
|
8
|
+
async function runProductionHost(rootInput) {
|
|
9
|
+
const root = path.resolve(String(rootInput || "")); if (!path.isAbsolute(root) || root.length < 4) throw codeError("neutral_trae_work_launch_configuration_required");
|
|
10
|
+
const installationStore = createNeutralHostInstallationStore({ root }); const protectedStore = createHostProtectedStore({ root, installationStore }); const binding = await protectedStore.resolveTraeWorkNeutralBinding();
|
|
11
|
+
const profiles = await readProfileManifest(binding.profileManifestPath); const assembly = await startHelloLynkNeutralHostAssembly({ root, runtimeRoot: binding.runtimeRoot, profiles: profiles.map((profileFile) => ({ profileFile })) }, { installationStore, protectedStore });
|
|
12
|
+
// A failed Host never reaches "stopped"; end the wait so the bootstrap exits with its code.
|
|
13
|
+
return Object.freeze({ stop: assembly.stop, waitUntilStopped: async () => { while (assembly.host.status !== "stopped") { if (assembly.host.status === "failed") throw codeError(assembly.host.failureCode || "neutral_host_stop_failed"); await new Promise((resolve) => setTimeout(resolve, 50)); } } });
|
|
14
|
+
}
|
|
15
|
+
async function readProfileManifest(input) { const manifestPath = path.resolve(String(input || "")); if (!path.isAbsolute(manifestPath)) throw codeError("neutral_trae_work_launch_manifest_invalid"); let manifest; try { manifest = JSON.parse(await fs.readFile(manifestPath, "utf8")); } catch { throw codeError("neutral_trae_work_launch_manifest_invalid"); } if (!manifest || manifest.contract !== "hellolynk-neutral-host-profile-manifest-v1" || !Array.isArray(manifest.profiles) || !manifest.profiles.length || manifest.profiles.length > 16 || Object.keys(manifest).sort().join(",") !== "contract,profiles") throw codeError("neutral_trae_work_launch_manifest_invalid"); const profiles = manifest.profiles.map((value) => path.resolve(String(value || ""))); if (profiles.some((value, index) => !path.isAbsolute(value) || profiles.indexOf(value) !== index)) throw codeError("neutral_trae_work_launch_manifest_invalid"); return Object.freeze(profiles); }
|
|
16
|
+
function codeError(code) { const error = new Error(code); error.code = code; return error; }
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
|
+
|
|
6
|
+
const ROOT = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const PIN_PATH = path.join(ROOT, "neutral-host-release-pin.json");
|
|
8
|
+
const MANIFEST_PATH = path.join(ROOT, "neutral-host-release-manifest.json");
|
|
9
|
+
const SAFE_RUNTIME_RELATIVE = /^(?:[A-Za-z0-9][A-Za-z0-9._-]*\/)*[A-Za-z0-9][A-Za-z0-9._-]*\.(?:cjs|mjs|ps1)$/;
|
|
10
|
+
const SAFE_RELEASE_RELATIVE = /^release\/(?:[A-Za-z0-9][A-Za-z0-9._-]*\/)*[A-Za-z0-9][A-Za-z0-9._-]*\.(?:mjs|ps1|md|html|js|css|json)$/;
|
|
11
|
+
|
|
12
|
+
export async function inspectNeutralHostRelease() {
|
|
13
|
+
await assertNoReparseAncestors(ROOT);
|
|
14
|
+
const pinArtifact = await readArtifact(PIN_PATH, 16 * 1024);
|
|
15
|
+
const pin = parseJson(pinArtifact.bytes);
|
|
16
|
+
exact(pin, ["contract", "manifestSha256"]);
|
|
17
|
+
if (pin.contract !== "hellolynk-neutral-host-release-pin-v1" || !HASH.test(String(pin.manifestSha256 || ""))) fail();
|
|
18
|
+
const manifestArtifact = await readArtifact(MANIFEST_PATH, 256 * 1024);
|
|
19
|
+
if (sha256(manifestArtifact.bytes) !== pin.manifestSha256) fail();
|
|
20
|
+
let manifest;
|
|
21
|
+
try { manifest = JSON.parse(manifestArtifact.bytes); } catch { fail(); }
|
|
22
|
+
exact(manifest, ["contract", "entry", "files"]);
|
|
23
|
+
if (manifest.contract !== "hellolynk-neutral-host-release-manifest-v1"
|
|
24
|
+
|| !Array.isArray(manifest.files) || manifest.files.length < 3 || manifest.files.length > 128) fail();
|
|
25
|
+
const files = [];
|
|
26
|
+
const seen = new Set();
|
|
27
|
+
for (const item of manifest.files) {
|
|
28
|
+
exact(item, ["path", "sha256"]);
|
|
29
|
+
const relative = safeRelative(item.path);
|
|
30
|
+
if (seen.has(relative) || !HASH.test(String(item.sha256 || ""))) fail();
|
|
31
|
+
seen.add(relative);
|
|
32
|
+
const artifact = await readArtifact(inside(relative), 2 * 1024 * 1024);
|
|
33
|
+
if (sha256(artifact.bytes) !== item.sha256) fail();
|
|
34
|
+
files.push(Object.freeze({ relative, sha256: item.sha256, identity: artifact.identity }));
|
|
35
|
+
}
|
|
36
|
+
const entry = safeRelative(manifest.entry);
|
|
37
|
+
if (!seen.has(entry) || !seen.has("neutral-host-bootstrap.mjs")
|
|
38
|
+
|| !seen.has("neutral-host-release-loader.mjs")) fail();
|
|
39
|
+
return Object.freeze({
|
|
40
|
+
contract: "hellolynk-neutral-host-release-inspection-v1",
|
|
41
|
+
releaseRoot: path.dirname(ROOT),
|
|
42
|
+
manifestSha256: pin.manifestSha256,
|
|
43
|
+
entry,
|
|
44
|
+
controls: Object.freeze([
|
|
45
|
+
Object.freeze({ relative: "neutral-host-release-pin.json", sha256: sha256(pinArtifact.bytes), identity: pinArtifact.identity }),
|
|
46
|
+
Object.freeze({ relative: "neutral-host-release-manifest.json", sha256: pin.manifestSha256, identity: manifestArtifact.identity }),
|
|
47
|
+
]),
|
|
48
|
+
files: Object.freeze(files),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export async function activateNeutralHostRelease(inspection) {
|
|
53
|
+
if (!inspection || inspection.contract !== "hellolynk-neutral-host-release-inspection-v1"
|
|
54
|
+
|| inspection.releaseRoot !== path.dirname(ROOT) || !Array.isArray(inspection.controls)
|
|
55
|
+
|| inspection.controls.length !== 2 || !Array.isArray(inspection.files)) fail();
|
|
56
|
+
await assertNoReparseAncestors(ROOT);
|
|
57
|
+
for (const expected of inspection.controls) {
|
|
58
|
+
const control = CONTROL_PATHS.get(expected.relative);
|
|
59
|
+
if (!control) fail();
|
|
60
|
+
const artifact = await readArtifact(control, 256 * 1024);
|
|
61
|
+
if (sha256(artifact.bytes) !== expected.sha256 || !sameIdentity(artifact.identity, expected.identity)) fail();
|
|
62
|
+
}
|
|
63
|
+
for (const expected of inspection.files) {
|
|
64
|
+
const artifact = await readArtifact(inside(safeRelative(expected.relative)), 2 * 1024 * 1024);
|
|
65
|
+
if (sha256(artifact.bytes) !== expected.sha256 || !sameIdentity(artifact.identity, expected.identity)) fail();
|
|
66
|
+
}
|
|
67
|
+
const entryFile = inside(safeRelative(inspection.entry));
|
|
68
|
+
let module;
|
|
69
|
+
try { module = await import(`${pathToFileURL(entryFile).href}?verified=${inspection.manifestSha256}`); }
|
|
70
|
+
catch { throw codeError("neutral_trae_work_runner_integrity_invalid"); }
|
|
71
|
+
if (typeof module.createNeutralHostReleaseRuntime !== "function") fail();
|
|
72
|
+
const runtime = await module.createNeutralHostReleaseRuntime();
|
|
73
|
+
if (!runtime || typeof runtime !== "object" || Array.isArray(runtime)) fail();
|
|
74
|
+
return Object.freeze({ ...runtime, releaseManifestSha256: inspection.manifestSha256 });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export async function loadNeutralHostRelease() {
|
|
78
|
+
return activateNeutralHostRelease(await inspectNeutralHostRelease());
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function readArtifact(file, maximum) {
|
|
82
|
+
await assertNoReparseAncestors(file);
|
|
83
|
+
let handle;
|
|
84
|
+
try { handle = await fs.open(file, "r"); }
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error?.code === "ENOENT") throw codeError("neutral_trae_work_runner_unavailable");
|
|
87
|
+
throw codeError("neutral_trae_work_runner_integrity_invalid");
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const before = await handle.stat({ bigint: true });
|
|
91
|
+
if (!before.isFile() || before.nlink !== 1n || before.size > BigInt(maximum)) fail();
|
|
92
|
+
const bytes = await handle.readFile();
|
|
93
|
+
const after = await handle.stat({ bigint: true });
|
|
94
|
+
if (!sameIdentity(identity(before), identity(after))) fail();
|
|
95
|
+
return Object.freeze({ bytes, identity: identity(after) });
|
|
96
|
+
} catch (error) {
|
|
97
|
+
if (/^neutral_trae_work_/.test(String(error?.code || ""))) throw error;
|
|
98
|
+
throw codeError("neutral_trae_work_runner_integrity_invalid");
|
|
99
|
+
} finally { await handle?.close(); }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async function assertNoReparseAncestors(target) {
|
|
103
|
+
const resolved = path.resolve(target);
|
|
104
|
+
const parsed = path.parse(resolved);
|
|
105
|
+
let cursor = parsed.root;
|
|
106
|
+
for (const segment of path.relative(parsed.root, resolved).split(path.sep).filter(Boolean)) {
|
|
107
|
+
cursor = path.join(cursor, segment);
|
|
108
|
+
let stat;
|
|
109
|
+
try { stat = await fs.lstat(cursor); }
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error?.code === "ENOENT") throw codeError("neutral_trae_work_runner_unavailable");
|
|
112
|
+
throw codeError("neutral_trae_work_runner_integrity_invalid");
|
|
113
|
+
}
|
|
114
|
+
if (stat.isSymbolicLink()) fail();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function identity(stat) {
|
|
119
|
+
return Object.freeze({
|
|
120
|
+
dev: String(stat.dev), ino: String(stat.ino), size: String(stat.size),
|
|
121
|
+
mtimeNs: String(stat.mtimeNs), nlink: String(stat.nlink),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function sameIdentity(left, right) {
|
|
125
|
+
return left.dev === right.dev && left.ino === right.ino && left.size === right.size
|
|
126
|
+
&& left.mtimeNs === right.mtimeNs && left.nlink === right.nlink;
|
|
127
|
+
}
|
|
128
|
+
function parseJson(bytes) { try { return JSON.parse(bytes); } catch { fail(); } }
|
|
129
|
+
function safeRelative(value) {
|
|
130
|
+
const text = String(value || "");
|
|
131
|
+
const allowed = text.startsWith("release/") ? SAFE_RELEASE_RELATIVE : SAFE_RUNTIME_RELATIVE;
|
|
132
|
+
if (!allowed.test(text) || text.split("/").includes("..")) fail();
|
|
133
|
+
return text;
|
|
134
|
+
}
|
|
135
|
+
function inside(relative) {
|
|
136
|
+
const releaseRoot = path.dirname(ROOT);
|
|
137
|
+
const result = relative.startsWith("release/")
|
|
138
|
+
? path.resolve(releaseRoot, relative.slice("release/".length))
|
|
139
|
+
: path.resolve(ROOT, relative);
|
|
140
|
+
const base = relative.startsWith("release/") ? releaseRoot : ROOT;
|
|
141
|
+
if (!result.startsWith(`${base}${path.sep}`)) fail();
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
function exact(value, expected) {
|
|
145
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) fail();
|
|
146
|
+
const actual = Object.keys(value).sort(); const wanted = [...expected].sort();
|
|
147
|
+
if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) fail();
|
|
148
|
+
}
|
|
149
|
+
const HASH = /^[a-f0-9]{64}$/;
|
|
150
|
+
const CONTROL_PATHS = new Map([
|
|
151
|
+
["neutral-host-release-pin.json", PIN_PATH],
|
|
152
|
+
["neutral-host-release-manifest.json", MANIFEST_PATH],
|
|
153
|
+
]);
|
|
154
|
+
function sha256(value) { return crypto.createHash("sha256").update(value).digest("hex"); }
|
|
155
|
+
function fail() { throw codeError("neutral_trae_work_runner_integrity_invalid"); }
|
|
156
|
+
function codeError(code) { const error = new Error(code); error.code = code; return error; }
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract": "hellolynk-neutral-host-release-manifest-v1",
|
|
3
|
+
"entry": "neutral-host-release-entry.mjs",
|
|
4
|
+
"files": [
|
|
5
|
+
{
|
|
6
|
+
"path": "release/integrations/trae-work/package.json",
|
|
7
|
+
"sha256": "359d30887c1930cbda3e7cf1aafb4bf56f81782715fffe940b3a8f052ce0d6d3"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"path": "connect-activate.mjs",
|
|
11
|
+
"sha256": "50ec8b0a58ac5b099a653722b0946acb23d0a29a054bfb3856dc963db6f84bee"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"path": "neutral-host-bootstrap.mjs",
|
|
15
|
+
"sha256": "8a1676de41060a46f44826b6db84046c9f4a2b42cd5f5c52df8a3b25a6426145"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": "neutral-host-release-loader.mjs",
|
|
19
|
+
"sha256": "70bacded7cd42bef424e927d4002b6171aa613b0609f62ea02ebe8344359bfd6"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": "neutral-host-release-entry.mjs",
|
|
23
|
+
"sha256": "480281983e8d6ec6287def780d7bde50c1034143cf6888e09002180f28263f29"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": "trae-work-bootstrap.mjs",
|
|
27
|
+
"sha256": "00af92054453b3725b8b72b021480c96ed2d07d8a7683048c500678818291299"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "core/hellolynk-agent-configurator.mjs",
|
|
31
|
+
"sha256": "53d284d18c3f898e9d5932b5cafc4f8caa5323b4701e7e765730537c4977ac99"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "core/hellolynk-client-account.mjs",
|
|
35
|
+
"sha256": "a22f14f494c1a44a9272ca95e160f8cb1df612a1ceb8b54e32596b13f90c3740"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"path": "core/hellolynk-client-core.mjs",
|
|
39
|
+
"sha256": "af7c9cb7a996fdb194c51dbcc745c48b616ff1686d79a1451104690d882df1b8"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"path": "core/hellolynk-client-profile.mjs",
|
|
43
|
+
"sha256": "81d4f64c11c8dbccec04a05435cc42b53823db2649f2c88739647299b3c97fd2"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"path": "core/hellolynk-client-update-entry.mjs",
|
|
47
|
+
"sha256": "dc62228a7351c721514b5ca7921d485dc6aa05475aaa2e3881b78d7de0e1a134"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": "core/hellolynk-client-update-runtime.mjs",
|
|
51
|
+
"sha256": "0a76f2bdcf338c544e493ca7d0b7168f03ffa32ed223e3537eccafc1cbaafba0"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"path": "core/hellolynk-client-update.mjs",
|
|
55
|
+
"sha256": "a4104a67dd72cb7a1950585c92aa8424b9387c1eda4f191e0df3f901c4f16a8f"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"path": "core/hellolynk-release-retention.mjs",
|
|
59
|
+
"sha256": "f5488a756dc9063fe5b44e0ea45dcdcc1903be3909717c7a8674b15e4952bfac"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"path": "core/hellolynk-contact-request-e2ee.mjs",
|
|
63
|
+
"sha256": "18526628b354d18bcbe5e621360ecfcd5dfa4cb4d91397fb87d0c20e1f332a5d"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"path": "core/hellolynk-device-enrollment.mjs",
|
|
67
|
+
"sha256": "18f9decb843a5a82ef8dfc3e866904e0b04bbc48d700eac55a8ae54c5729c2aa"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"path": "core/hellolynk-direct-text-e2ee-client.mjs",
|
|
71
|
+
"sha256": "dd5dfa410a664e21e14b3c253ca496dd303e36aa5a2e1370b78cc51ec1fba973"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"path": "core/hellolynk-direct-text-e2ee.mjs",
|
|
75
|
+
"sha256": "3fee00210896b81cf40d25c634a6a758adee18704ef4a74fbc00b699a58d53e5"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"path": "core/hellolynk-host-auth.mjs",
|
|
79
|
+
"sha256": "49baa0b82ab078ad74a892a179189bdbd303a791d580ba4d6eac457564fad535"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"path": "core/hellolynk-host-protected-store.mjs",
|
|
83
|
+
"sha256": "0cefa22574df9dd99073d73bb688e9cae3faf6da862af013c1dfe9c87efef32e"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"path": "core/hellolynk-host-transport-client.mjs",
|
|
87
|
+
"sha256": "0c97425346496a5d5e1f2b3d092d5d227179051b63e8097bab225dffe576008a"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"path": "core/hellolynk-host.mjs",
|
|
91
|
+
"sha256": "ed88f2285b4c5eb8618a2f3f3c2a7a65d798465933b91b109121bb90b45f5880"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "core/hellolynk-model-notices.cjs",
|
|
95
|
+
"sha256": "1b1c6e190b89f7305d05e1dddddaa6d50b7289b90aeab4599073eaaae27396f1"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"path": "core/hellolynk-model-inbox.mjs",
|
|
99
|
+
"sha256": "e112cbbb1caff5aa6f4a71bdfcb2d1c38260a96e3e4ab076b5f95c55e1da645e"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"path": "core/hellolynk-native-inbox-runtime.mjs",
|
|
103
|
+
"sha256": "bee3a5789420cc25cbc153cc8291f144b3a10ae50e96269823b7890cb603789d"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"path": "core/hellolynk-native-reply-routes.mjs",
|
|
107
|
+
"sha256": "65af258205a7eb9d2c599e0f400dbd9ea198c38a26f491e06f27c5c46101fc9b"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"path": "core/hellolynk-native-worker-lease.mjs",
|
|
111
|
+
"sha256": "41eb3103c216a09b80159522700b7bb78f3b082a644501fd19fa51ce1bf6bab7"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"path": "core/hellolynk-human-confirmation-ledger.mjs",
|
|
115
|
+
"sha256": "265ae39e93112416588841a14eb0351905d60b2552cf04c8cf8bd057acd64586"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"path": "core/hellolynk-human-relationship-controller.mjs",
|
|
119
|
+
"sha256": "01589c3eeb1c35f26cb50a14ce4e603c7bffe71e0b11863aed97c85f356e3c97"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"path": "core/hellolynk-indexed-message-store.mjs",
|
|
123
|
+
"sha256": "101f928dc5fab8064132e8755f74e157d35f921b5fe7d52fc80c0e46dc131428"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"path": "core/hellolynk-inbox-read-state.mjs",
|
|
127
|
+
"sha256": "3c354aaa7038446f8f554f9520db287cc06559e6cb22cb69f0121a179ff2cb01"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"path": "core/hellolynk-instance-conversation.mjs",
|
|
131
|
+
"sha256": "2e4a23917d4a86216b653ed04ec46216b9400fa94c13c0a00f1afc7877e284cb"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"path": "core/hellolynk-local-contact-requests.mjs",
|
|
135
|
+
"sha256": "3cbf0a0c6adeff17ceb310d202138c2dde7e23d0e8309f2584c161aae4c36acd"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"path": "core/hellolynk-local-contacts.mjs",
|
|
139
|
+
"sha256": "93d923702bdb5cbcbd47faf01f2c2e30bfe612fc450ef35ee98477412b2bbc6e"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"path": "core/hellolynk-local-data-migration.mjs",
|
|
143
|
+
"sha256": "72046a992b14f43167d6a671ec1094d34041cf43ba16d9d507583228045c7aa2"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"path": "core/hellolynk-local-data-protection.mjs",
|
|
147
|
+
"sha256": "798f42e9bd45a00565b628282233a55abfdc4d7102423cb0558a7e01fab76810"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"path": "core/hellolynk-local-identity-trust.mjs",
|
|
151
|
+
"sha256": "658fb5264d587341497e7d869408e51c1850f750856585ec7368a13c26f76a07"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"path": "core/hellolynk-local-messaging.mjs",
|
|
155
|
+
"sha256": "76b4348eb6eff34dec41c90666ac8ee14554018c5729c39b5b78bac30f0eaf80"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"path": "core/hellolynk-local-peer-transport.mjs",
|
|
159
|
+
"sha256": "4b8f01002b03fa19a9eea9dd72c7a41c4c951d6ef201f06dd1a89086a0a872cd"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"path": "core/hellolynk-local-process-lock.mjs",
|
|
163
|
+
"sha256": "5dd9b21f4e4509b148daaf2b495036e336e56be320d2bf7a3fac08b8a567d3bf"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"path": "core/hellolynk-native-conversations.mjs",
|
|
167
|
+
"sha256": "38116a956c2c96dbac6b5355e2097385475879ab5e9965ae3552912739379630"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"path": "core/hellolynk-native-notice.mjs",
|
|
171
|
+
"sha256": "d0c96a6dd9fed10a1e394dd2bf8c9b02af69ec5d97cd416d50f36b461324b0f9"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"path": "core/hellolynk-native-addressing-tools.cjs",
|
|
175
|
+
"sha256": "e583c769b72d8cf52523c19b3320c982c2550f002041770f5953f16951690162"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"path": "core/hellolynk-native-human-confirmation-broker.mjs",
|
|
179
|
+
"sha256": "755fd03a4ee3b97cdfdb1efc491fb4cf602e25173819380ea8a715c04c82ea5a"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"path": "core/hellolynk-neutral-host-assembly.mjs",
|
|
183
|
+
"sha256": "98b2b669183cda15272b182d5c04d3ae77511b8b657cd3179cbf2fa5d5f27920"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"path": "core/hellolynk-neutral-host-installation-store.mjs",
|
|
187
|
+
"sha256": "9ff399639d320e5527e51cd0ddbf049e7e0e8d3cc225cdc30f0d4637356a1590"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"path": "core/hellolynk-neutral-host-launcher.mjs",
|
|
191
|
+
"sha256": "490f8010bd84fc7c92a00ec4d4a996c27dd398b2e3584ded8bcebb74c598c18d"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"path": "core/hellolynk-neutral-host-process.mjs",
|
|
195
|
+
"sha256": "42cc6be6d187755bb80479892b4107901ea712f75bdf01d1a4b9517a2a7b64a2"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"path": "core/hellolynk-neutral-host-store-adapters.mjs",
|
|
199
|
+
"sha256": "b033d5cdedc54847bf1a9fd4d5b70af6d0e1ed8094e74feebbb592c242a0cde9"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"path": "core/hellolynk-neutral-host-workbench-read-model.mjs",
|
|
203
|
+
"sha256": "6767b4aaf5c7304587d7126f203535f02d1f1bfd692741105ad644686ecb1612"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"path": "core/hellolynk-platform-credential-store.mjs",
|
|
207
|
+
"sha256": "0558aca043ff586f10d7b82e1b2fe9b537ff661913dce76fc92feaf9bd7e5546"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"path": "core/hellolynk-relay-client-cli.mjs",
|
|
211
|
+
"sha256": "e3134f37ff8c327b3148a4c417ee14c6c8bfbc3be9680e25c1ea29d215dff1d7"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"path": "core/hellolynk-runtime-safety.cjs",
|
|
215
|
+
"sha256": "1518d9904b329f05a92092f0f2d4014675014597573ba85f33e3e06c25ecea16"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"path": "core/hellolynk-workbench-action-grants.mjs",
|
|
219
|
+
"sha256": "7247f4bce07e6fafce6559604ef9c7a8f7a033b922c212344462411be55ea9ac"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"path": "core/hellolynk-workbench-connection.mjs",
|
|
223
|
+
"sha256": "198fb21c3db2c91b85ca38d334c0ffe56ef28f2f052b6b62a8d2ed5c166fcd82"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"path": "workbench/candidate-bootstrap.mjs",
|
|
227
|
+
"sha256": "891b02f750693e5b4836e716922c2d632f6736b2a5b3b7417f161499459f3f56"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"path": "workbench/contract.mjs",
|
|
231
|
+
"sha256": "20648c3ed8e20b984b698010855414f8d4acaf0e2ade53b997b5582a85d90a08"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"path": "workbench/host-capabilities.mjs",
|
|
235
|
+
"sha256": "4e1a82e6cb46dd775ba39e2d34ff21eb1c293523883d18e607084ca91cfffb87"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"path": "workbench/i18n.mjs",
|
|
239
|
+
"sha256": "272917746c06cabc1b87b94341f2deca5591f0bea2d7a0e07b2d959d8e1f8c74"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"path": "workbench/loopback-surface.mjs",
|
|
243
|
+
"sha256": "6a550034c5dd558dfd22f9cb589fd76df40a99e976538e3b5d01371d212c9aa6"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"path": "workbench/mcp-app-bundle.mjs",
|
|
247
|
+
"sha256": "48fb8224cbaa7f78a386a79b2dba761f4de6c4b83b16032f7f96bd9783e172e4"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"path": "workbench/service.mjs",
|
|
251
|
+
"sha256": "3bf82a0076e9fe3b62105c626fe0d622092224f28d3905c62eafd65bf5385dcc"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"path": "workbench/state.mjs",
|
|
255
|
+
"sha256": "770d10f3bf76236772c87e86f5da346c013da387fb40c08360f895a7052cf7b5"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"path": "workbench/transports.mjs",
|
|
259
|
+
"sha256": "0c9f42ca9c9a4b4cc29b1bdcc0a0488d16a9ad06c235c642dff9cd4fc6f0d528"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"path": "workbench/ui/app.mjs",
|
|
263
|
+
"sha256": "643a5ac8d303f936ee87dd7c0c851aa1988e99ea9a9a45c6c89da28bdc76e799"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"path": "workbench/ui/connection-form.mjs",
|
|
267
|
+
"sha256": "700ca793f5eddca1dfea5f220c73732efc51ea4e1f8b8fc36da2bb67136240f0"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"path": "workbench/ui/http-transport.mjs",
|
|
271
|
+
"sha256": "b2fedbc2c34bcf065e0fc23c8c5fb37d358c03daa2c82ba46530b8dfb8fdc571"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"path": "workbench/ui/loopback-entry.mjs",
|
|
275
|
+
"sha256": "0e5e5d259ab6e2d8408c6d2e089551e6f279dcb1267e9db19f9d9dded0956fd4"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"path": "workbench/ui/mcp-app-client.mjs",
|
|
279
|
+
"sha256": "91b1e6e84a12434c2be7614845febfa44afa341d5d7f580bc1bfc106ed37f8f8"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"path": "workbench/ui/mcp-app-entry.mjs",
|
|
283
|
+
"sha256": "ba82ac55c4efcf7701bda33b6c6e0df4d59da542b1d6c33c96ba7f2391c4773a"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"path": "platform/windows/configure-agent.ps1",
|
|
287
|
+
"sha256": "d214863a02551befbca898b978efeb2a093d80933a577fad17795f50fb9f07aa"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"path": "platform/windows/credential-store.ps1",
|
|
291
|
+
"sha256": "7ec7362eba2c442d9417035ff14c1108c7a58558b6f09ac36a2275828370debb"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"path": "platform/windows/hellolynk-host-protected-store.ps1",
|
|
295
|
+
"sha256": "84ac61c3762b7f944bf3e2c895f9a6427985ce697052afd9bc610474c921adad"
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"path": "platform/windows/hellolynk-human-confirmation-ledger.ps1",
|
|
299
|
+
"sha256": "317409f270f2cbd8017b61384292cf9caf4bd0fce6ef7a9894c1ec4c173b240c"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"path": "platform/windows/hellolynk-local-data-key.ps1",
|
|
303
|
+
"sha256": "3143122114c9756370e2ff3f56eba4a03e4a1657888aab1c6d4387427081d937"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"path": "platform/windows/hellolynk-native-human-confirmation-broker.ps1",
|
|
307
|
+
"sha256": "d63e02b34eb43d1a81d771f0e23f0b8d38e34c8f96663156d0c7b79985802936"
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"path": "bootstrap/core/hellolynk-client-account.mjs",
|
|
311
|
+
"sha256": "a22f14f494c1a44a9272ca95e160f8cb1df612a1ceb8b54e32596b13f90c3740"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"path": "bootstrap/core/hellolynk-client-core.mjs",
|
|
315
|
+
"sha256": "af7c9cb7a996fdb194c51dbcc745c48b616ff1686d79a1451104690d882df1b8"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"path": "bootstrap/core/hellolynk-client-profile.mjs",
|
|
319
|
+
"sha256": "81d4f64c11c8dbccec04a05435cc42b53823db2649f2c88739647299b3c97fd2"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"path": "bootstrap/core/hellolynk-host-auth.mjs",
|
|
323
|
+
"sha256": "49baa0b82ab078ad74a892a179189bdbd303a791d580ba4d6eac457564fad535"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"path": "bootstrap/core/hellolynk-host-protected-store.mjs",
|
|
327
|
+
"sha256": "0cefa22574df9dd99073d73bb688e9cae3faf6da862af013c1dfe9c87efef32e"
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"path": "bootstrap/core/hellolynk-local-process-lock.mjs",
|
|
331
|
+
"sha256": "5dd9b21f4e4509b148daaf2b495036e336e56be320d2bf7a3fac08b8a567d3bf"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"path": "bootstrap/core/hellolynk-neutral-host-installation-store.mjs",
|
|
335
|
+
"sha256": "9ff399639d320e5527e51cd0ddbf049e7e0e8d3cc225cdc30f0d4637356a1590"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"path": "bootstrap/core/hellolynk-platform-credential-store.mjs",
|
|
339
|
+
"sha256": "0558aca043ff586f10d7b82e1b2fe9b537ff661913dce76fc92feaf9bd7e5546"
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"path": "bootstrap/core/hellolynk-runtime-safety.cjs",
|
|
343
|
+
"sha256": "1518d9904b329f05a92092f0f2d4014675014597573ba85f33e3e06c25ecea16"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"path": "bootstrap/platform/windows/hellolynk-host-protected-store.ps1",
|
|
347
|
+
"sha256": "84ac61c3762b7f944bf3e2c895f9a6427985ce697052afd9bc610474c921adad"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"path": "release/integrations/trae-work/server/dynamic-ui-contract.mjs",
|
|
351
|
+
"sha256": "574c6049de1965feffb3d5fce31eb5a97f0b82bcae6cfef1064538bafe04572c"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"path": "release/integrations/trae-work/server/host-lifecycle.mjs",
|
|
355
|
+
"sha256": "8db8af3a61a6095ded68eb9763c4b3e6a74e0ea3291105c83cd84565bc3abff2"
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"path": "release/integrations/trae-work/server/mcp-proxy.mjs",
|
|
359
|
+
"sha256": "e53eb7ab1261d6e2f84f397bcae11486a60e619a2586e8616a69a8647e1661dc"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"path": "release/integrations/trae-work/server/mcp-server.mjs",
|
|
363
|
+
"sha256": "a2b01d8a1a127a1c8bdcffe96ae53d3e0319727e2fb26f2a1cedc755527e319e"
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"path": "release/integrations/trae-work/server/neutral-host-adapter.mjs",
|
|
367
|
+
"sha256": "81bf4fd9bec2cb051b15cdedf13606d58fc358e098eec24216fce4fcb2758ca7"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"path": "release/integrations/trae-work/server/native-task-cdp.mjs",
|
|
371
|
+
"sha256": "587703b7d98dad6c320e4c2f98bf50d4f78d29483ccc01ac1ca27af026f3c5a4"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"path": "release/integrations/trae-work/server/native-task-worker.mjs",
|
|
375
|
+
"sha256": "8c12e71943265dfb971fe64aadb4617522d0cf334ebc7721f34d18f870374a07"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"path": "release/integrations/trae-work/server/trae-neutral-production.mjs",
|
|
379
|
+
"sha256": "76971d9933bcf1861c16eb62b9d220346b3b9c6aeac35672cc04f5658ec6baee"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"path": "release/integrations/trae-work/server/trae-ui-launch.mjs",
|
|
383
|
+
"sha256": "653c0d1849f44c556d13a97f1e50419b9c34d5a69f3d9f37bdc3eb39ae7ffb9f"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"path": "release/integrations/trae-work/server/ui-action-gate.mjs",
|
|
387
|
+
"sha256": "e7f7cf0d0ff20ebe38884f8fbbf04c722e262177dd37818284c6a2b2473be0ad"
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"path": "release/integrations/trae-work/skills/hellolynk-inbox/SKILL.md",
|
|
391
|
+
"sha256": "15e46b225a25ee192ff01f0f674bb8d0792c54eae3c99c5d236a613b2bff29b4"
|
|
392
|
+
}
|
|
393
|
+
]
|
|
394
|
+
}
|