@spotpatch/shared 1.12.0 → 1.13.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.
Files changed (61) hide show
  1. package/dist/annotation-C0Me9mN2.d.cts +102 -0
  2. package/dist/annotation-C0Me9mN2.d.ts +102 -0
  3. package/dist/chunk-C2PJ4UUU.js +195 -0
  4. package/dist/chunk-C2PJ4UUU.js.map +1 -0
  5. package/dist/chunk-DYTWEIES.js +89 -0
  6. package/dist/chunk-DYTWEIES.js.map +1 -0
  7. package/dist/{chunk-JGOIBOFI.js → chunk-FPDSZDP2.js} +16 -2
  8. package/dist/chunk-FPDSZDP2.js.map +1 -0
  9. package/dist/chunk-IUTOVI5G.js +584 -0
  10. package/dist/chunk-IUTOVI5G.js.map +1 -0
  11. package/dist/{chunk-JU5HIWX7.js → chunk-YQ5GL523.js} +8 -173
  12. package/dist/chunk-YQ5GL523.js.map +1 -0
  13. package/dist/contextual-ask-B0mCFn92.d.cts +1451 -0
  14. package/dist/contextual-ask-B0mCFn92.d.ts +1451 -0
  15. package/dist/contextual-ask-browser.cjs +200 -0
  16. package/dist/contextual-ask-browser.cjs.map +1 -0
  17. package/dist/contextual-ask-browser.d.cts +31 -0
  18. package/dist/contextual-ask-browser.d.ts +31 -0
  19. package/dist/contextual-ask-browser.js +66 -0
  20. package/dist/contextual-ask-browser.js.map +1 -0
  21. package/dist/contextual-ask-node.cjs +968 -0
  22. package/dist/contextual-ask-node.cjs.map +1 -0
  23. package/dist/contextual-ask-node.d.cts +14 -0
  24. package/dist/contextual-ask-node.d.ts +14 -0
  25. package/dist/contextual-ask-node.js +122 -0
  26. package/dist/contextual-ask-node.js.map +1 -0
  27. package/dist/{data-flow-runtime-oq9m21IP.d.cts → data-flow-runtime-D8HPSb2i.d.cts} +13 -13
  28. package/dist/{data-flow-runtime-BelOgo8s.d.ts → data-flow-runtime-vKeEaJgT.d.ts} +13 -13
  29. package/dist/data-flow-runtime.cjs +2 -0
  30. package/dist/data-flow-runtime.cjs.map +1 -1
  31. package/dist/data-flow-runtime.d.cts +2 -2
  32. package/dist/data-flow-runtime.d.ts +2 -2
  33. package/dist/data-flow-runtime.js +1 -1
  34. package/dist/{endpoints-GedF44M2.d.cts → endpoints-O3ohYyAo.d.cts} +7 -1
  35. package/dist/{endpoints-GedF44M2.d.ts → endpoints-O3ohYyAo.d.ts} +7 -1
  36. package/dist/error-code-DRz2eqcB.d.cts +63 -0
  37. package/dist/error-code-DRz2eqcB.d.ts +63 -0
  38. package/dist/external-agent-node.cjs +142 -121
  39. package/dist/external-agent-node.cjs.map +1 -1
  40. package/dist/external-agent-node.d.cts +27 -26
  41. package/dist/external-agent-node.d.ts +27 -26
  42. package/dist/external-agent-node.js +4 -2
  43. package/dist/external-agent-node.js.map +1 -1
  44. package/dist/{external-handoff-BNUyMfNb.d.ts → external-handoff-DighrWn8.d.ts} +30 -130
  45. package/dist/{external-handoff-BNUyMfNb.d.cts → external-handoff-DwtFFR6F.d.cts} +30 -130
  46. package/dist/external-handoff-browser.cjs +2 -0
  47. package/dist/external-handoff-browser.cjs.map +1 -1
  48. package/dist/external-handoff-browser.d.cts +4 -3
  49. package/dist/external-handoff-browser.d.ts +4 -3
  50. package/dist/external-handoff-browser.js +1 -1
  51. package/dist/index.cjs +1144 -422
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.cts +126 -178
  54. package/dist/index.d.ts +126 -178
  55. package/dist/index.js +97 -16
  56. package/dist/index.js.map +1 -1
  57. package/package.json +29 -2
  58. package/dist/chunk-JGOIBOFI.js.map +0 -1
  59. package/dist/chunk-JU5HIWX7.js.map +0 -1
  60. package/dist/{external-agent-control-BMoSq_xI.d.cts → external-agent-control-CRBbjDDk.d.cts} +46 -46
  61. package/dist/{external-agent-control-BMoSq_xI.d.ts → external-agent-control-CRBbjDDk.d.ts} +46 -46
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { E as EXTERNAL_HANDOFF_LIMITS, A as ActiveAdapterSummary, D as DispatchSummary, a as ExternalHandoffSnapshot } from './external-handoff-BNUyMfNb.js';
2
+ import { E as EXTERNAL_HANDOFF_LIMITS, A as ActiveAdapterSummary, D as DispatchSummary, a as ExternalHandoffSnapshot } from './external-handoff-DighrWn8.js';
3
+ import './annotation-C0Me9mN2.js';
3
4
 
