@hellolynk-ai/workbuddy-mcp 0.3.98 → 0.3.100
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 +79 -13
- package/clients/core/hellolynk-client-account.mjs +1 -1
- package/clients/core/hellolynk-client-profile.mjs +25 -2
- package/clients/core/hellolynk-client-update-entry.mjs +7 -3
- package/clients/core/hellolynk-client-update-runtime.mjs +62 -33
- package/clients/core/hellolynk-client-update.mjs +62 -18
- package/clients/core/hellolynk-darwin-host.mjs +269 -0
- package/clients/core/hellolynk-darwin-vault.mjs +153 -0
- package/clients/core/hellolynk-host-protected-store.mjs +20 -8
- package/clients/core/hellolynk-human-confirmation-ledger.mjs +53 -6
- package/clients/core/hellolynk-local-data-protection.mjs +22 -7
- package/clients/core/hellolynk-native-human-confirmation-broker.mjs +7 -5
- package/clients/core/hellolynk-neutral-host-installation-store.mjs +3 -7
- package/clients/core/hellolynk-neutral-host-launcher.mjs +9 -3
- package/clients/core/hellolynk-neutral-host-process.mjs +1 -1
- package/clients/core/hellolynk-platform-credential-store.mjs +68 -14
- package/clients/core/hellolynk-release-retention.mjs +101 -2
- package/clients/core/hellolynk-workbench-connection.mjs +5 -3
- package/clients/platform/windows/credential-store.ps1 +46 -10
- package/hellolynk-client-pack-manifest.json +101 -81
- package/hellolynk-client-pack-pin.json +1 -1
- package/integrations/workbuddy/package.json +1 -1
- package/package.json +1 -1
- package/runtime/connect-activate.mjs +5 -1
- package/runtime/core/hellolynk-client-account.mjs +1 -1
- package/runtime/core/hellolynk-client-profile.mjs +25 -2
- package/runtime/core/hellolynk-client-update-entry.mjs +7 -3
- package/runtime/core/hellolynk-client-update-runtime.mjs +62 -33
- package/runtime/core/hellolynk-client-update.mjs +62 -18
- package/runtime/core/hellolynk-darwin-host.mjs +269 -0
- package/runtime/core/hellolynk-darwin-vault.mjs +153 -0
- package/runtime/core/hellolynk-host-protected-store.mjs +20 -8
- package/runtime/core/hellolynk-human-confirmation-ledger.mjs +53 -6
- package/runtime/core/hellolynk-local-data-protection.mjs +22 -7
- package/runtime/core/hellolynk-native-human-confirmation-broker.mjs +7 -5
- package/runtime/core/hellolynk-neutral-host-installation-store.mjs +3 -7
- package/runtime/core/hellolynk-neutral-host-launcher.mjs +9 -3
- package/runtime/core/hellolynk-neutral-host-process.mjs +1 -1
- package/runtime/core/hellolynk-platform-credential-store.mjs +68 -14
- package/runtime/core/hellolynk-release-retention.mjs +101 -2
- package/runtime/core/hellolynk-workbench-connection.mjs +5 -3
- package/runtime/neutral-host-release-loader.mjs +1 -1
- package/runtime/neutral-host-release-manifest.json +26 -18
- package/runtime/neutral-host-release-pin.json +1 -1
- package/runtime/platform/windows/credential-store.ps1 +46 -10
- package/tools/hellolynk-activate-neutral-host-clients.mjs +5 -1
- package/workbuddy-package-manifest.json +1 -1
- package/workbuddy-package-pin.json +1 -1
|
@@ -60,7 +60,7 @@ export function validateWorkbenchConnectionInput(value) {
|
|
|
60
60
|
export function createWorkbenchConnection(options) {
|
|
61
61
|
if (!CLIENTS.has(options?.client) || !path.isAbsolute(options?.releaseRoot || "")) throw code("workbench_connect_configuration_invalid");
|
|
62
62
|
const env = options.env || process.env;
|
|
63
|
-
const storeRoot = options.storeRoot || env.HELLOLYNK_NEUTRAL_STORE_ROOT || defaultNeutralHostStoreRoot(
|
|
63
|
+
const storeRoot = options.storeRoot || env.HELLOLYNK_NEUTRAL_STORE_ROOT || defaultNeutralHostStoreRoot(process.platform, env);
|
|
64
64
|
if (!path.isAbsolute(storeRoot)) throw code("workbench_connect_configuration_invalid");
|
|
65
65
|
let busy = false;
|
|
66
66
|
const accounts = createClientAccountActions(options);
|
|
@@ -87,7 +87,7 @@ export function createWorkbenchAccountActions(options) {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
async function connectAccount(client, sourceRoot, storeRoot, input) {
|
|
90
|
-
if (process.platform
|
|
90
|
+
if (!["win32", "darwin"].includes(process.platform)) throw code("workbench_connect_platform_unsupported", 400);
|
|
91
91
|
if (!CLIENTS.has(client) || !path.isAbsolute(sourceRoot) || !path.isAbsolute(storeRoot)
|
|
92
92
|
|| path.basename(storeRoot).toLowerCase() !== "host") throw code("workbench_connect_configuration_invalid");
|
|
93
93
|
const value = validateWorkbenchConnectionInput(input);
|
|
@@ -181,7 +181,9 @@ async function retainRelease(binding, currentRoot, client) {
|
|
|
181
181
|
const destination = path.resolve(stage, relative);
|
|
182
182
|
if (!destination.startsWith(`${stage}${path.sep}`)) throw code("workbench_connect_release_invalid");
|
|
183
183
|
await fs.mkdir(path.dirname(destination), { recursive: true, mode: 0o700 });
|
|
184
|
-
await fs.writeFile(destination, await fs.readFile(path.join(sourceRoot, relative)), {
|
|
184
|
+
await fs.writeFile(destination, await fs.readFile(path.join(sourceRoot, relative)), {
|
|
185
|
+
flag: "wx", mode: relative.endsWith(".bin") ? 0o700 : 0o600,
|
|
186
|
+
});
|
|
185
187
|
}
|
|
186
188
|
await verifyPinnedNeutralHostRuntime({ ...binding, releaseRoot: stage });
|
|
187
189
|
await secureWindowsClientReleaseTree(currentRoot, stageId);
|
|
@@ -85,8 +85,27 @@ public static class HelloLynkWindowsFileNative {
|
|
|
85
85
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
86
86
|
public static extern bool MoveFileExW(string existingName, string newName, uint flags);
|
|
87
87
|
|
|
88
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
89
|
+
private struct SECURITY_ATTRIBUTES {
|
|
90
|
+
public int Length;
|
|
91
|
+
public IntPtr SecurityDescriptor;
|
|
92
|
+
public int InheritHandle;
|
|
93
|
+
}
|
|
94
|
+
|
|
88
95
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
89
|
-
|
|
96
|
+
private static extern bool CreateDirectoryW(string path, ref SECURITY_ATTRIBUTES attributes);
|
|
97
|
+
|
|
98
|
+
public static bool CreateProtectedDirectory(string path, byte[] descriptor) {
|
|
99
|
+
var pinned = GCHandle.Alloc(descriptor, GCHandleType.Pinned);
|
|
100
|
+
try {
|
|
101
|
+
var attributes = new SECURITY_ATTRIBUTES {
|
|
102
|
+
Length = Marshal.SizeOf<SECURITY_ATTRIBUTES>(),
|
|
103
|
+
SecurityDescriptor = pinned.AddrOfPinnedObject(),
|
|
104
|
+
InheritHandle = 0
|
|
105
|
+
};
|
|
106
|
+
return CreateDirectoryW(path, ref attributes);
|
|
107
|
+
} finally { pinned.Free(); }
|
|
108
|
+
}
|
|
90
109
|
}
|
|
91
110
|
'@
|
|
92
111
|
|
|
@@ -162,7 +181,7 @@ function Get-HelloLynkExistingAncestorDirectories([string]$RootPath) {
|
|
|
162
181
|
return $ordered
|
|
163
182
|
}
|
|
164
183
|
|
|
165
|
-
function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
184
|
+
function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath, [bool]$Create = $false) {
|
|
166
185
|
$rootParent = [IO.Path]::GetDirectoryName($RootPath.TrimEnd([char[]]@('\', '/')))
|
|
167
186
|
$directories = @(Get-HelloLynkExistingAncestorDirectories $RootPath)
|
|
168
187
|
$dangerousRights = (
|
|
@@ -175,6 +194,8 @@ function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
|
175
194
|
[Security.AccessControl.FileSystemRights]::ChangePermissions -bor
|
|
176
195
|
[Security.AccessControl.FileSystemRights]::TakeOwnership
|
|
177
196
|
)
|
|
197
|
+
$createRights = [Security.AccessControl.FileSystemRights]::CreateFiles -bor
|
|
198
|
+
[Security.AccessControl.FileSystemRights]::CreateDirectories
|
|
178
199
|
foreach ($directory in $directories) {
|
|
179
200
|
Assert-HelloLynkNoReparseAncestors $directory
|
|
180
201
|
$identity = Open-HelloLynkIdentity $directory $true
|
|
@@ -204,6 +225,7 @@ function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
|
204
225
|
)
|
|
205
226
|
$isRootParent = $directory.Equals($rootParent, [StringComparison]::OrdinalIgnoreCase)
|
|
206
227
|
$directoryIndex = [Array]::IndexOf($directories, $directory)
|
|
228
|
+
$willCreateProtectedChild = $Create -and -not $isRootParent -and $directoryIndex -eq $directories.Count - 1
|
|
207
229
|
$nextDirectoryProtected = $false
|
|
208
230
|
if ($directoryIndex -ge 0 -and $directoryIndex + 1 -lt $directories.Count) {
|
|
209
231
|
try {
|
|
@@ -220,15 +242,20 @@ function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
|
220
242
|
) { continue }
|
|
221
243
|
$rights = $rule.FileSystemRights
|
|
222
244
|
$hasDangerousRights = (($rights -band $dangerousRights) -ne 0)
|
|
245
|
+
# A competing child created by a different user fails our owner check.
|
|
246
|
+
# A grant to alter the ancestor itself still prevents first creation.
|
|
247
|
+
$canCreateProtectedChild = $willCreateProtectedChild -and
|
|
248
|
+
(($rights -band $dangerousRights -band (-bnot $createRights)) -eq 0)
|
|
223
249
|
$hasDeleteChild = (
|
|
224
250
|
($rights -band [Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles) -ne 0
|
|
225
251
|
)
|
|
226
252
|
if (
|
|
227
253
|
$hasDeleteChild -or
|
|
228
|
-
($hasDangerousRights -and ($isRootParent -or -not $nextDirectoryProtected))
|
|
254
|
+
($hasDangerousRights -and ($isRootParent -or (-not $nextDirectoryProtected -and -not $canCreateProtectedChild)))
|
|
229
255
|
) { Fail "client_root_ancestor_dacl_untrusted" }
|
|
230
256
|
}
|
|
231
257
|
}
|
|
258
|
+
return $directories[-1]
|
|
232
259
|
}
|
|
233
260
|
|
|
234
261
|
function New-HelloLynkAcl([bool]$Directory) {
|
|
@@ -361,7 +388,7 @@ function Exit-HelloLynkRootMutex($Mutex) {
|
|
|
361
388
|
try { $Mutex.ReleaseMutex() } finally { $Mutex.Dispose() }
|
|
362
389
|
}
|
|
363
390
|
|
|
364
|
-
function Ensure-HelloLynkSecureDirectory([string]$PathValue) {
|
|
391
|
+
function Ensure-HelloLynkSecureDirectory([string]$PathValue, [string]$ExistingAncestor = "") {
|
|
365
392
|
if ([IO.Directory]::Exists($PathValue)) {
|
|
366
393
|
Assert-HelloLynkNoReparseAncestors $PathValue
|
|
367
394
|
Assert-HelloLynkSecureAcl $PathValue $true
|
|
@@ -370,12 +397,21 @@ function Ensure-HelloLynkSecureDirectory([string]$PathValue) {
|
|
|
370
397
|
return
|
|
371
398
|
}
|
|
372
399
|
$parent = [IO.Path]::GetDirectoryName($PathValue)
|
|
373
|
-
if (
|
|
374
|
-
|
|
400
|
+
if ($ExistingAncestor) {
|
|
401
|
+
if (-not $parent.Equals($ExistingAncestor, [StringComparison]::OrdinalIgnoreCase)) {
|
|
402
|
+
Ensure-HelloLynkSecureDirectory $parent $ExistingAncestor
|
|
403
|
+
}
|
|
404
|
+
} elseif (-not [IO.Directory]::Exists($parent)) {
|
|
405
|
+
Ensure-HelloLynkSecureDirectory $parent
|
|
406
|
+
}
|
|
407
|
+
Assert-HelloLynkNoReparseAncestors $PathValue
|
|
408
|
+
$descriptor = (New-HelloLynkAcl $true).GetSecurityDescriptorBinaryForm()
|
|
409
|
+
if (-not [HelloLynkWindowsFileNative]::CreateProtectedDirectory($PathValue, $descriptor)) {
|
|
375
410
|
Fail "client_root_create_race"
|
|
376
411
|
}
|
|
377
|
-
Set-HelloLynkSecureAcl $PathValue $true
|
|
378
412
|
Assert-HelloLynkNoReparseAncestors $PathValue
|
|
413
|
+
# Keep the Windows auto-inheritance marker used by child file ACL checks.
|
|
414
|
+
Set-HelloLynkSecureAcl $PathValue $true
|
|
379
415
|
Assert-HelloLynkSecureAcl $PathValue $true
|
|
380
416
|
$identity = Open-HelloLynkIdentity $PathValue $true
|
|
381
417
|
$identity.Handle.Dispose()
|
|
@@ -386,14 +422,14 @@ function Resolve-HelloLynkClientRoot([string]$RootValue, [bool]$Create) {
|
|
|
386
422
|
Assert-HelloLynkNoReparseAncestors $root
|
|
387
423
|
$mutex = Enter-HelloLynkRootMutex $root
|
|
388
424
|
try {
|
|
389
|
-
Assert-HelloLynkTrustedAncestorAcl $root
|
|
390
|
-
if ($Create) { Ensure-HelloLynkSecureDirectory $root }
|
|
425
|
+
$existingAncestor = Assert-HelloLynkTrustedAncestorAcl $root $Create
|
|
426
|
+
if ($Create) { Ensure-HelloLynkSecureDirectory $root $existingAncestor }
|
|
391
427
|
if (-not [IO.Directory]::Exists($root)) { Fail "client_root_missing" }
|
|
392
428
|
Assert-HelloLynkNoReparseAncestors $root
|
|
393
429
|
Assert-HelloLynkSecureAcl $root $true
|
|
394
430
|
$identity = Open-HelloLynkIdentity $root $true
|
|
395
431
|
try {
|
|
396
|
-
Assert-HelloLynkTrustedAncestorAcl $root
|
|
432
|
+
$null = Assert-HelloLynkTrustedAncestorAcl $root
|
|
397
433
|
$canonical = $root
|
|
398
434
|
} finally { $identity.Handle.Dispose() }
|
|
399
435
|
return [pscustomobject]@{ Root = $canonical; Mutex = $mutex }
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"contract": "hellolynk-client-npm-pack-manifest-v1",
|
|
3
3
|
"client": "workbuddy",
|
|
4
4
|
"packageName": "@hellolynk-ai/workbuddy-mcp",
|
|
5
|
-
"version": "0.3.
|
|
5
|
+
"version": "0.3.100",
|
|
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": 145615,
|
|
16
|
+
"sha256": "044321ea6c5757a985b92a826ffc1fb3ffa4fb8355b732abecc64210d4ac3399"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "bin/hellolynk-mcp-config-shape.mjs",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"path": "clients/core/hellolynk-client-account.mjs",
|
|
25
|
-
"bytes":
|
|
26
|
-
"sha256": "
|
|
25
|
+
"bytes": 8603,
|
|
26
|
+
"sha256": "57082d5ea5e068dad81a47dd8abd38e34663e4563d8efa40f5130b817a346670"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"path": "clients/core/hellolynk-client-core.mjs",
|
|
@@ -32,29 +32,39 @@
|
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
"path": "clients/core/hellolynk-client-profile.mjs",
|
|
35
|
-
"bytes":
|
|
36
|
-
"sha256": "
|
|
35
|
+
"bytes": 9573,
|
|
36
|
+
"sha256": "4528f2eb90417dbe232c4fef254beeb20c94f9216388ec721f982dd7ee4adde5"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"path": "clients/core/hellolynk-client-update-entry.mjs",
|
|
40
|
-
"bytes":
|
|
41
|
-
"sha256": "
|
|
40
|
+
"bytes": 1974,
|
|
41
|
+
"sha256": "8b872933f9883a92889202cf370e1e8d878c2172e4e1c5d8aa8261f314577d90"
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
"path": "clients/core/hellolynk-client-update-runtime.mjs",
|
|
45
|
-
"bytes":
|
|
46
|
-
"sha256": "
|
|
45
|
+
"bytes": 42247,
|
|
46
|
+
"sha256": "6bdcc525579963fa3ffc46f29527817acc0b8090fdc6a9cbdadb0fc262eee12e"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"path": "clients/core/hellolynk-client-update.mjs",
|
|
50
|
-
"bytes":
|
|
51
|
-
"sha256": "
|
|
50
|
+
"bytes": 31391,
|
|
51
|
+
"sha256": "374690bb6cc7335b5f1cf030c33989aba9713e0922369edda0348b40ef71b02f"
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
"path": "clients/core/hellolynk-contact-request-e2ee.mjs",
|
|
55
55
|
"bytes": 35030,
|
|
56
56
|
"sha256": "18526628b354d18bcbe5e621360ecfcd5dfa4cb4d91397fb87d0c20e1f332a5d"
|
|
57
57
|
},
|
|
58
|
+
{
|
|
59
|
+
"path": "clients/core/hellolynk-darwin-host.mjs",
|
|
60
|
+
"bytes": 15511,
|
|
61
|
+
"sha256": "43dba4cd61cff66f2479c39532e504348a46e76faae0f7b1e09a7a7f5362e64a"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"path": "clients/core/hellolynk-darwin-vault.mjs",
|
|
65
|
+
"bytes": 7659,
|
|
66
|
+
"sha256": "2972df9fa8a0d7594072a39bc8dfa2a41b8fb33ddf79cc5abe5e66636c1ea3ca"
|
|
67
|
+
},
|
|
58
68
|
{
|
|
59
69
|
"path": "clients/core/hellolynk-device-enrollment.mjs",
|
|
60
70
|
"bytes": 27099,
|
|
@@ -77,8 +87,8 @@
|
|
|
77
87
|
},
|
|
78
88
|
{
|
|
79
89
|
"path": "clients/core/hellolynk-host-protected-store.mjs",
|
|
80
|
-
"bytes":
|
|
81
|
-
"sha256": "
|
|
90
|
+
"bytes": 130518,
|
|
91
|
+
"sha256": "bb0167b7861de2c408b90c16f24765f45dfeca7033f90d31e17dca3fc9e30c41"
|
|
82
92
|
},
|
|
83
93
|
{
|
|
84
94
|
"path": "clients/core/hellolynk-host-transport-client.mjs",
|
|
@@ -92,8 +102,8 @@
|
|
|
92
102
|
},
|
|
93
103
|
{
|
|
94
104
|
"path": "clients/core/hellolynk-human-confirmation-ledger.mjs",
|
|
95
|
-
"bytes":
|
|
96
|
-
"sha256": "
|
|
105
|
+
"bytes": 14719,
|
|
106
|
+
"sha256": "746f2d23f19fa110ecd87d0b1dc3d88138776accc3b177afd8f5d266223ccc81"
|
|
97
107
|
},
|
|
98
108
|
{
|
|
99
109
|
"path": "clients/core/hellolynk-human-relationship-controller.mjs",
|
|
@@ -132,8 +142,8 @@
|
|
|
132
142
|
},
|
|
133
143
|
{
|
|
134
144
|
"path": "clients/core/hellolynk-local-data-protection.mjs",
|
|
135
|
-
"bytes":
|
|
136
|
-
"sha256": "
|
|
145
|
+
"bytes": 27425,
|
|
146
|
+
"sha256": "e33b0c83fff59ba3ed49ae880d1b95016be4457bc7fd223367683942c78525bc"
|
|
137
147
|
},
|
|
138
148
|
{
|
|
139
149
|
"path": "clients/core/hellolynk-local-identity-trust.mjs",
|
|
@@ -177,8 +187,8 @@
|
|
|
177
187
|
},
|
|
178
188
|
{
|
|
179
189
|
"path": "clients/core/hellolynk-native-human-confirmation-broker.mjs",
|
|
180
|
-
"bytes":
|
|
181
|
-
"sha256": "
|
|
190
|
+
"bytes": 40773,
|
|
191
|
+
"sha256": "98d986f492a9e646f4601f25588cabe065e3c7bb00f0773b5dfd99e72e65c324"
|
|
182
192
|
},
|
|
183
193
|
{
|
|
184
194
|
"path": "clients/core/hellolynk-native-inbox-runtime.mjs",
|
|
@@ -212,18 +222,18 @@
|
|
|
212
222
|
},
|
|
213
223
|
{
|
|
214
224
|
"path": "clients/core/hellolynk-neutral-host-installation-store.mjs",
|
|
215
|
-
"bytes":
|
|
216
|
-
"sha256": "
|
|
225
|
+
"bytes": 33993,
|
|
226
|
+
"sha256": "f6e04183e8e0c945006c5348ed251833ec12a6ab9777031609b5a3ccd0d2252d"
|
|
217
227
|
},
|
|
218
228
|
{
|
|
219
229
|
"path": "clients/core/hellolynk-neutral-host-launcher.mjs",
|
|
220
|
-
"bytes":
|
|
221
|
-
"sha256": "
|
|
230
|
+
"bytes": 30326,
|
|
231
|
+
"sha256": "0afe5310d1d9f7b1448a9f50aeb2c1fc93b42ce7eb48dd8472fbde5d33e898af"
|
|
222
232
|
},
|
|
223
233
|
{
|
|
224
234
|
"path": "clients/core/hellolynk-neutral-host-process.mjs",
|
|
225
235
|
"bytes": 229535,
|
|
226
|
-
"sha256": "
|
|
236
|
+
"sha256": "634279c96b8b4e83bcbcc92c5184f4ec7c31713a097f45af3f5650f8151fb78b"
|
|
227
237
|
},
|
|
228
238
|
{
|
|
229
239
|
"path": "clients/core/hellolynk-neutral-host-store-adapters.mjs",
|
|
@@ -237,8 +247,8 @@
|
|
|
237
247
|
},
|
|
238
248
|
{
|
|
239
249
|
"path": "clients/core/hellolynk-platform-credential-store.mjs",
|
|
240
|
-
"bytes":
|
|
241
|
-
"sha256": "
|
|
250
|
+
"bytes": 39386,
|
|
251
|
+
"sha256": "0ab136d36e890309b4cb5ff6f1cef6f3d82caf65f5b1d08c7b3992442ffe38a7"
|
|
242
252
|
},
|
|
243
253
|
{
|
|
244
254
|
"path": "clients/core/hellolynk-relay-client-cli.mjs",
|
|
@@ -247,8 +257,8 @@
|
|
|
247
257
|
},
|
|
248
258
|
{
|
|
249
259
|
"path": "clients/core/hellolynk-release-retention.mjs",
|
|
250
|
-
"bytes":
|
|
251
|
-
"sha256": "
|
|
260
|
+
"bytes": 26013,
|
|
261
|
+
"sha256": "b894c452019b89486dd3090c9eeee7b7c2bb4e50753565bf88ecd14ce0efeaf1"
|
|
252
262
|
},
|
|
253
263
|
{
|
|
254
264
|
"path": "clients/core/hellolynk-runtime-safety.cjs",
|
|
@@ -262,13 +272,13 @@
|
|
|
262
272
|
},
|
|
263
273
|
{
|
|
264
274
|
"path": "clients/core/hellolynk-workbench-connection.mjs",
|
|
265
|
-
"bytes":
|
|
266
|
-
"sha256": "
|
|
275
|
+
"bytes": 14575,
|
|
276
|
+
"sha256": "0f24d28316253a761dc03d8096dace3da7a3cf8cb8eaf575765b2aa07d30274c"
|
|
267
277
|
},
|
|
268
278
|
{
|
|
269
279
|
"path": "clients/platform/windows/credential-store.ps1",
|
|
270
|
-
"bytes":
|
|
271
|
-
"sha256": "
|
|
280
|
+
"bytes": 41068,
|
|
281
|
+
"sha256": "4817c3c91d5d180763794a7a528f83664602f34cf1d1a8396e75ad6d56bd874f"
|
|
272
282
|
},
|
|
273
283
|
{
|
|
274
284
|
"path": "clients/platform/windows/hellolynk-host-protected-store.ps1",
|
|
@@ -302,8 +312,8 @@
|
|
|
302
312
|
},
|
|
303
313
|
{
|
|
304
314
|
"path": "integrations/workbuddy/package.json",
|
|
305
|
-
"bytes":
|
|
306
|
-
"sha256": "
|
|
315
|
+
"bytes": 1125,
|
|
316
|
+
"sha256": "faf3d8dcf992b437caae85981844a3f58aaab739a6ec5e05fdd11811efa769ef"
|
|
307
317
|
},
|
|
308
318
|
{
|
|
309
319
|
"path": "integrations/workbuddy/server/host-lifecycle.mjs",
|
|
@@ -412,8 +422,8 @@
|
|
|
412
422
|
},
|
|
413
423
|
{
|
|
414
424
|
"path": "package.json",
|
|
415
|
-
"bytes":
|
|
416
|
-
"sha256": "
|
|
425
|
+
"bytes": 2019,
|
|
426
|
+
"sha256": "3da057c2af9d3a0be2c1b016b543bfe47dfb3c8551769a5aabe472a12970bb23"
|
|
417
427
|
},
|
|
418
428
|
{
|
|
419
429
|
"path": "README.md",
|
|
@@ -422,8 +432,8 @@
|
|
|
422
432
|
},
|
|
423
433
|
{
|
|
424
434
|
"path": "runtime/connect-activate.mjs",
|
|
425
|
-
"bytes":
|
|
426
|
-
"sha256": "
|
|
435
|
+
"bytes": 33789,
|
|
436
|
+
"sha256": "93c68c23ed2d18e87766ecd8dae6c3d8e757eca6ad7569477c8ec994402a8b0e"
|
|
427
437
|
},
|
|
428
438
|
{
|
|
429
439
|
"path": "runtime/core/hellolynk-agent-configurator.mjs",
|
|
@@ -432,8 +442,8 @@
|
|
|
432
442
|
},
|
|
433
443
|
{
|
|
434
444
|
"path": "runtime/core/hellolynk-client-account.mjs",
|
|
435
|
-
"bytes":
|
|
436
|
-
"sha256": "
|
|
445
|
+
"bytes": 8423,
|
|
446
|
+
"sha256": "6e03a05127d4dc86be6391567b51a956d1a987acf4e23f5699ce0e00c3187b7e"
|
|
437
447
|
},
|
|
438
448
|
{
|
|
439
449
|
"path": "runtime/core/hellolynk-client-core.mjs",
|
|
@@ -442,29 +452,39 @@
|
|
|
442
452
|
},
|
|
443
453
|
{
|
|
444
454
|
"path": "runtime/core/hellolynk-client-profile.mjs",
|
|
445
|
-
"bytes":
|
|
446
|
-
"sha256": "
|
|
455
|
+
"bytes": 9359,
|
|
456
|
+
"sha256": "8be37831c96610e3d0a64848ada86488970cc6079e49764b47d8a8b2ba852269"
|
|
447
457
|
},
|
|
448
458
|
{
|
|
449
459
|
"path": "runtime/core/hellolynk-client-update-entry.mjs",
|
|
450
|
-
"bytes":
|
|
451
|
-
"sha256": "
|
|
460
|
+
"bytes": 1939,
|
|
461
|
+
"sha256": "d9548eacda8632976e42aafc65f0cef2ec9c5233d2d53b31b02aec0a1702b5eb"
|
|
452
462
|
},
|
|
453
463
|
{
|
|
454
464
|
"path": "runtime/core/hellolynk-client-update-runtime.mjs",
|
|
455
|
-
"bytes":
|
|
456
|
-
"sha256": "
|
|
465
|
+
"bytes": 41618,
|
|
466
|
+
"sha256": "aa233e2cdbdfadb7da6aa489591bc12c4121101b94696f93f6e6cb5d3e7c7870"
|
|
457
467
|
},
|
|
458
468
|
{
|
|
459
469
|
"path": "runtime/core/hellolynk-client-update.mjs",
|
|
460
|
-
"bytes":
|
|
461
|
-
"sha256": "
|
|
470
|
+
"bytes": 30894,
|
|
471
|
+
"sha256": "e57f7cc5e98519a014cef7cef68a97bb7e2beb33eb381c38d1751a3967904aaa"
|
|
462
472
|
},
|
|
463
473
|
{
|
|
464
474
|
"path": "runtime/core/hellolynk-contact-request-e2ee.mjs",
|
|
465
475
|
"bytes": 34163,
|
|
466
476
|
"sha256": "657664c6250d2738061e1ec2680eda6b36063c357d9e2d9c743e4218ece50895"
|
|
467
477
|
},
|
|
478
|
+
{
|
|
479
|
+
"path": "runtime/core/hellolynk-darwin-host.mjs",
|
|
480
|
+
"bytes": 15242,
|
|
481
|
+
"sha256": "ded97c3bc3dd65ca75305f5199a1340dffb987a5f283454d60586df8b6b55c09"
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
"path": "runtime/core/hellolynk-darwin-vault.mjs",
|
|
485
|
+
"bytes": 7506,
|
|
486
|
+
"sha256": "b6094d856af016e674e4a0183a4e474397bbe92e66638743fa62fe085b554d30"
|
|
487
|
+
},
|
|
468
488
|
{
|
|
469
489
|
"path": "runtime/core/hellolynk-device-enrollment.mjs",
|
|
470
490
|
"bytes": 26664,
|
|
@@ -487,8 +507,8 @@
|
|
|
487
507
|
},
|
|
488
508
|
{
|
|
489
509
|
"path": "runtime/core/hellolynk-host-protected-store.mjs",
|
|
490
|
-
"bytes":
|
|
491
|
-
"sha256": "
|
|
510
|
+
"bytes": 127785,
|
|
511
|
+
"sha256": "10f81f4f6a5dd2fe9a742e847b2eb47dbf20f802f4414f46a05ccbc3505148e2"
|
|
492
512
|
},
|
|
493
513
|
{
|
|
494
514
|
"path": "runtime/core/hellolynk-host-transport-client.mjs",
|
|
@@ -502,8 +522,8 @@
|
|
|
502
522
|
},
|
|
503
523
|
{
|
|
504
524
|
"path": "runtime/core/hellolynk-human-confirmation-ledger.mjs",
|
|
505
|
-
"bytes":
|
|
506
|
-
"sha256": "
|
|
525
|
+
"bytes": 14416,
|
|
526
|
+
"sha256": "43b6b6baea422eb226c850f15966c907d834bc2f5aadbab6ee0c9e05445f182f"
|
|
507
527
|
},
|
|
508
528
|
{
|
|
509
529
|
"path": "runtime/core/hellolynk-human-relationship-controller.mjs",
|
|
@@ -542,8 +562,8 @@
|
|
|
542
562
|
},
|
|
543
563
|
{
|
|
544
564
|
"path": "runtime/core/hellolynk-local-data-protection.mjs",
|
|
545
|
-
"bytes":
|
|
546
|
-
"sha256": "
|
|
565
|
+
"bytes": 26663,
|
|
566
|
+
"sha256": "cea4f73ec5a31918c48bd8234e28d38ff1bb8028d2591f542b15ee12b2238e1f"
|
|
547
567
|
},
|
|
548
568
|
{
|
|
549
569
|
"path": "runtime/core/hellolynk-local-identity-trust.mjs",
|
|
@@ -587,8 +607,8 @@
|
|
|
587
607
|
},
|
|
588
608
|
{
|
|
589
609
|
"path": "runtime/core/hellolynk-native-human-confirmation-broker.mjs",
|
|
590
|
-
"bytes":
|
|
591
|
-
"sha256": "
|
|
610
|
+
"bytes": 39735,
|
|
611
|
+
"sha256": "f190c28af2703b58a685a57213b2789df7eda35d7699d718f9420cd1dddd1b65"
|
|
592
612
|
},
|
|
593
613
|
{
|
|
594
614
|
"path": "runtime/core/hellolynk-native-inbox-runtime.mjs",
|
|
@@ -617,18 +637,18 @@
|
|
|
617
637
|
},
|
|
618
638
|
{
|
|
619
639
|
"path": "runtime/core/hellolynk-neutral-host-installation-store.mjs",
|
|
620
|
-
"bytes":
|
|
621
|
-
"sha256": "
|
|
640
|
+
"bytes": 33232,
|
|
641
|
+
"sha256": "42ae1e7deb876a8308b7bfed6a7b891d1834117b62504fc5befe3f91a0b4c740"
|
|
622
642
|
},
|
|
623
643
|
{
|
|
624
644
|
"path": "runtime/core/hellolynk-neutral-host-launcher.mjs",
|
|
625
|
-
"bytes":
|
|
626
|
-
"sha256": "
|
|
645
|
+
"bytes": 29655,
|
|
646
|
+
"sha256": "d94b853a7ed1ebc9c7e9bd7c37e2405e39849fb6d4ddf3d697e17ba169eda6d2"
|
|
627
647
|
},
|
|
628
648
|
{
|
|
629
649
|
"path": "runtime/core/hellolynk-neutral-host-process.mjs",
|
|
630
650
|
"bytes": 225161,
|
|
631
|
-
"sha256": "
|
|
651
|
+
"sha256": "7b237a1400c604da5decbb29ab3ce556fd1b744d0cfd7d28b5560b217da120b1"
|
|
632
652
|
},
|
|
633
653
|
{
|
|
634
654
|
"path": "runtime/core/hellolynk-neutral-host-store-adapters.mjs",
|
|
@@ -642,8 +662,8 @@
|
|
|
642
662
|
},
|
|
643
663
|
{
|
|
644
664
|
"path": "runtime/core/hellolynk-platform-credential-store.mjs",
|
|
645
|
-
"bytes":
|
|
646
|
-
"sha256": "
|
|
665
|
+
"bytes": 38559,
|
|
666
|
+
"sha256": "3969708bafefc3b267bb34a9dcc115804c874ad14f4a036426d727c02ff70d42"
|
|
647
667
|
},
|
|
648
668
|
{
|
|
649
669
|
"path": "runtime/core/hellolynk-relay-client-cli.mjs",
|
|
@@ -652,8 +672,8 @@
|
|
|
652
672
|
},
|
|
653
673
|
{
|
|
654
674
|
"path": "runtime/core/hellolynk-release-retention.mjs",
|
|
655
|
-
"bytes":
|
|
656
|
-
"sha256": "
|
|
675
|
+
"bytes": 25616,
|
|
676
|
+
"sha256": "0ee150af5a9bcc1f636e3ff980ee90ce7d073ab5ed4a991920cd3472bc65529c"
|
|
657
677
|
},
|
|
658
678
|
{
|
|
659
679
|
"path": "runtime/core/hellolynk-runtime-safety.cjs",
|
|
@@ -667,8 +687,8 @@
|
|
|
667
687
|
},
|
|
668
688
|
{
|
|
669
689
|
"path": "runtime/core/hellolynk-workbench-connection.mjs",
|
|
670
|
-
"bytes":
|
|
671
|
-
"sha256": "
|
|
690
|
+
"bytes": 14339,
|
|
691
|
+
"sha256": "6ce8e75025d31ed81c39150df2766231fc871ef18c234de986dc910bab79d639"
|
|
672
692
|
},
|
|
673
693
|
{
|
|
674
694
|
"path": "runtime/neutral-host-bootstrap.mjs",
|
|
@@ -682,18 +702,18 @@
|
|
|
682
702
|
},
|
|
683
703
|
{
|
|
684
704
|
"path": "runtime/neutral-host-release-loader.mjs",
|
|
685
|
-
"bytes":
|
|
686
|
-
"sha256": "
|
|
705
|
+
"bytes": 7593,
|
|
706
|
+
"sha256": "7cf7fae067fe3830853167394b18eecb945efc55ab8c26c80f14a61e6d33d27f"
|
|
687
707
|
},
|
|
688
708
|
{
|
|
689
709
|
"path": "runtime/neutral-host-release-manifest.json",
|
|
690
|
-
"bytes":
|
|
691
|
-
"sha256": "
|
|
710
|
+
"bytes": 11517,
|
|
711
|
+
"sha256": "938801bbdc7516676014bf044b7e5e992a446777bbc74016b31d6e7a6560b36d"
|
|
692
712
|
},
|
|
693
713
|
{
|
|
694
714
|
"path": "runtime/neutral-host-release-pin.json",
|
|
695
715
|
"bytes": 146,
|
|
696
|
-
"sha256": "
|
|
716
|
+
"sha256": "85d3f3c173ad0daec8ab8f5b980612ef8db08afa3bff48ec41d5f146e5a3aee5"
|
|
697
717
|
},
|
|
698
718
|
{
|
|
699
719
|
"path": "runtime/platform/windows/configure-agent.ps1",
|
|
@@ -702,8 +722,8 @@
|
|
|
702
722
|
},
|
|
703
723
|
{
|
|
704
724
|
"path": "runtime/platform/windows/credential-store.ps1",
|
|
705
|
-
"bytes":
|
|
706
|
-
"sha256": "
|
|
725
|
+
"bytes": 40188,
|
|
726
|
+
"sha256": "8f288c91a1f6ecaf2651baab9bdfc55014c11ea9e165f203ca7a69f4d47d7917"
|
|
707
727
|
},
|
|
708
728
|
{
|
|
709
729
|
"path": "runtime/platform/windows/hellolynk-host-protected-store.ps1",
|
|
@@ -862,8 +882,8 @@
|
|
|
862
882
|
},
|
|
863
883
|
{
|
|
864
884
|
"path": "tools/hellolynk-activate-neutral-host-clients.mjs",
|
|
865
|
-
"bytes":
|
|
866
|
-
"sha256": "
|
|
885
|
+
"bytes": 33852,
|
|
886
|
+
"sha256": "123eb4a08cf5a6df748972c64c5cf911697a669e68ecab7c409c1c4006c47277"
|
|
867
887
|
},
|
|
868
888
|
{
|
|
869
889
|
"path": "tools/hellolynk-install-client-skills.mjs",
|
|
@@ -872,13 +892,13 @@
|
|
|
872
892
|
},
|
|
873
893
|
{
|
|
874
894
|
"path": "workbuddy-package-manifest.json",
|
|
875
|
-
"bytes":
|
|
876
|
-
"sha256": "
|
|
895
|
+
"bytes": 22640,
|
|
896
|
+
"sha256": "4690314c830a333e5372fe4ca311f0dd80af4d2755dbbb5f13b788cdb528e560"
|
|
877
897
|
},
|
|
878
898
|
{
|
|
879
899
|
"path": "workbuddy-package-pin.json",
|
|
880
900
|
"bytes": 143,
|
|
881
|
-
"sha256": "
|
|
901
|
+
"sha256": "92ad353597ab160d206156c7455b775f1910878d2610e3cd6e5d31078687c8a3"
|
|
882
902
|
}
|
|
883
903
|
]
|
|
884
904
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hellolynk-ai/workbuddy-mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.100",
|
|
4
4
|
"description": "HelloLynk Messaging for WorkBuddy: open conversations and let your AI message other people's AI assistants.",
|
|
5
5
|
"homepage": "https://hellolynk.com",
|
|
6
6
|
"repository": {
|
|
@@ -5,6 +5,7 @@ import crypto from "node:crypto";
|
|
|
5
5
|
import fs from "node:fs/promises";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
|
|
8
|
+
import { verifyDarwinUnclaimedAuthorization } from "./core/hellolynk-darwin-host.mjs";
|
|
8
9
|
import { readClientProfile } from "./core/hellolynk-client-profile.mjs";
|
|
9
10
|
import { createNeutralHostInstallationStore } from "./core/hellolynk-neutral-host-installation-store.mjs";
|
|
10
11
|
import { clientAccountBaseRoot } from "./core/hellolynk-client-account.mjs";
|
|
@@ -164,7 +165,7 @@ assert.equal(releaseVerification.verifiedFileCount >= 8, true);
|
|
|
164
165
|
let transport = null;
|
|
165
166
|
let bootstrapTransportRequired = false;
|
|
166
167
|
let protectedStorePresent = true;
|
|
167
|
-
try { await fs.lstat(path.join(root, "capabilities-v1.dpapi.clixml")); }
|
|
168
|
+
try { await fs.lstat(path.join(root, process.platform === "darwin" ? "protected-v1.sqlite" : "capabilities-v1.dpapi.clixml")); }
|
|
168
169
|
catch (error) {
|
|
169
170
|
if (error?.code !== "ENOENT") throw error;
|
|
170
171
|
protectedStorePresent = false;
|
|
@@ -173,6 +174,9 @@ if (!protectedStorePresent) {
|
|
|
173
174
|
if (!(freshPreBind || recoveryPreBind)) await store.status();
|
|
174
175
|
await verifyHostProtectedStorePath({ root, path: root, directory: true });
|
|
175
176
|
bootstrapTransportRequired = true;
|
|
177
|
+
} else if (process.platform === "darwin" && freshPreBind) {
|
|
178
|
+
await verifyDarwinUnclaimedAuthorization(root);
|
|
179
|
+
bootstrapTransportRequired = true;
|
|
176
180
|
} else {
|
|
177
181
|
assert.equal((await store.status()).protected, true);
|
|
178
182
|
try { transport = preflightOnly ? await store.verifyTransport() : await store.resolveTransport(); }
|
|
@@ -68,7 +68,7 @@ export function withClientAccountLock(client, root, operation) {
|
|
|
68
68
|
|
|
69
69
|
export function createClientAccountActions(options) {
|
|
70
70
|
const client = options?.client;
|
|
71
|
-
const root = options?.storeRoot || defaultNeutralHostStoreRoot(
|
|
71
|
+
const root = options?.storeRoot || defaultNeutralHostStoreRoot(process.platform, options?.env || process.env);
|
|
72
72
|
statePath(client, clientAccountBaseRoot(root));
|
|
73
73
|
const readAccountState = () => {
|
|
74
74
|
const state = readClientAccount(client, root);
|