@spotpatch/shared 1.14.2 → 1.15.0
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/dist/{chunk-CLQ6MIJB.js → chunk-R3BQKCCY.js} +4 -3
- package/dist/chunk-R3BQKCCY.js.map +1 -0
- package/dist/{chunk-EWJTKNL4.js → chunk-RWFGFW4N.js} +3 -2
- package/dist/chunk-RWFGFW4N.js.map +1 -0
- package/dist/{contextual-ask-BpbkpFFf.d.cts → contextual-ask-BbmHG3Z8.d.cts} +12 -1
- package/dist/{contextual-ask-BpbkpFFf.d.ts → contextual-ask-BbmHG3Z8.d.ts} +12 -1
- package/dist/contextual-ask-browser.cjs +2 -1
- package/dist/contextual-ask-browser.cjs.map +1 -1
- package/dist/contextual-ask-browser.d.cts +1 -1
- package/dist/contextual-ask-browser.d.ts +1 -1
- package/dist/contextual-ask-browser.js +1 -1
- package/dist/contextual-ask-node.cjs +4 -2
- package/dist/contextual-ask-node.cjs.map +1 -1
- package/dist/contextual-ask-node.d.cts +2 -2
- package/dist/contextual-ask-node.d.ts +2 -2
- package/dist/contextual-ask-node.js +2 -2
- package/dist/data-flow-runtime.d.cts +1 -1
- package/dist/data-flow-runtime.d.ts +1 -1
- package/dist/external-agent-node.cjs +2 -1
- package/dist/external-agent-node.cjs.map +1 -1
- package/dist/external-agent-node.d.cts +35 -35
- package/dist/external-agent-node.d.ts +35 -35
- package/dist/external-agent-node.js +2 -1
- package/dist/external-agent-node.js.map +1 -1
- package/dist/external-handoff-browser.d.cts +2 -2
- package/dist/external-handoff-browser.d.ts +2 -2
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -29
- package/dist/index.d.ts +29 -29
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-CLQ6MIJB.js.map +0 -1
- package/dist/chunk-EWJTKNL4.js.map +0 -1
- package/dist/{data-flow-runtime-w43iwvGA.d.cts → data-flow-runtime-Bfm5LbHE.d.cts} +8 -8
- package/dist/{data-flow-runtime-DhWpQoik.d.ts → data-flow-runtime-tyqGH1OS.d.ts} +8 -8
- package/dist/{external-agent-control-DKxQACUv.d.ts → external-agent-control-yC4ToQXg.d.cts} +28 -28
- package/dist/{external-agent-control-DKxQACUv.d.cts → external-agent-control-yC4ToQXg.d.ts} +28 -28
- package/dist/{external-handoff-5zHu-fz2.d.ts → external-handoff-BpoxbpPk.d.ts} +37 -37
- package/dist/{external-handoff-DeiIvR-2.d.cts → external-handoff-D1Ua2jIA.d.cts} +37 -37
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Stats } from 'node:fs';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { E as EXTERNAL_HANDOFF_LIMITS, A as ActiveAdapterSummary, D as DispatchSummary, a as ExternalHandoffSnapshot } from './external-handoff-
|
|
3
|
+
import { E as EXTERNAL_HANDOFF_LIMITS, A as ActiveAdapterSummary, D as DispatchSummary, a as ExternalHandoffSnapshot } from './external-handoff-BpoxbpPk.js';
|
|
4
4
|
import './annotation-Cz-NNgR4.js';
|
|
5
5
|
|
|
6
6
|
declare const SPOTPATCH_BRIDGE_TOKEN_HEADER: "X-SpotPatch-Bridge-Token";
|
|
@@ -21,9 +21,9 @@ declare const externalHandoffDescriptorSchema: z.ZodObject<{
|
|
|
21
21
|
projectKey: z.ZodString;
|
|
22
22
|
sessionId: z.ZodString;
|
|
23
23
|
framework: z.ZodEnum<{
|
|
24
|
-
astro: "astro";
|
|
25
24
|
vite: "vite";
|
|
26
25
|
next: "next";
|
|
26
|
+
astro: "astro";
|
|
27
27
|
}>;
|
|
28
28
|
endpoint: z.ZodURL;
|
|
29
29
|
bridgeToken: z.ZodString;
|
|
@@ -56,11 +56,11 @@ declare const bridgeActiveReportRequestSchema: z.ZodObject<{
|
|
|
56
56
|
leaseToken: z.ZodString;
|
|
57
57
|
cursor: z.ZodString;
|
|
58
58
|
phase: z.ZodEnum<{
|
|
59
|
-
failed: "failed";
|
|
60
|
-
dispatched: "dispatched";
|
|
61
|
-
completed: "completed";
|
|
62
59
|
dispatching: "dispatching";
|
|
60
|
+
dispatched: "dispatched";
|
|
63
61
|
working: "working";
|
|
62
|
+
completed: "completed";
|
|
63
|
+
failed: "failed";
|
|
64
64
|
"delivery-unknown": "delivery-unknown";
|
|
65
65
|
}>;
|
|
66
66
|
}, z.core.$strict>;
|
|
@@ -72,16 +72,16 @@ declare const bridgeStatusSchema: z.ZodObject<{
|
|
|
72
72
|
projectKey: z.ZodString;
|
|
73
73
|
sessionId: z.ZodString;
|
|
74
74
|
framework: z.ZodEnum<{
|
|
75
|
-
astro: "astro";
|
|
76
75
|
vite: "vite";
|
|
77
76
|
next: "next";
|
|
77
|
+
astro: "astro";
|
|
78
78
|
}>;
|
|
79
79
|
current: z.ZodNullable<z.ZodObject<{
|
|
80
80
|
sessionId: z.ZodString;
|
|
81
81
|
framework: z.ZodEnum<{
|
|
82
|
-
astro: "astro";
|
|
83
82
|
vite: "vite";
|
|
84
83
|
next: "next";
|
|
84
|
+
astro: "astro";
|
|
85
85
|
}>;
|
|
86
86
|
revision: z.ZodNumber;
|
|
87
87
|
cursor: z.ZodString;
|
|
@@ -93,8 +93,8 @@ declare const bridgeStatusSchema: z.ZodObject<{
|
|
|
93
93
|
publishedAt: z.ZodISODateTime;
|
|
94
94
|
expiresAt: z.ZodISODateTime;
|
|
95
95
|
state: z.ZodEnum<{
|
|
96
|
-
expired: "expired";
|
|
97
96
|
available: "available";
|
|
97
|
+
expired: "expired";
|
|
98
98
|
superseded: "superseded";
|
|
99
99
|
}>;
|
|
100
100
|
pickupCount: z.ZodNumber;
|
|
@@ -109,9 +109,9 @@ declare const bridgeCurrentResultSchema: z.ZodObject<{
|
|
|
109
109
|
session: z.ZodObject<{
|
|
110
110
|
id: z.ZodString;
|
|
111
111
|
framework: z.ZodEnum<{
|
|
112
|
-
astro: "astro";
|
|
113
112
|
vite: "vite";
|
|
114
113
|
next: "next";
|
|
114
|
+
astro: "astro";
|
|
115
115
|
}>;
|
|
116
116
|
}, z.core.$strict>;
|
|
117
117
|
revision: z.ZodNumber;
|
|
@@ -216,9 +216,9 @@ declare const bridgeCurrentResultSchema: z.ZodObject<{
|
|
|
216
216
|
code: z.ZodOptional<z.ZodObject<{
|
|
217
217
|
relativePath: z.ZodString;
|
|
218
218
|
language: z.ZodEnum<{
|
|
219
|
+
astro: "astro";
|
|
219
220
|
tsx: "tsx";
|
|
220
221
|
jsx: "jsx";
|
|
221
|
-
astro: "astro";
|
|
222
222
|
}>;
|
|
223
223
|
startLine: z.ZodNumber;
|
|
224
224
|
endLine: z.ZodNumber;
|
|
@@ -242,9 +242,9 @@ declare const bridgeWaitResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
242
242
|
session: z.ZodObject<{
|
|
243
243
|
id: z.ZodString;
|
|
244
244
|
framework: z.ZodEnum<{
|
|
245
|
-
astro: "astro";
|
|
246
245
|
vite: "vite";
|
|
247
246
|
next: "next";
|
|
247
|
+
astro: "astro";
|
|
248
248
|
}>;
|
|
249
249
|
}, z.core.$strict>;
|
|
250
250
|
revision: z.ZodNumber;
|
|
@@ -349,9 +349,9 @@ declare const bridgeWaitResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
349
349
|
code: z.ZodOptional<z.ZodObject<{
|
|
350
350
|
relativePath: z.ZodString;
|
|
351
351
|
language: z.ZodEnum<{
|
|
352
|
+
astro: "astro";
|
|
352
353
|
tsx: "tsx";
|
|
353
354
|
jsx: "jsx";
|
|
354
|
-
astro: "astro";
|
|
355
355
|
}>;
|
|
356
356
|
startLine: z.ZodNumber;
|
|
357
357
|
endLine: z.ZodNumber;
|
|
@@ -373,9 +373,9 @@ declare const bridgeAckResultSchema: z.ZodObject<{
|
|
|
373
373
|
summary: z.ZodObject<{
|
|
374
374
|
sessionId: z.ZodString;
|
|
375
375
|
framework: z.ZodEnum<{
|
|
376
|
-
astro: "astro";
|
|
377
376
|
vite: "vite";
|
|
378
377
|
next: "next";
|
|
378
|
+
astro: "astro";
|
|
379
379
|
}>;
|
|
380
380
|
revision: z.ZodNumber;
|
|
381
381
|
cursor: z.ZodString;
|
|
@@ -387,8 +387,8 @@ declare const bridgeAckResultSchema: z.ZodObject<{
|
|
|
387
387
|
publishedAt: z.ZodISODateTime;
|
|
388
388
|
expiresAt: z.ZodISODateTime;
|
|
389
389
|
state: z.ZodEnum<{
|
|
390
|
-
expired: "expired";
|
|
391
390
|
available: "available";
|
|
391
|
+
expired: "expired";
|
|
392
392
|
superseded: "superseded";
|
|
393
393
|
}>;
|
|
394
394
|
pickupCount: z.ZodNumber;
|
|
@@ -406,8 +406,8 @@ declare const bridgeActiveClaimResultSchema: z.ZodObject<{
|
|
|
406
406
|
}>;
|
|
407
407
|
state: z.ZodEnum<{
|
|
408
408
|
ready: "ready";
|
|
409
|
-
blocked: "blocked";
|
|
410
409
|
busy: "busy";
|
|
410
|
+
blocked: "blocked";
|
|
411
411
|
}>;
|
|
412
412
|
canDispatch: z.ZodBoolean;
|
|
413
413
|
connectedAt: z.ZodISODateTime;
|
|
@@ -422,8 +422,8 @@ declare const bridgeActiveStateResultSchema: z.ZodObject<{
|
|
|
422
422
|
}>;
|
|
423
423
|
state: z.ZodEnum<{
|
|
424
424
|
ready: "ready";
|
|
425
|
-
blocked: "blocked";
|
|
426
425
|
busy: "busy";
|
|
426
|
+
blocked: "blocked";
|
|
427
427
|
}>;
|
|
428
428
|
canDispatch: z.ZodBoolean;
|
|
429
429
|
connectedAt: z.ZodISODateTime;
|
|
@@ -436,13 +436,13 @@ declare const bridgeActiveStateResultSchema: z.ZodObject<{
|
|
|
436
436
|
}>;
|
|
437
437
|
revision: z.ZodNumber;
|
|
438
438
|
phase: z.ZodEnum<{
|
|
439
|
-
queued: "queued";
|
|
440
|
-
failed: "failed";
|
|
441
|
-
dispatched: "dispatched";
|
|
442
|
-
completed: "completed";
|
|
443
439
|
dispatching: "dispatching";
|
|
440
|
+
dispatched: "dispatched";
|
|
444
441
|
working: "working";
|
|
442
|
+
completed: "completed";
|
|
443
|
+
failed: "failed";
|
|
445
444
|
"delivery-unknown": "delivery-unknown";
|
|
445
|
+
queued: "queued";
|
|
446
446
|
}>;
|
|
447
447
|
updatedAt: z.ZodISODateTime;
|
|
448
448
|
}, z.core.$strict>>;
|
|
@@ -455,8 +455,8 @@ declare const bridgeActiveHeartbeatResultSchema: z.ZodObject<{
|
|
|
455
455
|
}>;
|
|
456
456
|
state: z.ZodEnum<{
|
|
457
457
|
ready: "ready";
|
|
458
|
-
blocked: "blocked";
|
|
459
458
|
busy: "busy";
|
|
459
|
+
blocked: "blocked";
|
|
460
460
|
}>;
|
|
461
461
|
canDispatch: z.ZodBoolean;
|
|
462
462
|
connectedAt: z.ZodISODateTime;
|
|
@@ -469,13 +469,13 @@ declare const bridgeActiveHeartbeatResultSchema: z.ZodObject<{
|
|
|
469
469
|
}>;
|
|
470
470
|
revision: z.ZodNumber;
|
|
471
471
|
phase: z.ZodEnum<{
|
|
472
|
-
queued: "queued";
|
|
473
|
-
failed: "failed";
|
|
474
|
-
dispatched: "dispatched";
|
|
475
|
-
completed: "completed";
|
|
476
472
|
dispatching: "dispatching";
|
|
473
|
+
dispatched: "dispatched";
|
|
477
474
|
working: "working";
|
|
475
|
+
completed: "completed";
|
|
476
|
+
failed: "failed";
|
|
478
477
|
"delivery-unknown": "delivery-unknown";
|
|
478
|
+
queued: "queued";
|
|
479
479
|
}>;
|
|
480
480
|
updatedAt: z.ZodISODateTime;
|
|
481
481
|
}, z.core.$strict>>;
|
|
@@ -488,8 +488,8 @@ declare const bridgeActiveReportResultSchema: z.ZodObject<{
|
|
|
488
488
|
}>;
|
|
489
489
|
state: z.ZodEnum<{
|
|
490
490
|
ready: "ready";
|
|
491
|
-
blocked: "blocked";
|
|
492
491
|
busy: "busy";
|
|
492
|
+
blocked: "blocked";
|
|
493
493
|
}>;
|
|
494
494
|
canDispatch: z.ZodBoolean;
|
|
495
495
|
connectedAt: z.ZodISODateTime;
|
|
@@ -502,13 +502,13 @@ declare const bridgeActiveReportResultSchema: z.ZodObject<{
|
|
|
502
502
|
}>;
|
|
503
503
|
revision: z.ZodNumber;
|
|
504
504
|
phase: z.ZodEnum<{
|
|
505
|
-
queued: "queued";
|
|
506
|
-
failed: "failed";
|
|
507
|
-
dispatched: "dispatched";
|
|
508
|
-
completed: "completed";
|
|
509
505
|
dispatching: "dispatching";
|
|
506
|
+
dispatched: "dispatched";
|
|
510
507
|
working: "working";
|
|
508
|
+
completed: "completed";
|
|
509
|
+
failed: "failed";
|
|
511
510
|
"delivery-unknown": "delivery-unknown";
|
|
511
|
+
queued: "queued";
|
|
512
512
|
}>;
|
|
513
513
|
updatedAt: z.ZodISODateTime;
|
|
514
514
|
}, z.core.$strict>>;
|
|
@@ -521,8 +521,8 @@ declare const bridgeActiveReleaseResultSchema: z.ZodObject<{
|
|
|
521
521
|
}>;
|
|
522
522
|
state: z.ZodEnum<{
|
|
523
523
|
ready: "ready";
|
|
524
|
-
blocked: "blocked";
|
|
525
524
|
busy: "busy";
|
|
525
|
+
blocked: "blocked";
|
|
526
526
|
}>;
|
|
527
527
|
canDispatch: z.ZodBoolean;
|
|
528
528
|
connectedAt: z.ZodISODateTime;
|
|
@@ -535,13 +535,13 @@ declare const bridgeActiveReleaseResultSchema: z.ZodObject<{
|
|
|
535
535
|
}>;
|
|
536
536
|
revision: z.ZodNumber;
|
|
537
537
|
phase: z.ZodEnum<{
|
|
538
|
-
queued: "queued";
|
|
539
|
-
failed: "failed";
|
|
540
|
-
dispatched: "dispatched";
|
|
541
|
-
completed: "completed";
|
|
542
538
|
dispatching: "dispatching";
|
|
539
|
+
dispatched: "dispatched";
|
|
543
540
|
working: "working";
|
|
541
|
+
completed: "completed";
|
|
542
|
+
failed: "failed";
|
|
544
543
|
"delivery-unknown": "delivery-unknown";
|
|
544
|
+
queued: "queued";
|
|
545
545
|
}>;
|
|
546
546
|
updatedAt: z.ZodISODateTime;
|
|
547
547
|
}, z.core.$strict>>;
|
|
@@ -37,6 +37,7 @@ var SPOTPATCH_BRIDGE_PATHS = Object.freeze({
|
|
|
37
37
|
});
|
|
38
38
|
var EXTERNAL_HANDOFF_PROJECT_KEY_SALT = "spotpatch-external-agent-project-v1";
|
|
39
39
|
var execFileAsync = promisify(execFile);
|
|
40
|
+
var WINDOWS_ACL_COMMAND_TIMEOUT_MS = 3e4;
|
|
40
41
|
var WINDOWS_ACL_VERIFY_ATTEMPTS = 3;
|
|
41
42
|
var WINDOWS_ACL_RETRY_DELAY_MS = 25;
|
|
42
43
|
var WINDOWS_ACL_SCRIPT = String.raw`
|
|
@@ -212,7 +213,7 @@ async function verifyWindowsAcl(candidate, kind, initialize) {
|
|
|
212
213
|
SPOTPATCH_ACL_OPERATION: initialize ? "initialize" : "verify",
|
|
213
214
|
SPOTPATCH_ACL_TARGET: candidate
|
|
214
215
|
},
|
|
215
|
-
timeout:
|
|
216
|
+
timeout: WINDOWS_ACL_COMMAND_TIMEOUT_MS,
|
|
216
217
|
windowsHide: true
|
|
217
218
|
}
|
|
218
219
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/external-agent-node.ts"],"sourcesContent":["/// <reference types=\"node\" />\n\nimport { createHash } from \"node:crypto\";\nimport { execFile } from \"node:child_process\";\nimport type { Stats } from \"node:fs\";\nimport { lstat, mkdir, realpath } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\n\nimport { z } from \"zod\";\n\nimport {\n EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS,\n EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION,\n EXTERNAL_HANDOFF_FRAMEWORKS,\n EXTERNAL_HANDOFF_LIMITS,\n activeAdapterSummarySchema,\n dispatchSummarySchema,\n externalHandoffReportableDispatchPhaseSchema,\n externalHandoffSnapshotSchema,\n externalHandoffSummarySchema,\n type ActiveAdapterSummary,\n type DispatchSummary,\n type ExternalHandoffSnapshot,\n} from \"./protocol/external-handoff.js\";\nimport { ERROR_CODES } from \"./errors/error-code.js\";\nimport { SpotPatchError } from \"./errors/spotpatch-error.js\";\n\nexport const SPOTPATCH_BRIDGE_TOKEN_HEADER = \"X-SpotPatch-Bridge-Token\" as const;\nexport const SPOTPATCH_BRIDGE_PATHS = Object.freeze({\n status: \"/bridge/v1/status\",\n current: \"/bridge/v1/handoff/current\",\n wait: \"/bridge/v1/handoff/wait\",\n ack: \"/bridge/v1/handoff/ack\",\n activeClaim: \"/bridge/v1/active/claim\",\n activeHeartbeat: \"/bridge/v1/active/heartbeat\",\n activeReport: \"/bridge/v1/active/report\",\n activeRelease: \"/bridge/v1/active/release\",\n});\nexport const EXTERNAL_HANDOFF_PROJECT_KEY_SALT =\n \"spotpatch-external-agent-project-v1\" as const;\n\nconst execFileAsync = promisify(execFile);\nconst WINDOWS_ACL_VERIFY_ATTEMPTS = 3;\nconst WINDOWS_ACL_RETRY_DELAY_MS = 25;\nconst WINDOWS_ACL_SCRIPT = String.raw`\n$ErrorActionPreference = 'Stop'\n$target = $env:SPOTPATCH_ACL_TARGET\n$kind = $env:SPOTPATCH_ACL_KIND\n$operation = $env:SPOTPATCH_ACL_OPERATION\n$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent().User\n$allowed = @($identity.Value, 'S-1-5-18', 'S-1-5-32-544')\nif ($kind -eq 'directory') {\n $item = [System.IO.DirectoryInfo]::new($target)\n if ($operation -eq 'initialize') {\n $security = [System.Security.AccessControl.DirectorySecurity]::new()\n $security.SetOwner($identity)\n foreach ($sidValue in $allowed) {\n $sid = [System.Security.Principal.SecurityIdentifier]::new($sidValue)\n $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(\n $sid,\n [System.Security.AccessControl.FileSystemRights]::FullControl,\n [System.Security.AccessControl.InheritanceFlags]'ContainerInherit, ObjectInherit',\n [System.Security.AccessControl.PropagationFlags]::None,\n [System.Security.AccessControl.AccessControlType]::Allow\n )\n [void]$security.AddAccessRule($rule)\n }\n $security.SetAccessRuleProtection($true, $false)\n $item.SetAccessControl($security)\n }\n $acl = $item.GetAccessControl(\n [System.Security.AccessControl.AccessControlSections]'Access, Owner'\n )\n} elseif ($kind -eq 'file') {\n $item = [System.IO.FileInfo]::new($target)\n if ($operation -eq 'initialize') {\n $security = [System.Security.AccessControl.FileSecurity]::new()\n $security.SetOwner($identity)\n foreach ($sidValue in $allowed) {\n $sid = [System.Security.Principal.SecurityIdentifier]::new($sidValue)\n $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(\n $sid,\n [System.Security.AccessControl.FileSystemRights]::FullControl,\n [System.Security.AccessControl.AccessControlType]::Allow\n )\n [void]$security.AddAccessRule($rule)\n }\n $security.SetAccessRuleProtection($true, $false)\n $item.SetAccessControl($security)\n }\n $acl = $item.GetAccessControl(\n [System.Security.AccessControl.AccessControlSections]'Access, Owner'\n )\n} else {\n exit 10\n}\nif ($acl.GetOwner([System.Security.Principal.SecurityIdentifier]).Value -ne $identity.Value) {\n exit 11\n}\nforeach ($rule in $acl.GetAccessRules(\n $true,\n $true,\n [System.Security.Principal.SecurityIdentifier]\n)) {\n if (\n $rule.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and\n $allowed -notcontains $rule.IdentityReference.Value\n ) {\n exit 12\n }\n}\n`;\n\nconst opaqueIdSchema = z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u);\nconst projectKeySchema = z\n .string()\n .length(64)\n .regex(/^[a-f0-9]+$/u);\nconst loopbackEndpointSchema = z.url().refine((value) => {\n const match = /^http:\\/\\/127\\.0\\.0\\.1:([1-9][0-9]{0,4})$/u.exec(value);\n\n if (match?.[1] === undefined) {\n return false;\n }\n\n const port = Number(match[1]);\n return Number.isSafeInteger(port) && port <= 65_535;\n});\n\nexport const externalHandoffDescriptorSchema = z.strictObject({\n schemaVersion: z.literal(1),\n brokerProtocolVersion: z.literal(EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION),\n projectKey: projectKeySchema,\n sessionId: opaqueIdSchema,\n framework: z.enum(EXTERNAL_HANDOFF_FRAMEWORKS),\n endpoint: loopbackEndpointSchema,\n bridgeToken: z\n .string()\n .min(43)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n pid: z.number().int().positive(),\n createdAt: z.iso.datetime(),\n});\n\nexport const bridgeStatusRequestSchema = z.strictObject({});\nexport const bridgeCurrentRequestSchema = z.strictObject({\n cursor: opaqueIdSchema.optional(),\n});\nexport const bridgeWaitRequestSchema = z.strictObject({\n afterCursor: opaqueIdSchema.optional(),\n timeoutMs: z\n .number()\n .int()\n .positive()\n .max(EXTERNAL_HANDOFF_LIMITS.maximumWaitMs)\n .default(EXTERNAL_HANDOFF_LIMITS.defaultWaitMs),\n});\nexport const bridgeAckRequestSchema = z.strictObject({\n cursor: opaqueIdSchema,\n connectorInstanceId: opaqueIdSchema,\n});\nexport const bridgeActiveClaimRequestSchema = z.strictObject({\n adapterKind: z.enum(EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS),\n connectorInstanceId: opaqueIdSchema,\n});\nexport const bridgeActiveHeartbeatRequestSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n});\nexport const bridgeActiveReportRequestSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n cursor: opaqueIdSchema,\n phase: externalHandoffReportableDispatchPhaseSchema,\n});\nexport const bridgeActiveReleaseRequestSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n});\nexport const bridgeStatusSchema = z.strictObject({\n brokerProtocolVersion: z.literal(EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION),\n projectKey: projectKeySchema,\n sessionId: opaqueIdSchema,\n framework: z.enum(EXTERNAL_HANDOFF_FRAMEWORKS),\n current: externalHandoffSummarySchema.nullable(),\n});\nexport const bridgeCurrentResultSchema = z.strictObject({\n outcome: z.literal(\"handoff\"),\n snapshot: externalHandoffSnapshotSchema,\n});\nexport const bridgeWaitResultSchema = z.discriminatedUnion(\"outcome\", [\n bridgeCurrentResultSchema,\n z.strictObject({ outcome: z.literal(\"timeout\") }),\n]);\nexport const bridgeAckResultSchema = z.strictObject({\n summary: externalHandoffSummarySchema,\n});\nexport const bridgeActiveClaimResultSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n heartbeatIntervalMs: z.literal(EXTERNAL_HANDOFF_LIMITS.activeHeartbeatIntervalMs),\n baselineCursor: opaqueIdSchema.nullable(),\n activeAdapter: activeAdapterSummarySchema,\n});\nexport const bridgeActiveStateResultSchema = z.strictObject({\n activeAdapter: activeAdapterSummarySchema.nullable(),\n dispatch: dispatchSummarySchema.nullable(),\n});\nexport const bridgeActiveHeartbeatResultSchema = bridgeActiveStateResultSchema;\nexport const bridgeActiveReportResultSchema = bridgeActiveStateResultSchema;\nexport const bridgeActiveReleaseResultSchema = bridgeActiveStateResultSchema;\n\nexport type ExternalHandoffDescriptor = z.infer<typeof externalHandoffDescriptorSchema>;\nexport type BridgeStatus = z.infer<typeof bridgeStatusSchema>;\nexport type BridgeWaitResult =\n | Readonly<{ outcome: \"handoff\"; snapshot: ExternalHandoffSnapshot }>\n | Readonly<{ outcome: \"timeout\" }>;\nexport interface BridgeActiveClaimResult {\n readonly leaseToken: string;\n readonly heartbeatIntervalMs: typeof EXTERNAL_HANDOFF_LIMITS.activeHeartbeatIntervalMs;\n readonly baselineCursor: string | null;\n readonly activeAdapter: ActiveAdapterSummary;\n}\nexport interface BridgeActiveStateResult {\n readonly activeAdapter: ActiveAdapterSummary | null;\n readonly dispatch: DispatchSummary | null;\n}\n\nfunction windowsPowerShellExecutable(): string {\n const systemRoot = process.env.SystemRoot ?? process.env.SYSTEMROOT;\n if (systemRoot === undefined || !path.win32.isAbsolute(systemRoot)) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n return path.win32.join(\n systemRoot,\n \"System32\",\n \"WindowsPowerShell\",\n \"v1.0\",\n \"powershell.exe\",\n );\n}\n\nasync function verifyWindowsAcl(\n candidate: string,\n kind: \"directory\" | \"file\",\n initialize: boolean,\n): Promise<void> {\n try {\n await execFileAsync(\n windowsPowerShellExecutable(),\n [\"-NoLogo\", \"-NoProfile\", \"-NonInteractive\", \"-Command\", WINDOWS_ACL_SCRIPT],\n {\n encoding: \"utf8\",\n env: {\n ...process.env,\n SPOTPATCH_ACL_KIND: kind,\n SPOTPATCH_ACL_OPERATION: initialize ? \"initialize\" : \"verify\",\n SPOTPATCH_ACL_TARGET: candidate,\n },\n timeout: 10_000,\n windowsHide: true,\n },\n );\n } catch (error: unknown) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED, undefined, {\n cause: error,\n });\n }\n}\n\nexport async function assertPrivateExternalHandoffPath(\n candidate: string,\n kind: \"directory\" | \"file\",\n): Promise<Stats> {\n const status = await lstat(candidate);\n const correctKind = kind === \"directory\" ? status.isDirectory() : status.isFile();\n\n if (!correctKind || status.isSymbolicLink()) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n if (process.platform === \"win32\") {\n for (let attempt = 0; attempt < WINDOWS_ACL_VERIFY_ATTEMPTS; attempt += 1) {\n try {\n await verifyWindowsAcl(candidate, kind, false);\n return status;\n } catch (error: unknown) {\n if (attempt === WINDOWS_ACL_VERIFY_ATTEMPTS - 1) throw error;\n let current: Stats;\n try {\n current = await lstat(candidate);\n } catch {\n throw error;\n }\n const sameKind =\n kind === \"directory\" ? current.isDirectory() : current.isFile();\n if (\n !sameKind ||\n current.isSymbolicLink() ||\n current.dev !== status.dev ||\n current.ino !== status.ino\n ) {\n throw error;\n }\n await new Promise<void>((resolve) => {\n setTimeout(resolve, WINDOWS_ACL_RETRY_DELAY_MS * (attempt + 1));\n });\n }\n }\n return status;\n }\n\n const uid = process.getuid?.();\n if (uid === undefined || status.uid !== uid || (status.mode & 0o077) !== 0) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n return status;\n}\n\nexport async function initializePrivateExternalHandoffFile(\n candidate: string,\n): Promise<void> {\n if (process.platform === \"win32\") {\n await verifyWindowsAcl(candidate, \"file\", true);\n }\n}\n\nasync function initializeWindowsDirectory(directory: string): Promise<void> {\n if (process.platform === \"win32\") {\n await verifyWindowsAcl(directory, \"directory\", true);\n }\n}\n\nasync function ensurePrivateSubdirectory(\n base: string,\n create: boolean,\n): Promise<string> {\n const directory = path.join(base, \"spotpatch\");\n let created = false;\n\n if (create) {\n try {\n await mkdir(directory, { mode: 0o700 });\n created = true;\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n }\n }\n\n if (created) await initializeWindowsDirectory(directory);\n await assertPrivateExternalHandoffPath(directory, \"directory\");\n return realpath(directory);\n}\n\nasync function resolveWindowsRuntimeDirectory(create: boolean): Promise<string> {\n const configuredBase = process.env.LOCALAPPDATA;\n\n if (configuredBase !== undefined && !path.isAbsolute(configuredBase)) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n const base = configuredBase ?? path.join(os.homedir(), \"AppData\", \"Local\");\n const directory = path.join(base, \"SpotPatch\", \"external-agent-runtime-v1\");\n let created = false;\n\n if (create) {\n created = (await mkdir(directory, { mode: 0o700, recursive: true })) !== undefined;\n }\n\n if (created) await initializeWindowsDirectory(directory);\n await assertPrivateExternalHandoffPath(directory, \"directory\");\n return realpath(directory);\n}\n\nexport async function resolveExternalHandoffRuntimeDirectory(\n create: boolean,\n): Promise<string> {\n const xdgRuntimeDirectory = process.env.XDG_RUNTIME_DIR;\n\n if (xdgRuntimeDirectory !== undefined && !path.isAbsolute(xdgRuntimeDirectory)) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n if (xdgRuntimeDirectory !== undefined) {\n try {\n if (process.platform !== \"win32\") {\n await assertPrivateExternalHandoffPath(xdgRuntimeDirectory, \"directory\");\n }\n return await ensurePrivateSubdirectory(xdgRuntimeDirectory, create);\n } catch (error: unknown) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new SpotPatchError(ERROR_CODES.SESSION_NOT_FOUND);\n }\n\n throw error;\n }\n }\n\n if (process.platform === \"win32\") {\n try {\n return await resolveWindowsRuntimeDirectory(create);\n } catch (error: unknown) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new SpotPatchError(ERROR_CODES.SESSION_NOT_FOUND);\n }\n\n throw error;\n }\n }\n\n const uid = process.getuid?.();\n if (uid === undefined) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n const fallback = path.join(os.tmpdir(), `spotpatch-${String(uid)}`);\n\n if (create) {\n try {\n await mkdir(fallback, { mode: 0o700 });\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n }\n }\n\n try {\n await assertPrivateExternalHandoffPath(fallback, \"directory\");\n } catch (error: unknown) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new SpotPatchError(ERROR_CODES.SESSION_NOT_FOUND);\n }\n\n throw error;\n }\n\n return realpath(fallback);\n}\n\nexport async function computeExternalHandoffProjectKey(root: string): Promise<string> {\n const canonicalRoot = await realpath(root);\n return createHash(\"sha256\")\n .update(`${EXTERNAL_HANDOFF_PROJECT_KEY_SALT}\\0${canonicalRoot}`)\n .digest(\"hex\");\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/external-agent-node.ts"],"sourcesContent":["/// <reference types=\"node\" />\n\nimport { createHash } from \"node:crypto\";\nimport { execFile } from \"node:child_process\";\nimport type { Stats } from \"node:fs\";\nimport { lstat, mkdir, realpath } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\n\nimport { z } from \"zod\";\n\nimport {\n EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS,\n EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION,\n EXTERNAL_HANDOFF_FRAMEWORKS,\n EXTERNAL_HANDOFF_LIMITS,\n activeAdapterSummarySchema,\n dispatchSummarySchema,\n externalHandoffReportableDispatchPhaseSchema,\n externalHandoffSnapshotSchema,\n externalHandoffSummarySchema,\n type ActiveAdapterSummary,\n type DispatchSummary,\n type ExternalHandoffSnapshot,\n} from \"./protocol/external-handoff.js\";\nimport { ERROR_CODES } from \"./errors/error-code.js\";\nimport { SpotPatchError } from \"./errors/spotpatch-error.js\";\n\nexport const SPOTPATCH_BRIDGE_TOKEN_HEADER = \"X-SpotPatch-Bridge-Token\" as const;\nexport const SPOTPATCH_BRIDGE_PATHS = Object.freeze({\n status: \"/bridge/v1/status\",\n current: \"/bridge/v1/handoff/current\",\n wait: \"/bridge/v1/handoff/wait\",\n ack: \"/bridge/v1/handoff/ack\",\n activeClaim: \"/bridge/v1/active/claim\",\n activeHeartbeat: \"/bridge/v1/active/heartbeat\",\n activeReport: \"/bridge/v1/active/report\",\n activeRelease: \"/bridge/v1/active/release\",\n});\nexport const EXTERNAL_HANDOFF_PROJECT_KEY_SALT =\n \"spotpatch-external-agent-project-v1\" as const;\n\nconst execFileAsync = promisify(execFile);\nconst WINDOWS_ACL_COMMAND_TIMEOUT_MS = 30_000;\nconst WINDOWS_ACL_VERIFY_ATTEMPTS = 3;\nconst WINDOWS_ACL_RETRY_DELAY_MS = 25;\nconst WINDOWS_ACL_SCRIPT = String.raw`\n$ErrorActionPreference = 'Stop'\n$target = $env:SPOTPATCH_ACL_TARGET\n$kind = $env:SPOTPATCH_ACL_KIND\n$operation = $env:SPOTPATCH_ACL_OPERATION\n$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent().User\n$allowed = @($identity.Value, 'S-1-5-18', 'S-1-5-32-544')\nif ($kind -eq 'directory') {\n $item = [System.IO.DirectoryInfo]::new($target)\n if ($operation -eq 'initialize') {\n $security = [System.Security.AccessControl.DirectorySecurity]::new()\n $security.SetOwner($identity)\n foreach ($sidValue in $allowed) {\n $sid = [System.Security.Principal.SecurityIdentifier]::new($sidValue)\n $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(\n $sid,\n [System.Security.AccessControl.FileSystemRights]::FullControl,\n [System.Security.AccessControl.InheritanceFlags]'ContainerInherit, ObjectInherit',\n [System.Security.AccessControl.PropagationFlags]::None,\n [System.Security.AccessControl.AccessControlType]::Allow\n )\n [void]$security.AddAccessRule($rule)\n }\n $security.SetAccessRuleProtection($true, $false)\n $item.SetAccessControl($security)\n }\n $acl = $item.GetAccessControl(\n [System.Security.AccessControl.AccessControlSections]'Access, Owner'\n )\n} elseif ($kind -eq 'file') {\n $item = [System.IO.FileInfo]::new($target)\n if ($operation -eq 'initialize') {\n $security = [System.Security.AccessControl.FileSecurity]::new()\n $security.SetOwner($identity)\n foreach ($sidValue in $allowed) {\n $sid = [System.Security.Principal.SecurityIdentifier]::new($sidValue)\n $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(\n $sid,\n [System.Security.AccessControl.FileSystemRights]::FullControl,\n [System.Security.AccessControl.AccessControlType]::Allow\n )\n [void]$security.AddAccessRule($rule)\n }\n $security.SetAccessRuleProtection($true, $false)\n $item.SetAccessControl($security)\n }\n $acl = $item.GetAccessControl(\n [System.Security.AccessControl.AccessControlSections]'Access, Owner'\n )\n} else {\n exit 10\n}\nif ($acl.GetOwner([System.Security.Principal.SecurityIdentifier]).Value -ne $identity.Value) {\n exit 11\n}\nforeach ($rule in $acl.GetAccessRules(\n $true,\n $true,\n [System.Security.Principal.SecurityIdentifier]\n)) {\n if (\n $rule.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow -and\n $allowed -notcontains $rule.IdentityReference.Value\n ) {\n exit 12\n }\n}\n`;\n\nconst opaqueIdSchema = z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u);\nconst projectKeySchema = z\n .string()\n .length(64)\n .regex(/^[a-f0-9]+$/u);\nconst loopbackEndpointSchema = z.url().refine((value) => {\n const match = /^http:\\/\\/127\\.0\\.0\\.1:([1-9][0-9]{0,4})$/u.exec(value);\n\n if (match?.[1] === undefined) {\n return false;\n }\n\n const port = Number(match[1]);\n return Number.isSafeInteger(port) && port <= 65_535;\n});\n\nexport const externalHandoffDescriptorSchema = z.strictObject({\n schemaVersion: z.literal(1),\n brokerProtocolVersion: z.literal(EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION),\n projectKey: projectKeySchema,\n sessionId: opaqueIdSchema,\n framework: z.enum(EXTERNAL_HANDOFF_FRAMEWORKS),\n endpoint: loopbackEndpointSchema,\n bridgeToken: z\n .string()\n .min(43)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n pid: z.number().int().positive(),\n createdAt: z.iso.datetime(),\n});\n\nexport const bridgeStatusRequestSchema = z.strictObject({});\nexport const bridgeCurrentRequestSchema = z.strictObject({\n cursor: opaqueIdSchema.optional(),\n});\nexport const bridgeWaitRequestSchema = z.strictObject({\n afterCursor: opaqueIdSchema.optional(),\n timeoutMs: z\n .number()\n .int()\n .positive()\n .max(EXTERNAL_HANDOFF_LIMITS.maximumWaitMs)\n .default(EXTERNAL_HANDOFF_LIMITS.defaultWaitMs),\n});\nexport const bridgeAckRequestSchema = z.strictObject({\n cursor: opaqueIdSchema,\n connectorInstanceId: opaqueIdSchema,\n});\nexport const bridgeActiveClaimRequestSchema = z.strictObject({\n adapterKind: z.enum(EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS),\n connectorInstanceId: opaqueIdSchema,\n});\nexport const bridgeActiveHeartbeatRequestSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n});\nexport const bridgeActiveReportRequestSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n cursor: opaqueIdSchema,\n phase: externalHandoffReportableDispatchPhaseSchema,\n});\nexport const bridgeActiveReleaseRequestSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n});\nexport const bridgeStatusSchema = z.strictObject({\n brokerProtocolVersion: z.literal(EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION),\n projectKey: projectKeySchema,\n sessionId: opaqueIdSchema,\n framework: z.enum(EXTERNAL_HANDOFF_FRAMEWORKS),\n current: externalHandoffSummarySchema.nullable(),\n});\nexport const bridgeCurrentResultSchema = z.strictObject({\n outcome: z.literal(\"handoff\"),\n snapshot: externalHandoffSnapshotSchema,\n});\nexport const bridgeWaitResultSchema = z.discriminatedUnion(\"outcome\", [\n bridgeCurrentResultSchema,\n z.strictObject({ outcome: z.literal(\"timeout\") }),\n]);\nexport const bridgeAckResultSchema = z.strictObject({\n summary: externalHandoffSummarySchema,\n});\nexport const bridgeActiveClaimResultSchema = z.strictObject({\n leaseToken: opaqueIdSchema,\n heartbeatIntervalMs: z.literal(EXTERNAL_HANDOFF_LIMITS.activeHeartbeatIntervalMs),\n baselineCursor: opaqueIdSchema.nullable(),\n activeAdapter: activeAdapterSummarySchema,\n});\nexport const bridgeActiveStateResultSchema = z.strictObject({\n activeAdapter: activeAdapterSummarySchema.nullable(),\n dispatch: dispatchSummarySchema.nullable(),\n});\nexport const bridgeActiveHeartbeatResultSchema = bridgeActiveStateResultSchema;\nexport const bridgeActiveReportResultSchema = bridgeActiveStateResultSchema;\nexport const bridgeActiveReleaseResultSchema = bridgeActiveStateResultSchema;\n\nexport type ExternalHandoffDescriptor = z.infer<typeof externalHandoffDescriptorSchema>;\nexport type BridgeStatus = z.infer<typeof bridgeStatusSchema>;\nexport type BridgeWaitResult =\n | Readonly<{ outcome: \"handoff\"; snapshot: ExternalHandoffSnapshot }>\n | Readonly<{ outcome: \"timeout\" }>;\nexport interface BridgeActiveClaimResult {\n readonly leaseToken: string;\n readonly heartbeatIntervalMs: typeof EXTERNAL_HANDOFF_LIMITS.activeHeartbeatIntervalMs;\n readonly baselineCursor: string | null;\n readonly activeAdapter: ActiveAdapterSummary;\n}\nexport interface BridgeActiveStateResult {\n readonly activeAdapter: ActiveAdapterSummary | null;\n readonly dispatch: DispatchSummary | null;\n}\n\nfunction windowsPowerShellExecutable(): string {\n const systemRoot = process.env.SystemRoot ?? process.env.SYSTEMROOT;\n if (systemRoot === undefined || !path.win32.isAbsolute(systemRoot)) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n return path.win32.join(\n systemRoot,\n \"System32\",\n \"WindowsPowerShell\",\n \"v1.0\",\n \"powershell.exe\",\n );\n}\n\nasync function verifyWindowsAcl(\n candidate: string,\n kind: \"directory\" | \"file\",\n initialize: boolean,\n): Promise<void> {\n try {\n await execFileAsync(\n windowsPowerShellExecutable(),\n [\"-NoLogo\", \"-NoProfile\", \"-NonInteractive\", \"-Command\", WINDOWS_ACL_SCRIPT],\n {\n encoding: \"utf8\",\n env: {\n ...process.env,\n SPOTPATCH_ACL_KIND: kind,\n SPOTPATCH_ACL_OPERATION: initialize ? \"initialize\" : \"verify\",\n SPOTPATCH_ACL_TARGET: candidate,\n },\n timeout: WINDOWS_ACL_COMMAND_TIMEOUT_MS,\n windowsHide: true,\n },\n );\n } catch (error: unknown) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED, undefined, {\n cause: error,\n });\n }\n}\n\nexport async function assertPrivateExternalHandoffPath(\n candidate: string,\n kind: \"directory\" | \"file\",\n): Promise<Stats> {\n const status = await lstat(candidate);\n const correctKind = kind === \"directory\" ? status.isDirectory() : status.isFile();\n\n if (!correctKind || status.isSymbolicLink()) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n if (process.platform === \"win32\") {\n for (let attempt = 0; attempt < WINDOWS_ACL_VERIFY_ATTEMPTS; attempt += 1) {\n try {\n await verifyWindowsAcl(candidate, kind, false);\n return status;\n } catch (error: unknown) {\n if (attempt === WINDOWS_ACL_VERIFY_ATTEMPTS - 1) throw error;\n let current: Stats;\n try {\n current = await lstat(candidate);\n } catch {\n throw error;\n }\n const sameKind =\n kind === \"directory\" ? current.isDirectory() : current.isFile();\n if (\n !sameKind ||\n current.isSymbolicLink() ||\n current.dev !== status.dev ||\n current.ino !== status.ino\n ) {\n throw error;\n }\n await new Promise<void>((resolve) => {\n setTimeout(resolve, WINDOWS_ACL_RETRY_DELAY_MS * (attempt + 1));\n });\n }\n }\n return status;\n }\n\n const uid = process.getuid?.();\n if (uid === undefined || status.uid !== uid || (status.mode & 0o077) !== 0) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n return status;\n}\n\nexport async function initializePrivateExternalHandoffFile(\n candidate: string,\n): Promise<void> {\n if (process.platform === \"win32\") {\n await verifyWindowsAcl(candidate, \"file\", true);\n }\n}\n\nasync function initializeWindowsDirectory(directory: string): Promise<void> {\n if (process.platform === \"win32\") {\n await verifyWindowsAcl(directory, \"directory\", true);\n }\n}\n\nasync function ensurePrivateSubdirectory(\n base: string,\n create: boolean,\n): Promise<string> {\n const directory = path.join(base, \"spotpatch\");\n let created = false;\n\n if (create) {\n try {\n await mkdir(directory, { mode: 0o700 });\n created = true;\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n }\n }\n\n if (created) await initializeWindowsDirectory(directory);\n await assertPrivateExternalHandoffPath(directory, \"directory\");\n return realpath(directory);\n}\n\nasync function resolveWindowsRuntimeDirectory(create: boolean): Promise<string> {\n const configuredBase = process.env.LOCALAPPDATA;\n\n if (configuredBase !== undefined && !path.isAbsolute(configuredBase)) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n const base = configuredBase ?? path.join(os.homedir(), \"AppData\", \"Local\");\n const directory = path.join(base, \"SpotPatch\", \"external-agent-runtime-v1\");\n let created = false;\n\n if (create) {\n created = (await mkdir(directory, { mode: 0o700, recursive: true })) !== undefined;\n }\n\n if (created) await initializeWindowsDirectory(directory);\n await assertPrivateExternalHandoffPath(directory, \"directory\");\n return realpath(directory);\n}\n\nexport async function resolveExternalHandoffRuntimeDirectory(\n create: boolean,\n): Promise<string> {\n const xdgRuntimeDirectory = process.env.XDG_RUNTIME_DIR;\n\n if (xdgRuntimeDirectory !== undefined && !path.isAbsolute(xdgRuntimeDirectory)) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n if (xdgRuntimeDirectory !== undefined) {\n try {\n if (process.platform !== \"win32\") {\n await assertPrivateExternalHandoffPath(xdgRuntimeDirectory, \"directory\");\n }\n return await ensurePrivateSubdirectory(xdgRuntimeDirectory, create);\n } catch (error: unknown) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new SpotPatchError(ERROR_CODES.SESSION_NOT_FOUND);\n }\n\n throw error;\n }\n }\n\n if (process.platform === \"win32\") {\n try {\n return await resolveWindowsRuntimeDirectory(create);\n } catch (error: unknown) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new SpotPatchError(ERROR_CODES.SESSION_NOT_FOUND);\n }\n\n throw error;\n }\n }\n\n const uid = process.getuid?.();\n if (uid === undefined) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n const fallback = path.join(os.tmpdir(), `spotpatch-${String(uid)}`);\n\n if (create) {\n try {\n await mkdir(fallback, { mode: 0o700 });\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n }\n }\n\n try {\n await assertPrivateExternalHandoffPath(fallback, \"directory\");\n } catch (error: unknown) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new SpotPatchError(ERROR_CODES.SESSION_NOT_FOUND);\n }\n\n throw error;\n }\n\n return realpath(fallback);\n}\n\nexport async function computeExternalHandoffProjectKey(root: string): Promise<string> {\n const canonicalRoot = await realpath(root);\n return createHash(\"sha256\")\n .update(`${EXTERNAL_HANDOFF_PROJECT_KEY_SALT}\\0${canonicalRoot}`)\n .digest(\"hex\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { A as ActiveAdapterSummary, D as DispatchSummary, b as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS, c as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES, d as EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION, e as EXTERNAL_HANDOFF_DISPATCH_PHASES, f as EXTERNAL_HANDOFF_FRAMEWORKS, g as EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES, h as EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION, i as EXTERNAL_HANDOFF_STATES, j as ExternalHandoffActiveAdapterKind, k as ExternalHandoffActiveAdapterState, l as ExternalHandoffCapability, m as ExternalHandoffDispatchPhase, n as ExternalHandoffFramework, o as ExternalHandoffPublishDelivery, p as ExternalHandoffPublishRequest, q as ExternalHandoffPublishResult, r as ExternalHandoffReportableDispatchPhase, s as ExternalHandoffResolveDeliveryRequest, a as ExternalHandoffSnapshot, t as ExternalHandoffState, u as ExternalHandoffStatusRequest, v as ExternalHandoffStatusResult, w as ExternalHandoffSummary } from './external-handoff-
|
|
1
|
+
export { A as ActiveAdapterSummary, D as DispatchSummary, b as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS, c as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES, d as EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION, e as EXTERNAL_HANDOFF_DISPATCH_PHASES, f as EXTERNAL_HANDOFF_FRAMEWORKS, g as EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES, h as EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION, i as EXTERNAL_HANDOFF_STATES, j as ExternalHandoffActiveAdapterKind, k as ExternalHandoffActiveAdapterState, l as ExternalHandoffCapability, m as ExternalHandoffDispatchPhase, n as ExternalHandoffFramework, o as ExternalHandoffPublishDelivery, p as ExternalHandoffPublishRequest, q as ExternalHandoffPublishResult, r as ExternalHandoffReportableDispatchPhase, s as ExternalHandoffResolveDeliveryRequest, a as ExternalHandoffSnapshot, t as ExternalHandoffState, u as ExternalHandoffStatusRequest, v as ExternalHandoffStatusResult, w as ExternalHandoffSummary } from './external-handoff-D1Ua2jIA.cjs';
|
|
2
2
|
export { S as SPOTPATCH_ENDPOINTS, a as SPOTPATCH_TOKEN_HEADER } from './endpoints-O3ohYyAo.cjs';
|
|
3
|
-
export { E as ExternalAgentAction, a as ExternalAgentConnectionState, b as ExternalAgentControlCancelRequest, c as ExternalAgentControlConnectRequest, d as ExternalAgentControlDisconnectRequest, e as ExternalAgentControlStatus, f as ExternalAgentErrorCode, g as ExternalAgentEvent, h as ExternalAgentEventsRequest, i as ExternalAgentManagedResult, j as ExternalAgentResultRequest } from './external-agent-control-
|
|
3
|
+
export { E as ExternalAgentAction, a as ExternalAgentConnectionState, b as ExternalAgentControlCancelRequest, c as ExternalAgentControlConnectRequest, d as ExternalAgentControlDisconnectRequest, e as ExternalAgentControlStatus, f as ExternalAgentErrorCode, g as ExternalAgentEvent, h as ExternalAgentEventsRequest, i as ExternalAgentManagedResult, j as ExternalAgentResultRequest } from './external-agent-control-yC4ToQXg.cjs';
|
|
4
4
|
export { S as SpotAnnotation, a as SpotPatchLocale } from './annotation-Cz-NNgR4.cjs';
|
|
5
5
|
import 'zod';
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { A as ActiveAdapterSummary, D as DispatchSummary, b as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS, c as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES, d as EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION, e as EXTERNAL_HANDOFF_DISPATCH_PHASES, f as EXTERNAL_HANDOFF_FRAMEWORKS, g as EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES, h as EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION, i as EXTERNAL_HANDOFF_STATES, j as ExternalHandoffActiveAdapterKind, k as ExternalHandoffActiveAdapterState, l as ExternalHandoffCapability, m as ExternalHandoffDispatchPhase, n as ExternalHandoffFramework, o as ExternalHandoffPublishDelivery, p as ExternalHandoffPublishRequest, q as ExternalHandoffPublishResult, r as ExternalHandoffReportableDispatchPhase, s as ExternalHandoffResolveDeliveryRequest, a as ExternalHandoffSnapshot, t as ExternalHandoffState, u as ExternalHandoffStatusRequest, v as ExternalHandoffStatusResult, w as ExternalHandoffSummary } from './external-handoff-
|
|
1
|
+
export { A as ActiveAdapterSummary, D as DispatchSummary, b as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS, c as EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES, d as EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION, e as EXTERNAL_HANDOFF_DISPATCH_PHASES, f as EXTERNAL_HANDOFF_FRAMEWORKS, g as EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES, h as EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION, i as EXTERNAL_HANDOFF_STATES, j as ExternalHandoffActiveAdapterKind, k as ExternalHandoffActiveAdapterState, l as ExternalHandoffCapability, m as ExternalHandoffDispatchPhase, n as ExternalHandoffFramework, o as ExternalHandoffPublishDelivery, p as ExternalHandoffPublishRequest, q as ExternalHandoffPublishResult, r as ExternalHandoffReportableDispatchPhase, s as ExternalHandoffResolveDeliveryRequest, a as ExternalHandoffSnapshot, t as ExternalHandoffState, u as ExternalHandoffStatusRequest, v as ExternalHandoffStatusResult, w as ExternalHandoffSummary } from './external-handoff-BpoxbpPk.js';
|
|
2
2
|
export { S as SPOTPATCH_ENDPOINTS, a as SPOTPATCH_TOKEN_HEADER } from './endpoints-O3ohYyAo.js';
|
|
3
|
-
export { E as ExternalAgentAction, a as ExternalAgentConnectionState, b as ExternalAgentControlCancelRequest, c as ExternalAgentControlConnectRequest, d as ExternalAgentControlDisconnectRequest, e as ExternalAgentControlStatus, f as ExternalAgentErrorCode, g as ExternalAgentEvent, h as ExternalAgentEventsRequest, i as ExternalAgentManagedResult, j as ExternalAgentResultRequest } from './external-agent-control-
|
|
3
|
+
export { E as ExternalAgentAction, a as ExternalAgentConnectionState, b as ExternalAgentControlCancelRequest, c as ExternalAgentControlConnectRequest, d as ExternalAgentControlDisconnectRequest, e as ExternalAgentControlStatus, f as ExternalAgentErrorCode, g as ExternalAgentEvent, h as ExternalAgentEventsRequest, i as ExternalAgentManagedResult, j as ExternalAgentResultRequest } from './external-agent-control-yC4ToQXg.js';
|
|
4
4
|
export { S as SpotAnnotation, a as SpotPatchLocale } from './annotation-Cz-NNgR4.js';
|
|
5
5
|
import 'zod';
|
|
6
6
|
|
package/dist/index.cjs
CHANGED
|
@@ -393,7 +393,8 @@ var CONTEXTUAL_ASK_LIMITS = Object.freeze({
|
|
|
393
393
|
});
|
|
394
394
|
var CONTEXTUAL_ASK_EXECUTOR_KINDS = Object.freeze([
|
|
395
395
|
"configured-key",
|
|
396
|
-
"managed-codex"
|
|
396
|
+
"managed-codex",
|
|
397
|
+
"claude-code"
|
|
397
398
|
]);
|
|
398
399
|
var CONTEXTUAL_ASK_EXECUTOR_STATES = Object.freeze([
|
|
399
400
|
"ready",
|
|
@@ -541,7 +542,8 @@ var contextualAskExecutorPreferenceSchema = import_zod2.z.discriminatedUnion("ki
|
|
|
541
542
|
providerProfileId: profileIdSchema,
|
|
542
543
|
modelProfileId: profileIdSchema
|
|
543
544
|
}),
|
|
544
|
-
import_zod2.z.strictObject({ kind: import_zod2.z.literal("managed-codex") })
|
|
545
|
+
import_zod2.z.strictObject({ kind: import_zod2.z.literal("managed-codex") }),
|
|
546
|
+
import_zod2.z.strictObject({ kind: import_zod2.z.literal("claude-code") })
|
|
545
547
|
]);
|
|
546
548
|
var contextualAskOptionsSchema = import_zod2.z.union([
|
|
547
549
|
import_zod2.z.boolean(),
|