4
5
  declare const SPOTPATCH_BRIDGE_TOKEN_HEADER: "X-SpotPatch-Bridge-Token";
5
6
  declare const SPOTPATCH_BRIDGE_PATHS: Readonly<{
@@ -53,10 +54,10 @@ declare const bridgeActiveReportRequestSchema: z.ZodObject<{
53
54
  leaseToken: z.ZodString;
54
55
  cursor: z.ZodString;
55
56
  phase: z.ZodEnum<{
56
- dispatching: "dispatching";
57
- completed: "completed";
58
57
  failed: "failed";
59
58
  dispatched: "dispatched";
59
+ completed: "completed";
60
+ dispatching: "dispatching";
60
61
  working: "working";
61
62
  "delivery-unknown": "delivery-unknown";
62
63
  }>;
@@ -88,8 +89,8 @@ declare const bridgeStatusSchema: z.ZodObject<{
88
89
  publishedAt: z.ZodISODateTime;
89
90
  expiresAt: z.ZodISODateTime;
90
91
  state: z.ZodEnum<{
91
- available: "available";
92
92
  expired: "expired";
93
+ available: "available";
93
94
  superseded: "superseded";
94
95
  }>;
95
96
  pickupCount: z.ZodNumber;
@@ -142,16 +143,16 @@ declare const bridgeCurrentResultSchema: z.ZodObject<{
142
143
  line: z.ZodOptional<z.ZodNumber>;
143
144
  column: z.ZodOptional<z.ZodNumber>;
144
145
  origin: z.ZodEnum<{
145
- none: "none";
146
146
  "jsx-host": "jsx-host";
147
147
  "react-fiber": "react-fiber";
148
148
  "dom-ancestor": "dom-ancestor";
149
+ none: "none";
149
150
  }>;
150
151
  confidence: z.ZodEnum<{
151
- unknown: "unknown";
152
152
  exact: "exact";
153
153
  probable: "probable";
154
154
  approximate: "approximate";
155
+ unknown: "unknown";
155
156
  }>;
156
157
  }, z.core.$strict>;
157
158
  react: z.ZodObject<{
@@ -167,16 +168,16 @@ declare const bridgeCurrentResultSchema: z.ZodObject<{
167
168
  line: z.ZodOptional<z.ZodNumber>;
168
169
  column: z.ZodOptional<z.ZodNumber>;
169
170
  origin: z.ZodEnum<{
170
- none: "none";
171
171
  "jsx-host": "jsx-host";
172
172
  "react-fiber": "react-fiber";
173
173
  "dom-ancestor": "dom-ancestor";
174
+ none: "none";
174
175
  }>;
175
176
  confidence: z.ZodEnum<{
176
- unknown: "unknown";
177
177
  exact: "exact";
178
178
  probable: "probable";
179
179
  approximate: "approximate";
180
+ unknown: "unknown";
180
181
  }>;
181
182
  }, z.core.$strict>>;
182
183
  }, z.core.$strict>;
@@ -271,16 +272,16 @@ declare const bridgeWaitResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
271
272
  line: z.ZodOptional<z.ZodNumber>;
272
273
  column: z.ZodOptional<z.ZodNumber>;
273
274
  origin: z.ZodEnum<{
274
- none: "none";
275
275
  "jsx-host": "jsx-host";
276
276
  "react-fiber": "react-fiber";
277
277
  "dom-ancestor": "dom-ancestor";
278
+ none: "none";
278
279
  }>;
279
280
  confidence: z.ZodEnum<{
280
- unknown: "unknown";
281
281
  exact: "exact";
282
282
  probable: "probable";
283
283
  approximate: "approximate";
284
+ unknown: "unknown";
284
285
  }>;
285
286
  }, z.core.$strict>;
286
287
  react: z.ZodObject<{
@@ -296,16 +297,16 @@ declare const bridgeWaitResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
296
297
  line: z.ZodOptional<z.ZodNumber>;
297
298
  column: z.ZodOptional<z.ZodNumber>;
298
299
  origin: z.ZodEnum<{
299
- none: "none";
300
300
  "jsx-host": "jsx-host";
301
301
  "react-fiber": "react-fiber";
302
302
  "dom-ancestor": "dom-ancestor";
303
+ none: "none";
303
304
  }>;
304
305
  confidence: z.ZodEnum<{
305
- unknown: "unknown";
306
306
  exact: "exact";
307
307
  probable: "probable";
308
308
  approximate: "approximate";
309
+ unknown: "unknown";
309
310
  }>;
310
311
  }, z.core.$strict>>;
311
312
  }, z.core.$strict>;
@@ -373,8 +374,8 @@ declare const bridgeAckResultSchema: z.ZodObject<{
373
374
  publishedAt: z.ZodISODateTime;
374
375
  expiresAt: z.ZodISODateTime;
375
376
  state: z.ZodEnum<{
376
- available: "available";
377
377
  expired: "expired";
378
+ available: "available";
378
379
  superseded: "superseded";
379
380
  }>;
380
381
  pickupCount: z.ZodNumber;
@@ -392,8 +393,8 @@ declare const bridgeActiveClaimResultSchema: z.ZodObject<{
392
393
  }>;
393
394
  state: z.ZodEnum<{
394
395
  ready: "ready";
395
- busy: "busy";
396
396
  blocked: "blocked";
397
+ busy: "busy";
397
398
  }>;
398
399
  canDispatch: z.ZodBoolean;
399
400
  connectedAt: z.ZodISODateTime;
@@ -408,8 +409,8 @@ declare const bridgeActiveStateResultSchema: z.ZodObject<{
408
409
  }>;
409
410
  state: z.ZodEnum<{
410
411
  ready: "ready";
411
- busy: "busy";
412
412
  blocked: "blocked";
413
+ busy: "busy";
413
414
  }>;
414
415
  canDispatch: z.ZodBoolean;
415
416
  connectedAt: z.ZodISODateTime;
@@ -423,10 +424,10 @@ declare const bridgeActiveStateResultSchema: z.ZodObject<{
423
424
  revision: z.ZodNumber;
424
425
  phase: z.ZodEnum<{
425
426
  queued: "queued";
426
- dispatching: "dispatching";
427
- completed: "completed";
428
427
  failed: "failed";
429
428
  dispatched: "dispatched";
429
+ completed: "completed";
430
+ dispatching: "dispatching";
430
431
  working: "working";
431
432
  "delivery-unknown": "delivery-unknown";
432
433
  }>;
@@ -441,8 +442,8 @@ declare const bridgeActiveHeartbeatResultSchema: z.ZodObject<{
441
442
  }>;
442
443
  state: z.ZodEnum<{
443
444
  ready: "ready";
444
- busy: "busy";
445
445
  blocked: "blocked";
446
+ busy: "busy";
446
447
  }>;
447
448
  canDispatch: z.ZodBoolean;
448
449
  connectedAt: z.ZodISODateTime;
@@ -456,10 +457,10 @@ declare const bridgeActiveHeartbeatResultSchema: z.ZodObject<{
456
457
  revision: z.ZodNumber;
457
458
  phase: z.ZodEnum<{
458
459
  queued: "queued";
459
- dispatching: "dispatching";
460
- completed: "completed";
461
460
  failed: "failed";
462
461
  dispatched: "dispatched";
462
+ completed: "completed";
463
+ dispatching: "dispatching";
463
464
  working: "working";
464
465
  "delivery-unknown": "delivery-unknown";
465
466
  }>;
@@ -474,8 +475,8 @@ declare const bridgeActiveReportResultSchema: z.ZodObject<{
474
475
  }>;
475
476
  state: z.ZodEnum<{
476
477
  ready: "ready";
477
- busy: "busy";
478
478
  blocked: "blocked";
479
+ busy: "busy";
479
480
  }>;
480
481
  canDispatch: z.ZodBoolean;
481
482
  connectedAt: z.ZodISODateTime;
@@ -489,10 +490,10 @@ declare const bridgeActiveReportResultSchema: z.ZodObject<{
489
490
  revision: z.ZodNumber;
490
491
  phase: z.ZodEnum<{
491
492
  queued: "queued";
492
- dispatching: "dispatching";
493
- completed: "completed";
494
493
  failed: "failed";
495
494
  dispatched: "dispatched";
495
+ completed: "completed";
496
+ dispatching: "dispatching";
496
497
  working: "working";
497
498
  "delivery-unknown": "delivery-unknown";
498
499
  }>;
@@ -507,8 +508,8 @@ declare const bridgeActiveReleaseResultSchema: z.ZodObject<{
507
508
  }>;
508
509
  state: z.ZodEnum<{
509
510
  ready: "ready";
510
- busy: "busy";
511
511
  blocked: "blocked";
512
+ busy: "busy";
512
513
  }>;
513
514
  canDispatch: z.ZodBoolean;
514
515
  connectedAt: z.ZodISODateTime;
@@ -522,10 +523,10 @@ declare const bridgeActiveReleaseResultSchema: z.ZodObject<{
522
523
  revision: z.ZodNumber;
523
524
  phase: z.ZodEnum<{
524
525
  queued: "queued";
525
- dispatching: "dispatching";
526
- completed: "completed";
527
526
  failed: "failed";
528
527
  dispatched: "dispatched";
528
+ completed: "completed";
529
+ dispatching: "dispatching";
529
530
  working: "working";
530
531
  "delivery-unknown": "delivery-unknown";
531
532
  }>;
@@ -1,12 +1,14 @@
1
1
  import {
2
- ERROR_CODES,
3
2
  SpotPatchError,
4
3
  activeAdapterSummarySchema,
5
4
  dispatchSummarySchema,
6
5
  externalHandoffReportableDispatchPhaseSchema,
7
6
  externalHandoffSnapshotSchema,
8
7
  externalHandoffSummarySchema
9
- } from "./chunk-JU5HIWX7.js";
8
+ } from "./chunk-YQ5GL523.js";
9
+ import {
10
+ ERROR_CODES
11
+ } from "./chunk-C2PJ4UUU.js";
10
12
  import {
11
13
  EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS,
12
14
  EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/external-agent-node.ts"],"sourcesContent":["/// <reference types=\"node\" />\n\nimport { createHash } from \"node:crypto\";\nimport { lstat, mkdir, realpath } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\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 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 currentUid(): number {\n const uid = process.getuid?.();\n\n if (uid === undefined) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n return uid;\n}\n\nasync function assertPrivateDirectory(directory: string, uid: number): Promise<void> {\n const status = await lstat(directory);\n\n if (\n !status.isDirectory() ||\n status.isSymbolicLink() ||\n status.uid !== uid ||\n (status.mode & 0o077) !== 0\n ) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n}\n\nasync function ensurePrivateSubdirectory(\n base: string,\n uid: number,\n create: boolean,\n): Promise<string> {\n const directory = path.join(base, \"spotpatch\");\n\n if (create) {\n try {\n await mkdir(directory, { mode: 0o700 });\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n }\n }\n\n await assertPrivateDirectory(directory, uid);\n return directory;\n}\n\nexport async function resolveExternalHandoffRuntimeDirectory(\n create: boolean,\n): Promise<string> {\n if (process.platform === \"win32\") {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n const uid = currentUid();\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 await assertPrivateDirectory(xdgRuntimeDirectory, uid);\n return await ensurePrivateSubdirectory(xdgRuntimeDirectory, uid, 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 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 assertPrivateDirectory(fallback, uid);\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 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 { lstat, mkdir, realpath } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\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 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 currentUid(): number {\n const uid = process.getuid?.();\n\n if (uid === undefined) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n return uid;\n}\n\nasync function assertPrivateDirectory(directory: string, uid: number): Promise<void> {\n const status = await lstat(directory);\n\n if (\n !status.isDirectory() ||\n status.isSymbolicLink() ||\n status.uid !== uid ||\n (status.mode & 0o077) !== 0\n ) {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n}\n\nasync function ensurePrivateSubdirectory(\n base: string,\n uid: number,\n create: boolean,\n): Promise<string> {\n const directory = path.join(base, \"spotpatch\");\n\n if (create) {\n try {\n await mkdir(directory, { mode: 0o700 });\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw error;\n }\n }\n }\n\n await assertPrivateDirectory(directory, uid);\n return directory;\n}\n\nexport async function resolveExternalHandoffRuntimeDirectory(\n create: boolean,\n): Promise<string> {\n if (process.platform === \"win32\") {\n throw new SpotPatchError(ERROR_CODES.BRIDGE_UNAUTHORIZED);\n }\n\n const uid = currentUid();\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 await assertPrivateDirectory(xdgRuntimeDirectory, uid);\n return await ensurePrivateSubdirectory(xdgRuntimeDirectory, uid, 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 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 assertPrivateDirectory(fallback, uid);\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 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,105 +1,5 @@
1
1
  import { z } from 'zod';
2
-
3
- interface ContextBudget {
4
- readonly totalCharacters: number;
5
- readonly domCharacters: number;
6
- readonly cssCharacters: number;
7
- readonly codeCharacters: number;
8
- readonly maxCodeLines: number;
9
- readonly maxComponentDepth: number;
10
- }
11
- interface CodeContext {
12
- readonly relativePath: string;
13
- readonly language: "tsx" | "jsx";
14
- readonly startLine: number;
15
- readonly endLine: number;
16
- readonly excerpt: string;
17
- readonly boundary: "component" | "nearby-lines";
18
- }
19
-
20
- type SourceConfidence = "exact" | "probable" | "approximate" | "unknown";
21
- type SourceOrigin = "jsx-host" | "react-fiber" | "dom-ancestor" | "none";
22
- interface SourceRef {
23
- readonly fileId?: string;
24
- readonly relativePath?: string;
25
- readonly line?: number;
26
- readonly column?: number;
27
- readonly origin: SourceOrigin;
28
- readonly confidence: SourceConfidence;
29
- }
30
- interface ReactContext {
31
- readonly supported: boolean;
32
- readonly version?: string;
33
- readonly componentName?: string;
34
- readonly componentSourceId?: string;
35
- readonly sourceVersion?: string;
36
- readonly componentStack: readonly string[];
37
- readonly source?: SourceRef;
38
- }
39
-
40
- interface MatchedStyleRule {
41
- readonly selector: string;
42
- readonly declarations: string;
43
- readonly source?: string;
44
- readonly media?: string;
45
- }
46
- interface StyleContext {
47
- readonly classNames: readonly string[];
48
- readonly inlineStyle?: string;
49
- readonly matchedRules: readonly MatchedStyleRule[];
50
- readonly computed: Readonly<Record<string, string>>;
51
- readonly warnings: readonly string[];
52
- }
53
-
54
- interface PageContext {
55
- readonly url: string;
56
- readonly pathname: string;
57
- readonly title: string;
58
- readonly viewportWidth: number;
59
- readonly viewportHeight: number;
60
- readonly devicePixelRatio: number;
61
- }
62
- interface ElementContext {
63
- readonly tagName: string;
64
- readonly selector: string;
65
- readonly sanitizedHtml: string;
66
- readonly textPreview?: string;
67
- readonly role?: string;
68
- readonly rect: Readonly<{
69
- x: number;
70
- y: number;
71
- width: number;
72
- height: number;
73
- }>;
74
- }
75
- /** Protocol hard limit. Runtime configuration may choose a smaller limit. */
76
- declare const MAX_ANNOTATION_TARGETS = 20;
77
- /** Each target owns its requested change; the UI enforces the same bound. */
78
- declare const MAX_TARGET_INSTRUCTION_CHARACTERS = 2000;
79
- /** Keeps the complete, atomic user intent within the prompt and request budgets. */
80
- declare const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4000;
81
- declare const SPOTPATCH_LOCALES: readonly ["en-US", "zh-CN"];
82
- type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];
83
- declare const SPOTPATCH_LOCALE_PREFERENCES: readonly ["auto", "en-US", "zh-CN"];
84
- type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];
85
- interface SpotTargetContext {
86
- readonly instruction: string;
87
- readonly page?: Readonly<PageContext>;
88
- readonly source: SourceRef;
89
- readonly react: ReactContext;
90
- readonly element: ElementContext;
91
- readonly styles: StyleContext;
92
- readonly code?: CodeContext;
93
- readonly warnings: readonly string[];
94
- }
95
- interface SpotAnnotation {
96
- readonly schemaVersion: 3;
97
- readonly id: string;
98
- readonly locale: SpotPatchLocale;
99
- readonly page: Readonly<PageContext>;
100
- readonly targets: readonly SpotTargetContext[];
101
- readonly createdAt: string;
102
- }
2
+ import { S as SpotAnnotation } from './annotation-C0Me9mN2.js';
103
3
 
104
4
  declare const EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION: 1;
105
5
  declare const EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION: 2;
@@ -144,10 +44,10 @@ type ExternalHandoffDispatchPhase = (typeof EXTERNAL_HANDOFF_DISPATCH_PHASES)[nu
144
44
  type ExternalHandoffReportableDispatchPhase = (typeof EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES)[number];
145
45
 
146
46
  declare const externalHandoffReportableDispatchPhaseSchema: z.ZodEnum<{
147
- dispatching: "dispatching";
148
- completed: "completed";
149
47
  failed: "failed";
150
48
  dispatched: "dispatched";
49
+ completed: "completed";
50
+ dispatching: "dispatching";
151
51
  working: "working";
152
52
  "delivery-unknown": "delivery-unknown";
153
53
  }>;
@@ -167,8 +67,8 @@ declare const externalHandoffSummarySchema: z.ZodObject<{
167
67
  publishedAt: z.ZodISODateTime;
168
68
  expiresAt: z.ZodISODateTime;
169
69
  state: z.ZodEnum<{
170
- available: "available";
171
70
  expired: "expired";
71
+ available: "available";
172
72
  superseded: "superseded";
173
73
  }>;
174
74
  pickupCount: z.ZodNumber;
@@ -218,16 +118,16 @@ declare const externalHandoffSnapshotSchema: z.ZodObject<{
218
118
  line: z.ZodOptional<z.ZodNumber>;
219
119
  column: z.ZodOptional<z.ZodNumber>;
220
120
  origin: z.ZodEnum<{
221
- none: "none";
222
121
  "jsx-host": "jsx-host";
223
122
  "react-fiber": "react-fiber";
224
123
  "dom-ancestor": "dom-ancestor";
124
+ none: "none";
225
125
  }>;
226
126
  confidence: z.ZodEnum<{
227
- unknown: "unknown";
228
127
  exact: "exact";
229
128
  probable: "probable";
230
129
  approximate: "approximate";
130
+ unknown: "unknown";
231
131
  }>;
232
132
  }, z.core.$strict>;
233
133
  react: z.ZodObject<{
@@ -243,16 +143,16 @@ declare const externalHandoffSnapshotSchema: z.ZodObject<{
243
143
  line: z.ZodOptional<z.ZodNumber>;
244
144
  column: z.ZodOptional<z.ZodNumber>;
245
145
  origin: z.ZodEnum<{
246
- none: "none";
247
146
  "jsx-host": "jsx-host";
248
147
  "react-fiber": "react-fiber";
249
148
  "dom-ancestor": "dom-ancestor";
149
+ none: "none";
250
150
  }>;
251
151
  confidence: z.ZodEnum<{
252
- unknown: "unknown";
253
152
  exact: "exact";
254
153
  probable: "probable";
255
154
  approximate: "approximate";
155
+ unknown: "unknown";
256
156
  }>;
257
157
  }, z.core.$strict>>;
258
158
  }, z.core.$strict>;
@@ -307,8 +207,8 @@ declare const activeAdapterSummarySchema: z.ZodObject<{
307
207
  }>;
308
208
  state: z.ZodEnum<{
309
209
  ready: "ready";
310
- busy: "busy";
311
210
  blocked: "blocked";
211
+ busy: "busy";
312
212
  }>;
313
213
  canDispatch: z.ZodBoolean;
314
214
  connectedAt: z.ZodISODateTime;
@@ -322,10 +222,10 @@ declare const dispatchSummarySchema: z.ZodObject<{
322
222
  revision: z.ZodNumber;
323
223
  phase: z.ZodEnum<{
324
224
  queued: "queued";
325
- dispatching: "dispatching";
326
- completed: "completed";
327
225
  failed: "failed";
328
226
  dispatched: "dispatched";
227
+ completed: "completed";
228
+ dispatching: "dispatching";
329
229
  working: "working";
330
230
  "delivery-unknown": "delivery-unknown";
331
231
  }>;
@@ -365,16 +265,16 @@ declare const externalHandoffPublishRequestSchema: z.ZodObject<{
365
265
  line: z.ZodOptional<z.ZodNumber>;
366
266
  column: z.ZodOptional<z.ZodNumber>;
367
267
  origin: z.ZodEnum<{
368
- none: "none";
369
268
  "jsx-host": "jsx-host";
370
269
  "react-fiber": "react-fiber";
371
270
  "dom-ancestor": "dom-ancestor";
271
+ none: "none";
372
272
  }>;
373
273
  confidence: z.ZodEnum<{
374
- unknown: "unknown";
375
274
  exact: "exact";
376
275
  probable: "probable";
377
276
  approximate: "approximate";
277
+ unknown: "unknown";
378
278
  }>;
379
279
  }, z.core.$strict>;
380
280
  react: z.ZodObject<{
@@ -390,16 +290,16 @@ declare const externalHandoffPublishRequestSchema: z.ZodObject<{
390
290
  line: z.ZodOptional<z.ZodNumber>;
391
291
  column: z.ZodOptional<z.ZodNumber>;
392
292
  origin: z.ZodEnum<{
393
- none: "none";
394
293
  "jsx-host": "jsx-host";
395
294
  "react-fiber": "react-fiber";
396
295
  "dom-ancestor": "dom-ancestor";
296
+ none: "none";
397
297
  }>;
398
298
  confidence: z.ZodEnum<{
399
- unknown: "unknown";
400
299
  exact: "exact";
401
300
  probable: "probable";
402
301
  approximate: "approximate";
302
+ unknown: "unknown";
403
303
  }>;
404
304
  }, z.core.$strict>>;
405
305
  }, z.core.$strict>;
@@ -467,8 +367,8 @@ declare const externalHandoffCapabilitySchema: z.ZodObject<{
467
367
  }>;
468
368
  state: z.ZodEnum<{
469
369
  ready: "ready";
470
- busy: "busy";
471
370
  blocked: "blocked";
371
+ busy: "busy";
472
372
  }>;
473
373
  canDispatch: z.ZodBoolean;
474
374
  connectedAt: z.ZodISODateTime;
@@ -482,10 +382,10 @@ declare const externalHandoffCapabilitySchema: z.ZodObject<{
482
382
  revision: z.ZodNumber;
483
383
  phase: z.ZodEnum<{
484
384
  queued: "queued";
485
- dispatching: "dispatching";
486
- completed: "completed";
487
385
  failed: "failed";
488
386
  dispatched: "dispatched";
387
+ completed: "completed";
388
+ dispatching: "dispatching";
489
389
  working: "working";
490
390
  "delivery-unknown": "delivery-unknown";
491
391
  }>;
@@ -503,8 +403,8 @@ declare const externalHandoffPublishDeliverySchema: z.ZodDiscriminatedUnion<[z.Z
503
403
  }>;
504
404
  state: z.ZodEnum<{
505
405
  ready: "ready";
506
- busy: "busy";
507
406
  blocked: "blocked";
407
+ busy: "busy";
508
408
  }>;
509
409
  canDispatch: z.ZodBoolean;
510
410
  connectedAt: z.ZodISODateTime;
@@ -518,10 +418,10 @@ declare const externalHandoffPublishDeliverySchema: z.ZodDiscriminatedUnion<[z.Z
518
418
  revision: z.ZodNumber;
519
419
  phase: z.ZodEnum<{
520
420
  queued: "queued";
521
- dispatching: "dispatching";
522
- completed: "completed";
523
421
  failed: "failed";
524
422
  dispatched: "dispatched";
423
+ completed: "completed";
424
+ dispatching: "dispatching";
525
425
  working: "working";
526
426
  "delivery-unknown": "delivery-unknown";
527
427
  }>;
@@ -545,8 +445,8 @@ declare const externalHandoffPublishResultSchema: z.ZodObject<{
545
445
  publishedAt: z.ZodISODateTime;
546
446
  expiresAt: z.ZodISODateTime;
547
447
  state: z.ZodEnum<{
548
- available: "available";
549
448
  expired: "expired";
449
+ available: "available";
550
450
  superseded: "superseded";
551
451
  }>;
552
452
  pickupCount: z.ZodNumber;
@@ -563,8 +463,8 @@ declare const externalHandoffPublishResultSchema: z.ZodObject<{
563
463
  }>;
564
464
  state: z.ZodEnum<{
565
465
  ready: "ready";
566
- busy: "busy";
567
466
  blocked: "blocked";
467
+ busy: "busy";
568
468
  }>;
569
469
  canDispatch: z.ZodBoolean;
570
470
  connectedAt: z.ZodISODateTime;
@@ -578,10 +478,10 @@ declare const externalHandoffPublishResultSchema: z.ZodObject<{
578
478
  revision: z.ZodNumber;
579
479
  phase: z.ZodEnum<{
580
480
  queued: "queued";
581
- dispatching: "dispatching";
582
- completed: "completed";
583
481
  failed: "failed";
584
482
  dispatched: "dispatched";
483
+ completed: "completed";
484
+ dispatching: "dispatching";
585
485
  working: "working";
586
486
  "delivery-unknown": "delivery-unknown";
587
487
  }>;
@@ -607,8 +507,8 @@ declare const externalHandoffStatusResultSchema: z.ZodObject<{
607
507
  publishedAt: z.ZodISODateTime;
608
508
  expiresAt: z.ZodISODateTime;
609
509
  state: z.ZodEnum<{
610
- available: "available";
611
510
  expired: "expired";
511
+ available: "available";
612
512
  superseded: "superseded";
613
513
  }>;
614
514
  pickupCount: z.ZodNumber;
@@ -621,8 +521,8 @@ declare const externalHandoffStatusResultSchema: z.ZodObject<{
621
521
  }>;
622
522
  state: z.ZodEnum<{
623
523
  ready: "ready";
624
- busy: "busy";
625
524
  blocked: "blocked";
525
+ busy: "busy";
626
526
  }>;
627
527
  canDispatch: z.ZodBoolean;
628
528
  connectedAt: z.ZodISODateTime;
@@ -636,10 +536,10 @@ declare const externalHandoffStatusResultSchema: z.ZodObject<{
636
536
  revision: z.ZodNumber;
637
537
  phase: z.ZodEnum<{
638
538
  queued: "queued";
639
- dispatching: "dispatching";
640
- completed: "completed";
641
539
  failed: "failed";
642
540
  dispatched: "dispatched";
541
+ completed: "completed";
542
+ dispatching: "dispatching";
643
543
  working: "working";
644
544
  "delivery-unknown": "delivery-unknown";
645
545
  }>;
@@ -717,4 +617,4 @@ type ExternalHandoffPublishRequest = z.infer<typeof externalHandoffPublishReques
717
617
  type ExternalHandoffStatusRequest = z.infer<typeof externalHandoffStatusRequestSchema>;
718
618
  type ExternalHandoffResolveDeliveryRequest = z.infer<typeof externalHandoffResolveDeliveryRequestSchema>;
719
619
 
720
- export { externalHandoffResolveDeliveryRequestSchema as $, type ActiveAdapterSummary as A, type ElementContext as B, type ContextBudget as C, type DispatchSummary as D, EXTERNAL_HANDOFF_LIMITS as E, MAX_ANNOTATION_TARGETS as F, MAX_TARGET_INSTRUCTION_CHARACTERS as G, type MatchedStyleRule as H, SPOTPATCH_LOCALES as I, type SourceConfidence as J, type SourceOrigin as K, type SourceRef as L, MAX_ANNOTATION_INSTRUCTION_CHARACTERS as M, type SpotPatchLocalePreference as N, type SpotTargetContext as O, type PageContext as P, type StyleContext as Q, type ReactContext as R, type SpotAnnotation as S, activeAdapterSummarySchema as T, dispatchSummarySchema as U, externalHandoffCapabilityRequestSchema as V, externalHandoffCapabilitySchema as W, externalHandoffPublishDeliverySchema as X, externalHandoffPublishRequestSchema as Y, externalHandoffPublishResultSchema as Z, externalHandoffReportableDispatchPhaseSchema as _, type ExternalHandoffSnapshot as a, externalHandoffSnapshotSchema as a0, externalHandoffStatusRequestSchema as a1, externalHandoffStatusResultSchema as a2, externalHandoffSummarySchema as a3, EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS as b, EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES as c, EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION as d, EXTERNAL_HANDOFF_DISPATCH_PHASES as e, EXTERNAL_HANDOFF_FRAMEWORKS as f, EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES as g, EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION as h, EXTERNAL_HANDOFF_STATES as i, type ExternalHandoffActiveAdapterKind as j, type ExternalHandoffActiveAdapterState as k, type ExternalHandoffCapability as l, type ExternalHandoffDispatchPhase as m, type ExternalHandoffFramework as n, type ExternalHandoffPublishDelivery as o, type ExternalHandoffPublishRequest as p, type ExternalHandoffPublishResult as q, type ExternalHandoffReportableDispatchPhase as r, type ExternalHandoffResolveDeliveryRequest as s, type ExternalHandoffState as t, type ExternalHandoffStatusRequest as u, type ExternalHandoffStatusResult as v, type ExternalHandoffSummary as w, type SpotPatchLocale as x, SPOTPATCH_LOCALE_PREFERENCES as y, type CodeContext as z };
620
+ export { type ActiveAdapterSummary as A, externalHandoffCapabilitySchema as B, externalHandoffPublishDeliverySchema as C, type DispatchSummary as D, EXTERNAL_HANDOFF_LIMITS as E, externalHandoffPublishRequestSchema as F, externalHandoffPublishResultSchema as G, externalHandoffReportableDispatchPhaseSchema as H, externalHandoffResolveDeliveryRequestSchema as I, externalHandoffSnapshotSchema as J, externalHandoffStatusRequestSchema as K, externalHandoffStatusResultSchema as L, externalHandoffSummarySchema as M, type ExternalHandoffSnapshot as a, EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS as b, EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES as c, EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION as d, EXTERNAL_HANDOFF_DISPATCH_PHASES as e, EXTERNAL_HANDOFF_FRAMEWORKS as f, EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES as g, EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION as h, EXTERNAL_HANDOFF_STATES as i, type ExternalHandoffActiveAdapterKind as j, type ExternalHandoffActiveAdapterState as k, type ExternalHandoffCapability as l, type ExternalHandoffDispatchPhase as m, type ExternalHandoffFramework as n, type ExternalHandoffPublishDelivery as o, type ExternalHandoffPublishRequest as p, type ExternalHandoffPublishResult as q, type ExternalHandoffReportableDispatchPhase as r, type ExternalHandoffResolveDeliveryRequest as s, type ExternalHandoffState as t, type ExternalHandoffStatusRequest as u, type ExternalHandoffStatusResult as v, type ExternalHandoffSummary as w, activeAdapterSummarySchema as x, dispatchSummarySchema as y, externalHandoffCapabilityRequestSchema as z };