@spotpatch/shared 1.9.0 → 1.11.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 (41) hide show
  1. package/dist/chunk-2LVIH7OA.js +75 -0
  2. package/dist/chunk-2LVIH7OA.js.map +1 -0
  3. package/dist/chunk-JGOIBOFI.js +34 -0
  4. package/dist/chunk-JGOIBOFI.js.map +1 -0
  5. package/dist/chunk-JU5HIWX7.js +431 -0
  6. package/dist/chunk-JU5HIWX7.js.map +1 -0
  7. package/dist/{chunk-K2UAPG7T.js → chunk-RK46Y7LD.js} +2 -23
  8. package/dist/chunk-RK46Y7LD.js.map +1 -0
  9. package/dist/{data-flow-runtime-zwbvImvl.d.cts → data-flow-runtime-BiouPr1G.d.cts} +2 -16
  10. package/dist/{data-flow-runtime-zwbvImvl.d.ts → data-flow-runtime-oKZOBYAB.d.ts} +2 -16
  11. package/dist/data-flow-runtime.cjs +11 -1
  12. package/dist/data-flow-runtime.cjs.map +1 -1
  13. package/dist/data-flow-runtime.d.cts +2 -1
  14. package/dist/data-flow-runtime.d.ts +2 -1
  15. package/dist/data-flow-runtime.js +4 -2
  16. package/dist/endpoints-GedF44M2.d.cts +26 -0
  17. package/dist/endpoints-GedF44M2.d.ts +26 -0
  18. package/dist/external-agent-control-BB-oicmw.d.cts +547 -0
  19. package/dist/external-agent-control-BB-oicmw.d.ts +547 -0
  20. package/dist/external-agent-node.cjs +692 -0
  21. package/dist/external-agent-node.cjs.map +1 -0
  22. package/dist/external-agent-node.d.cts +556 -0
  23. package/dist/external-agent-node.d.ts +556 -0
  24. package/dist/external-agent-node.js +210 -0
  25. package/dist/external-agent-node.js.map +1 -0
  26. package/dist/external-handoff--lT9XQEw.d.cts +720 -0
  27. package/dist/external-handoff--lT9XQEw.d.ts +720 -0
  28. package/dist/external-handoff-browser.cjs +324 -0
  29. package/dist/external-handoff-browser.cjs.map +1 -0
  30. package/dist/external-handoff-browser.d.cts +58 -0
  31. package/dist/external-handoff-browser.d.ts +58 -0
  32. package/dist/external-handoff-browser.js +198 -0
  33. package/dist/external-handoff-browser.js.map +1 -0
  34. package/dist/index.cjs +664 -129
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +164 -128
  37. package/dist/index.d.ts +164 -128
  38. package/dist/index.js +354 -267
  39. package/dist/index.js.map +1 -1
  40. package/package.json +28 -2
  41. package/dist/chunk-K2UAPG7T.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -44,6 +44,32 @@ __export(index_exports, {
44
44
  DEFAULT_DATA_FLOW_LIMITS: () => DEFAULT_DATA_FLOW_LIMITS,
45
45
  DEFAULT_RUNTIME_DATA_FLOW_LIMITS: () => DEFAULT_RUNTIME_DATA_FLOW_LIMITS,
46
46
  ERROR_CODES: () => ERROR_CODES,
47
+ ERROR_CODE_VALUES: () => ERROR_CODE_VALUES,
48
+ EXTERNAL_AGENT_ACTIONS: () => EXTERNAL_AGENT_ACTIONS,
49
+ EXTERNAL_AGENT_AUTH_READINESS: () => EXTERNAL_AGENT_AUTH_READINESS,
50
+ EXTERNAL_AGENT_CONNECTION_STATES: () => EXTERNAL_AGENT_CONNECTION_STATES,
51
+ EXTERNAL_AGENT_CONTROL_LIMITS: () => EXTERNAL_AGENT_CONTROL_LIMITS,
52
+ EXTERNAL_AGENT_CONTROL_SCHEMA_VERSION: () => EXTERNAL_AGENT_CONTROL_SCHEMA_VERSION,
53
+ EXTERNAL_AGENT_DELIVERY_STATUSES: () => EXTERNAL_AGENT_DELIVERY_STATUSES,
54
+ EXTERNAL_AGENT_ERROR_CODES: () => EXTERNAL_AGENT_ERROR_CODES,
55
+ EXTERNAL_AGENT_ERROR_RECOVERABILITY: () => EXTERNAL_AGENT_ERROR_RECOVERABILITY,
56
+ EXTERNAL_AGENT_ERROR_STAGES: () => EXTERNAL_AGENT_ERROR_STAGES,
57
+ EXTERNAL_AGENT_EXECUTION_STATUSES: () => EXTERNAL_AGENT_EXECUTION_STATUSES,
58
+ EXTERNAL_AGENT_GRANT_STATES: () => EXTERNAL_AGENT_GRANT_STATES,
59
+ EXTERNAL_AGENT_MANAGED_ADAPTER_KINDS: () => EXTERNAL_AGENT_MANAGED_ADAPTER_KINDS,
60
+ EXTERNAL_AGENT_MANAGED_PHASES: () => EXTERNAL_AGENT_MANAGED_PHASES,
61
+ EXTERNAL_AGENT_MANAGED_PROFILE: () => EXTERNAL_AGENT_MANAGED_PROFILE,
62
+ EXTERNAL_AGENT_MODES: () => EXTERNAL_AGENT_MODES,
63
+ EXTERNAL_AGENT_VALIDATION_OUTCOMES: () => EXTERNAL_AGENT_VALIDATION_OUTCOMES,
64
+ EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS: () => EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS,
65
+ EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES: () => EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES,
66
+ EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION: () => EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION,
67
+ EXTERNAL_HANDOFF_DISPATCH_PHASES: () => EXTERNAL_HANDOFF_DISPATCH_PHASES,
68
+ EXTERNAL_HANDOFF_FRAMEWORKS: () => EXTERNAL_HANDOFF_FRAMEWORKS,
69
+ EXTERNAL_HANDOFF_LIMITS: () => EXTERNAL_HANDOFF_LIMITS,
70
+ EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES: () => EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES,
71
+ EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION: () => EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION,
72
+ EXTERNAL_HANDOFF_STATES: () => EXTERNAL_HANDOFF_STATES,
47
73
  MAX_ANNOTATION_INSTRUCTION_CHARACTERS: () => MAX_ANNOTATION_INSTRUCTION_CHARACTERS,
48
74
  MAX_ANNOTATION_TARGETS: () => MAX_ANNOTATION_TARGETS,
49
75
  MAX_TARGET_INSTRUCTION_CHARACTERS: () => MAX_TARGET_INSTRUCTION_CHARACTERS,
@@ -58,6 +84,7 @@ __export(index_exports, {
58
84
  SPOTPATCH_REPOSITORY_URL: () => SPOTPATCH_REPOSITORY_URL,
59
85
  SPOTPATCH_TOKEN_HEADER: () => SPOTPATCH_TOKEN_HEADER,
60
86
  SpotPatchError: () => SpotPatchError,
87
+ activeAdapterSummarySchema: () => activeAdapterSummarySchema,
61
88
  agentCapabilityRequestSchema: () => agentCapabilityRequestSchema,
62
89
  agentCapabilitySnapshotSchema: () => agentCapabilitySnapshotSchema,
63
90
  agentChangedFileSchema: () => agentChangedFileSchema,
@@ -74,10 +101,37 @@ __export(index_exports, {
74
101
  dataDependencySchema: () => dataDependencySchema,
75
102
  dataFlowComponentReportRequestSchema: () => dataFlowComponentReportRequestSchema,
76
103
  dataFlowPageReportRequestSchema: () => dataFlowPageReportRequestSchema,
104
+ dispatchSummarySchema: () => dispatchSummarySchema,
105
+ externalAgentControlCancelRequestSchema: () => externalAgentControlCancelRequestSchema,
106
+ externalAgentControlConnectRequestSchema: () => externalAgentControlConnectRequestSchema,
107
+ externalAgentControlDisconnectRequestSchema: () => externalAgentControlDisconnectRequestSchema,
108
+ externalAgentControlStatusRequestSchema: () => externalAgentControlStatusRequestSchema,
109
+ externalAgentControlStatusSchema: () => externalAgentControlStatusSchema,
110
+ externalAgentErrorSchema: () => externalAgentErrorSchema,
111
+ externalAgentEventSchema: () => externalAgentEventSchema,
112
+ externalAgentEventsRequestSchema: () => externalAgentEventsRequestSchema,
113
+ externalAgentManagedResultSchema: () => externalAgentManagedResultSchema,
114
+ externalAgentResultRequestSchema: () => externalAgentResultRequestSchema,
115
+ externalHandoffCapabilityRequestSchema: () => externalHandoffCapabilityRequestSchema,
116
+ externalHandoffCapabilitySchema: () => externalHandoffCapabilitySchema,
117
+ externalHandoffPublishDeliverySchema: () => externalHandoffPublishDeliverySchema,
118
+ externalHandoffPublishRequestSchema: () => externalHandoffPublishRequestSchema,
119
+ externalHandoffPublishResultSchema: () => externalHandoffPublishResultSchema,
120
+ externalHandoffReportableDispatchPhaseSchema: () => externalHandoffReportableDispatchPhaseSchema,
121
+ externalHandoffResolveDeliveryRequestSchema: () => externalHandoffResolveDeliveryRequestSchema,
122
+ externalHandoffSnapshotSchema: () => externalHandoffSnapshotSchema,
123
+ externalHandoffStatusRequestSchema: () => externalHandoffStatusRequestSchema,
124
+ externalHandoffStatusResultSchema: () => externalHandoffStatusResultSchema,
125
+ externalHandoffSummarySchema: () => externalHandoffSummarySchema,
77
126
  formatSourceMarker: () => formatSourceMarker,
78
127
  getAgentJobEndpoint: () => getAgentJobEndpoint,
128
+ isErrorCode: () => isErrorCode,
79
129
  isSensitiveName: () => isSensitiveName,
80
130
  limitDataFlowReportCollections: () => limitDataFlowReportCollections,
131
+ managedCheckSummarySchema: () => managedCheckSummarySchema,
132
+ managedFileSummarySchema: () => managedFileSummarySchema,
133
+ managedTaskStatusSchema: () => managedTaskStatusSchema,
134
+ managedTimingSummarySchema: () => managedTimingSummarySchema,
81
135
  networkObservationSchema: () => networkObservationSchema,
82
136
  openEditorRequestSchema: () => openEditorRequestSchema,
83
137
  pageDataFlowReportSchema: () => pageDataFlowReportSchema,
@@ -125,6 +179,24 @@ var ERROR_CODES = {
125
179
  AGENT_BUSY: "AGENT_BUSY",
126
180
  AGENT_LIMIT_EXCEEDED: "AGENT_LIMIT_EXCEEDED",
127
181
  AGENT_CANCELLED: "AGENT_CANCELLED",
182
+ EXTERNAL_HANDOFF_DISABLED: "EXTERNAL_HANDOFF_DISABLED",
183
+ EXTERNAL_HANDOFF_UNAVAILABLE: "EXTERNAL_HANDOFF_UNAVAILABLE",
184
+ HANDOFF_VALIDATION_FAILED: "HANDOFF_VALIDATION_FAILED",
185
+ HANDOFF_SOURCE_STALE: "HANDOFF_SOURCE_STALE",
186
+ HANDOFF_NOT_FOUND: "HANDOFF_NOT_FOUND",
187
+ HANDOFF_EXPIRED: "HANDOFF_EXPIRED",
188
+ HANDOFF_CURSOR_INVALID: "HANDOFF_CURSOR_INVALID",
189
+ HANDOFF_RESPONSE_TOO_LARGE: "HANDOFF_RESPONSE_TOO_LARGE",
190
+ BRIDGE_UNAUTHORIZED: "BRIDGE_UNAUTHORIZED",
191
+ BRIDGE_PROTOCOL_MISMATCH: "BRIDGE_PROTOCOL_MISMATCH",
192
+ BRIDGE_BUSY: "BRIDGE_BUSY",
193
+ EXTERNAL_AGENT_BUSY: "EXTERNAL_AGENT_BUSY",
194
+ ACTIVE_ADAPTER_CONFLICT: "ACTIVE_ADAPTER_CONFLICT",
195
+ ACTIVE_ADAPTER_LEASE_INVALID: "ACTIVE_ADAPTER_LEASE_INVALID",
196
+ ACTIVE_DISPATCH_INVALID: "ACTIVE_DISPATCH_INVALID",
197
+ SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
198
+ SESSION_AMBIGUOUS: "SESSION_AMBIGUOUS",
199
+ SESSION_CLOSED: "SESSION_CLOSED",
128
200
  WORKTREE_DIRTY: "WORKTREE_DIRTY",
129
201
  WORKTREE_NOT_REPOSITORY: "WORKTREE_NOT_REPOSITORY",
130
202
  WORKTREE_OPERATION_IN_PROGRESS: "WORKTREE_OPERATION_IN_PROGRESS",
@@ -142,6 +214,10 @@ var ERROR_CODES = {
142
214
  APPLY_CONFLICT: "APPLY_CONFLICT",
143
215
  INTERNAL_ERROR: "INTERNAL_ERROR"
144
216
  };
217
+ var ERROR_CODE_VALUES = Object.freeze(Object.values(ERROR_CODES));
218
+ function isErrorCode(value) {
219
+ return typeof value === "string" && ERROR_CODE_VALUES.includes(value);
220
+ }
145
221
 
146
222
  // src/security/redaction.ts
147
223
  var INLINE_DATA_PATTERN = /data:[^\s"'<>]*;base64,[a-z0-9+/_=-]+/giu;
@@ -712,7 +788,17 @@ var SPOTPATCH_ENDPOINTS = Object.freeze({
712
788
  dataFlowPageReport: `${SPOTPATCH_API_BASE}/data-flow/page-report`,
713
789
  agentCapability: `${SPOTPATCH_API_BASE}/agent/capability`,
714
790
  agentWorkspaceHealth: `${SPOTPATCH_API_BASE}/agent/workspace-health`,
715
- agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`
791
+ agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`,
792
+ externalHandoffCapability: `${SPOTPATCH_API_BASE}/external-handoff/capability`,
793
+ externalHandoffPublish: `${SPOTPATCH_API_BASE}/external-handoff/publish`,
794
+ externalHandoffStatus: `${SPOTPATCH_API_BASE}/external-handoff/status`,
795
+ externalHandoffResolveDelivery: `${SPOTPATCH_API_BASE}/external-handoff/resolve-delivery`,
796
+ externalAgentControlStatus: `${SPOTPATCH_API_BASE}/external-agent/control/status`,
797
+ externalAgentControlConnect: `${SPOTPATCH_API_BASE}/external-agent/control/connect`,
798
+ externalAgentControlDisconnect: `${SPOTPATCH_API_BASE}/external-agent/control/disconnect`,
799
+ externalAgentControlCancel: `${SPOTPATCH_API_BASE}/external-agent/control/cancel`,
800
+ externalAgentEvents: `${SPOTPATCH_API_BASE}/external-agent/events`,
801
+ externalAgentResult: `${SPOTPATCH_API_BASE}/external-agent/result`
716
802
  });
717
803
  function getAgentJobEndpoint(jobId, action) {
718
804
  return `${SPOTPATCH_ENDPOINTS.agentJobs}/${encodeURIComponent(jobId)}/${action}`;
@@ -834,6 +920,7 @@ var runtimeConfigBaseShape = {
834
920
  debug: import_zod2.z.boolean(),
835
921
  dataFlow: runtimeDataFlowConfigSchema,
836
922
  editor: import_zod2.z.enum(SPOTPATCH_EDITOR_PREFERENCES),
923
+ externalAgent: import_zod2.z.strictObject({ enabled: import_zod2.z.boolean() }),
837
924
  frameworkVersion: boundedText2(64),
838
925
  locale: import_zod2.z.enum(SPOTPATCH_LOCALE_PREFERENCES),
839
926
  maxTargets: import_zod2.z.number().int().min(1).max(MAX_ANNOTATION_TARGETS),
@@ -879,110 +966,345 @@ function parseSourceMarker(value) {
879
966
  return Object.freeze({ fileId, line, column });
880
967
  }
881
968
 
882
- // src/protocol/requests.ts
969
+ // src/protocol/external-agent-control.ts
883
970
  var import_zod3 = require("zod");
884
- var runtimeBootstrapRequestSchema = import_zod3.z.strictObject({});
885
- var sourceCoordinatesSchema = import_zod3.z.strictObject({
886
- fileId: import_zod3.z.string().min(1).max(128),
887
- line: import_zod3.z.number().int().positive(),
888
- column: import_zod3.z.number().int().positive()
971
+ var EXTERNAL_AGENT_CONTROL_SCHEMA_VERSION = 1;
972
+ var EXTERNAL_AGENT_MANAGED_ADAPTER_KINDS = Object.freeze(["codex"]);
973
+ var EXTERNAL_AGENT_MODES = Object.freeze(["inbox", "managed"]);
974
+ var EXTERNAL_AGENT_CONNECTION_STATES = Object.freeze([
975
+ "disconnected",
976
+ "diagnosing",
977
+ "awaiting-consent",
978
+ "connecting",
979
+ "ready",
980
+ "busy",
981
+ "degraded",
982
+ "error",
983
+ "disconnecting"
984
+ ]);
985
+ var EXTERNAL_AGENT_AUTH_READINESS = Object.freeze([
986
+ "authenticated",
987
+ "auth-not-required",
988
+ "signed-out",
989
+ "unknown"
990
+ ]);
991
+ var EXTERNAL_AGENT_GRANT_STATES = Object.freeze([
992
+ "missing",
993
+ "valid",
994
+ "invalid"
995
+ ]);
996
+ var EXTERNAL_AGENT_DELIVERY_STATUSES = Object.freeze([
997
+ "queued",
998
+ "dispatching",
999
+ "accepted",
1000
+ "unknown"
1001
+ ]);
1002
+ var EXTERNAL_AGENT_EXECUTION_STATUSES = Object.freeze([
1003
+ "not-observable",
1004
+ "started",
1005
+ "terminal-succeeded",
1006
+ "terminal-failed",
1007
+ "interrupted",
1008
+ "unknown"
1009
+ ]);
1010
+ var EXTERNAL_AGENT_MANAGED_PHASES = Object.freeze([
1011
+ "preparing",
1012
+ "running",
1013
+ "auditing",
1014
+ "validating",
1015
+ "applying",
1016
+ "completed",
1017
+ "review-required",
1018
+ "failed",
1019
+ "cancelled",
1020
+ "cleanup-warning"
1021
+ ]);
1022
+ var EXTERNAL_AGENT_VALIDATION_OUTCOMES = Object.freeze([
1023
+ "passed",
1024
+ "failed",
1025
+ "not-configured",
1026
+ "unavailable"
1027
+ ]);
1028
+ var EXTERNAL_AGENT_CHECK_OUTCOMES = Object.freeze([
1029
+ "passed",
1030
+ "failed",
1031
+ "unavailable"
1032
+ ]);
1033
+ var EXTERNAL_AGENT_ERROR_STAGES = Object.freeze([
1034
+ "integration",
1035
+ "binary",
1036
+ "handshake",
1037
+ "auth",
1038
+ "model",
1039
+ "protocol",
1040
+ "snapshot",
1041
+ "audit",
1042
+ "validation",
1043
+ "apply",
1044
+ "cleanup"
1045
+ ]);
1046
+ var EXTERNAL_AGENT_ERROR_RECOVERABILITY = Object.freeze([
1047
+ "retry",
1048
+ "user-action",
1049
+ "reconfigure",
1050
+ "none"
1051
+ ]);
1052
+ var EXTERNAL_AGENT_ERROR_CODES = Object.freeze([
1053
+ "AGENT_BINARY_NOT_FOUND",
1054
+ "AGENT_BINARY_UNTRUSTED",
1055
+ "AGENT_VERSION_UNSUPPORTED",
1056
+ "APP_SERVER_HANDSHAKE_FAILED",
1057
+ "AGENT_AUTH_REQUIRED",
1058
+ "AGENT_MODEL_UNAVAILABLE",
1059
+ "AGENT_PROTOCOL_INCOMPATIBLE",
1060
+ "CODEX_CONFIG_ISOLATION_UNSUPPORTED",
1061
+ "MANAGED_GRANT_INVALID",
1062
+ "MANAGED_PLATFORM_UNSUPPORTED",
1063
+ "MANAGED_GIT_REQUIRED",
1064
+ "MANAGED_SNAPSHOT_FAILED",
1065
+ "MANAGED_SCOPE_VIOLATION",
1066
+ "MANAGED_CHANGE_LIMIT_EXCEEDED",
1067
+ "MANAGED_VALIDATION_FAILED",
1068
+ "MANAGED_WORKSPACE_CONFLICT",
1069
+ "MANAGED_APPLY_FAILED",
1070
+ "MANAGED_CLEANUP_INCOMPLETE"
1071
+ ]);
1072
+ var EXTERNAL_AGENT_ACTIONS = Object.freeze([
1073
+ "install-agent",
1074
+ "use-supported-version",
1075
+ "sign-in",
1076
+ "choose-available-model",
1077
+ "use-inbox",
1078
+ "confirm-managed-access",
1079
+ "review-candidate-diff",
1080
+ "review-workspace-conflict",
1081
+ "retry",
1082
+ "inspect-cleanup-warning"
1083
+ ]);
1084
+ var EXTERNAL_AGENT_MANAGED_PROFILE = "managed-apply-v1";
1085
+ var EXTERNAL_AGENT_CONTROL_LIMITS = Object.freeze({
1086
+ maximumEventSubscribers: 4,
1087
+ eventHeartbeatMs: 15e3,
1088
+ eventReconnectMinimumMs: 500,
1089
+ eventReconnectMaximumMs: 1e4,
1090
+ maximumChangedFiles: DEFAULT_AGENT_LIMITS.maxChangedFiles,
1091
+ maximumChecks: 64,
1092
+ maximumEventLineBytes: 64 * 1024,
1093
+ maximumResultDiffBytes: DEFAULT_AGENT_LIMITS.maxDiffBytes
1094
+ });
1095
+ var isoTimestampSchema = import_zod3.z.iso.datetime();
1096
+ var requestIdSchema = import_zod3.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/u);
1097
+ var safeRelativePathSchema = import_zod3.z.string().min(1).max(4096).superRefine((value, context) => {
1098
+ const segments = value.split("/");
1099
+ if (value.startsWith("/") || value.includes("\\") || segments.some(
1100
+ (segment) => segment.length === 0 || segment === "." || segment === ".."
1101
+ )) {
1102
+ context.addIssue({ code: "custom", message: "Expected a safe relative path." });
1103
+ }
1104
+ });
1105
+ var externalAgentErrorSchema = import_zod3.z.strictObject({
1106
+ code: import_zod3.z.enum(EXTERNAL_AGENT_ERROR_CODES),
1107
+ stage: import_zod3.z.enum(EXTERNAL_AGENT_ERROR_STAGES),
1108
+ recoverability: import_zod3.z.enum(EXTERNAL_AGENT_ERROR_RECOVERABILITY),
1109
+ action: import_zod3.z.enum(EXTERNAL_AGENT_ACTIONS)
1110
+ });
1111
+ var managedFileSummarySchema = import_zod3.z.strictObject({
1112
+ path: safeRelativePathSchema,
1113
+ additions: import_zod3.z.number().int().nonnegative(),
1114
+ deletions: import_zod3.z.number().int().nonnegative()
1115
+ });
1116
+ var managedCheckSummarySchema = import_zod3.z.strictObject({
1117
+ id: import_zod3.z.string().min(1).max(128).regex(/^[A-Za-z0-9._-]+$/u),
1118
+ outcome: import_zod3.z.enum(EXTERNAL_AGENT_CHECK_OUTCOMES),
1119
+ durationMs: import_zod3.z.number().int().nonnegative(),
1120
+ exitCode: import_zod3.z.number().int().optional()
1121
+ });
1122
+ var managedTimingSummarySchema = import_zod3.z.strictObject({
1123
+ preparing: import_zod3.z.number().int().nonnegative().optional(),
1124
+ agent: import_zod3.z.number().int().nonnegative().optional(),
1125
+ auditing: import_zod3.z.number().int().nonnegative().optional(),
1126
+ validating: import_zod3.z.number().int().nonnegative().optional(),
1127
+ applying: import_zod3.z.number().int().nonnegative().optional(),
1128
+ total: import_zod3.z.number().int().nonnegative().optional()
1129
+ });
1130
+ var managedTaskStatusSchema = import_zod3.z.strictObject({
1131
+ revision: import_zod3.z.number().int().positive(),
1132
+ deliveryStatus: import_zod3.z.enum(EXTERNAL_AGENT_DELIVERY_STATUSES),
1133
+ executionStatus: import_zod3.z.enum(EXTERNAL_AGENT_EXECUTION_STATUSES),
1134
+ managedPhase: import_zod3.z.enum(EXTERNAL_AGENT_MANAGED_PHASES),
1135
+ validationOutcome: import_zod3.z.enum(EXTERNAL_AGENT_VALIDATION_OUTCOMES).optional(),
1136
+ files: import_zod3.z.array(managedFileSummarySchema).max(EXTERNAL_AGENT_CONTROL_LIMITS.maximumChangedFiles),
1137
+ checks: import_zod3.z.array(managedCheckSummarySchema).max(EXTERNAL_AGENT_CONTROL_LIMITS.maximumChecks),
1138
+ timings: managedTimingSummarySchema,
1139
+ resultExpiresAt: isoTimestampSchema.optional()
1140
+ });
1141
+ var externalAgentControlStatusSchema = import_zod3.z.strictObject({
1142
+ schemaVersion: import_zod3.z.literal(EXTERNAL_AGENT_CONTROL_SCHEMA_VERSION),
1143
+ sequence: import_zod3.z.number().int().nonnegative(),
1144
+ mode: import_zod3.z.enum(EXTERNAL_AGENT_MODES),
1145
+ adapter: import_zod3.z.strictObject({
1146
+ kind: import_zod3.z.enum(EXTERNAL_AGENT_MANAGED_ADAPTER_KINDS),
1147
+ maturity: import_zod3.z.literal("experimental"),
1148
+ availability: import_zod3.z.enum(["available", "unavailable"])
1149
+ }),
1150
+ connectionState: import_zod3.z.enum(EXTERNAL_AGENT_CONNECTION_STATES),
1151
+ authReadiness: import_zod3.z.enum(EXTERNAL_AGENT_AUTH_READINESS),
1152
+ grantState: import_zod3.z.enum(EXTERNAL_AGENT_GRANT_STATES),
1153
+ requestedModel: import_zod3.z.string().min(1).max(128).optional(),
1154
+ effectiveModel: import_zod3.z.string().min(1).max(128).optional(),
1155
+ task: managedTaskStatusSchema.optional(),
1156
+ error: externalAgentErrorSchema.optional(),
1157
+ updatedAt: isoTimestampSchema
1158
+ });
1159
+ var externalAgentControlStatusRequestSchema = import_zod3.z.strictObject({});
1160
+ var externalAgentControlConnectRequestSchema = import_zod3.z.strictObject({
1161
+ requestId: requestIdSchema,
1162
+ adapterKind: import_zod3.z.literal("codex"),
1163
+ profile: import_zod3.z.literal(EXTERNAL_AGENT_MANAGED_PROFILE)
1164
+ });
1165
+ var externalAgentControlDisconnectRequestSchema = import_zod3.z.strictObject({
1166
+ requestId: requestIdSchema,
1167
+ adapterKind: import_zod3.z.literal("codex"),
1168
+ revokeGrant: import_zod3.z.boolean()
1169
+ });
1170
+ var externalAgentControlCancelRequestSchema = import_zod3.z.strictObject({
1171
+ requestId: requestIdSchema,
1172
+ revision: import_zod3.z.number().int().positive()
1173
+ });
1174
+ var externalAgentEventsRequestSchema = import_zod3.z.strictObject({
1175
+ afterSequence: import_zod3.z.number().int().nonnegative().optional()
1176
+ });
1177
+ var externalAgentEventSchema = import_zod3.z.discriminatedUnion("type", [
1178
+ import_zod3.z.strictObject({
1179
+ type: import_zod3.z.literal("status"),
1180
+ data: externalAgentControlStatusSchema
1181
+ }),
1182
+ import_zod3.z.strictObject({
1183
+ type: import_zod3.z.literal("heartbeat"),
1184
+ sequence: import_zod3.z.number().int().nonnegative(),
1185
+ emittedAt: isoTimestampSchema
1186
+ })
1187
+ ]);
1188
+ var externalAgentResultRequestSchema = import_zod3.z.strictObject({
1189
+ revision: import_zod3.z.number().int().positive()
1190
+ });
1191
+ var externalAgentManagedResultSchema = import_zod3.z.strictObject({
1192
+ revision: import_zod3.z.number().int().positive(),
1193
+ diff: import_zod3.z.string().max(EXTERNAL_AGENT_CONTROL_LIMITS.maximumResultDiffBytes),
1194
+ files: import_zod3.z.array(managedFileSummarySchema).max(EXTERNAL_AGENT_CONTROL_LIMITS.maximumChangedFiles),
1195
+ checks: import_zod3.z.array(managedCheckSummarySchema).max(EXTERNAL_AGENT_CONTROL_LIMITS.maximumChecks),
1196
+ timings: managedTimingSummarySchema,
1197
+ validationOutcome: import_zod3.z.enum(EXTERNAL_AGENT_VALIDATION_OUTCOMES),
1198
+ expiresAt: isoTimestampSchema
1199
+ });
1200
+
1201
+ // src/protocol/external-handoff.ts
1202
+ var import_zod5 = require("zod");
1203
+
1204
+ // src/protocol/requests.ts
1205
+ var import_zod4 = require("zod");
1206
+ var runtimeBootstrapRequestSchema = import_zod4.z.strictObject({});
1207
+ var sourceCoordinatesSchema = import_zod4.z.strictObject({
1208
+ fileId: import_zod4.z.string().min(1).max(128),
1209
+ line: import_zod4.z.number().int().positive(),
1210
+ column: import_zod4.z.number().int().positive()
889
1211
  });
890
1212
  var sourceContextRequestSchema = sourceCoordinatesSchema.extend({
891
- maxLines: import_zod3.z.number().int().positive()
1213
+ maxLines: import_zod4.z.number().int().positive()
892
1214
  }).strict();
893
1215
  var openEditorRequestSchema = sourceCoordinatesSchema.strict();
894
1216
  var dataFlowSourceCoordinatesRequestSchema = sourceCoordinatesSchema.extend({
895
- schemaVersion: import_zod3.z.literal(1),
896
- sourceVersion: import_zod3.z.string().min(1).max(128).optional()
1217
+ schemaVersion: import_zod4.z.literal(1),
1218
+ sourceVersion: import_zod4.z.string().min(1).max(128).optional()
897
1219
  }).strict();
898
- var dataFlowComponentIdentityRequestSchema = import_zod3.z.strictObject({
899
- schemaVersion: import_zod3.z.literal(1),
900
- componentSourceId: import_zod3.z.string().min(1).max(128),
901
- sourceVersion: import_zod3.z.string().min(1).max(128)
1220
+ var dataFlowComponentIdentityRequestSchema = import_zod4.z.strictObject({
1221
+ schemaVersion: import_zod4.z.literal(1),
1222
+ componentSourceId: import_zod4.z.string().min(1).max(128),
1223
+ sourceVersion: import_zod4.z.string().min(1).max(128)
902
1224
  });
903
- var dataFlowComponentReportRequestSchema = import_zod3.z.union([
1225
+ var dataFlowComponentReportRequestSchema = import_zod4.z.union([
904
1226
  dataFlowSourceCoordinatesRequestSchema,
905
1227
  dataFlowComponentIdentityRequestSchema
906
1228
  ]);
907
- var dataFlowPageReportRequestSchema = import_zod3.z.strictObject({
908
- schemaVersion: import_zod3.z.literal(1),
909
- targets: import_zod3.z.array(dataFlowComponentReportRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS)
1229
+ var dataFlowPageReportRequestSchema = import_zod4.z.strictObject({
1230
+ schemaVersion: import_zod4.z.literal(1),
1231
+ targets: import_zod4.z.array(dataFlowComponentReportRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS)
910
1232
  });
911
- var profileIdSchema2 = import_zod3.z.string().min(1).max(64).regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);
912
- var boundedString = (maximum) => import_zod3.z.string().max(maximum);
913
- var sourceRefSchema = import_zod3.z.strictObject({
1233
+ var profileIdSchema2 = import_zod4.z.string().min(1).max(64).regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);
1234
+ var boundedString = (maximum) => import_zod4.z.string().max(maximum);
1235
+ var sourceRefSchema = import_zod4.z.strictObject({
914
1236
  fileId: boundedString(128).optional(),
915
1237
  relativePath: boundedString(1024).optional(),
916
- line: import_zod3.z.number().int().positive().optional(),
917
- column: import_zod3.z.number().int().positive().optional(),
918
- origin: import_zod3.z.enum(["jsx-host", "react-fiber", "dom-ancestor", "none"]),
919
- confidence: import_zod3.z.enum(["exact", "probable", "approximate", "unknown"])
1238
+ line: import_zod4.z.number().int().positive().optional(),
1239
+ column: import_zod4.z.number().int().positive().optional(),
1240
+ origin: import_zod4.z.enum(["jsx-host", "react-fiber", "dom-ancestor", "none"]),
1241
+ confidence: import_zod4.z.enum(["exact", "probable", "approximate", "unknown"])
920
1242
  });
921
- var matchedStyleRuleSchema = import_zod3.z.strictObject({
1243
+ var matchedStyleRuleSchema = import_zod4.z.strictObject({
922
1244
  selector: boundedString(2048),
923
1245
  declarations: boundedString(8192),
924
1246
  source: boundedString(1024).optional(),
925
1247
  media: boundedString(1024).optional()
926
1248
  });
927
- var codeContextSchema = import_zod3.z.strictObject({
1249
+ var codeContextSchema = import_zod4.z.strictObject({
928
1250
  relativePath: boundedString(1024),
929
- language: import_zod3.z.enum(["tsx", "jsx"]),
930
- startLine: import_zod3.z.number().int().positive(),
931
- endLine: import_zod3.z.number().int().positive(),
1251
+ language: import_zod4.z.enum(["tsx", "jsx"]),
1252
+ startLine: import_zod4.z.number().int().positive(),
1253
+ endLine: import_zod4.z.number().int().positive(),
932
1254
  excerpt: boundedString(16e3),
933
- boundary: import_zod3.z.enum(["component", "nearby-lines"])
1255
+ boundary: import_zod4.z.enum(["component", "nearby-lines"])
934
1256
  });
935
- var pageContextSchema = import_zod3.z.strictObject({
1257
+ var pageContextSchema = import_zod4.z.strictObject({
936
1258
  url: boundedString(2048),
937
1259
  pathname: boundedString(2048),
938
1260
  title: boundedString(1024),
939
- viewportWidth: import_zod3.z.number().nonnegative(),
940
- viewportHeight: import_zod3.z.number().nonnegative(),
941
- devicePixelRatio: import_zod3.z.number().positive()
1261
+ viewportWidth: import_zod4.z.number().nonnegative(),
1262
+ viewportHeight: import_zod4.z.number().nonnegative(),
1263
+ devicePixelRatio: import_zod4.z.number().positive()
942
1264
  });
943
- var spotTargetContextRequestSchema = import_zod3.z.strictObject({
944
- instruction: import_zod3.z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),
1265
+ var spotTargetContextRequestSchema = import_zod4.z.strictObject({
1266
+ instruction: import_zod4.z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),
945
1267
  page: pageContextSchema.optional(),
946
1268
  source: sourceRefSchema,
947
- react: import_zod3.z.strictObject({
948
- supported: import_zod3.z.boolean(),
1269
+ react: import_zod4.z.strictObject({
1270
+ supported: import_zod4.z.boolean(),
949
1271
  version: boundedString(64).optional(),
950
1272
  componentName: boundedString(256).optional(),
951
1273
  componentSourceId: boundedString(128).optional(),
952
1274
  sourceVersion: boundedString(128).optional(),
953
- componentStack: import_zod3.z.array(boundedString(256)).max(64),
1275
+ componentStack: import_zod4.z.array(boundedString(256)).max(64),
954
1276
  source: sourceRefSchema.optional()
955
1277
  }),
956
- element: import_zod3.z.strictObject({
1278
+ element: import_zod4.z.strictObject({
957
1279
  tagName: boundedString(128),
958
1280
  selector: boundedString(2048),
959
1281
  sanitizedHtml: boundedString(8192),
960
1282
  textPreview: boundedString(2048).optional(),
961
1283
  role: boundedString(256).optional(),
962
- rect: import_zod3.z.strictObject({
963
- x: import_zod3.z.number(),
964
- y: import_zod3.z.number(),
965
- width: import_zod3.z.number().nonnegative(),
966
- height: import_zod3.z.number().nonnegative()
1284
+ rect: import_zod4.z.strictObject({
1285
+ x: import_zod4.z.number(),
1286
+ y: import_zod4.z.number(),
1287
+ width: import_zod4.z.number().nonnegative(),
1288
+ height: import_zod4.z.number().nonnegative()
967
1289
  })
968
1290
  }),
969
- styles: import_zod3.z.strictObject({
970
- classNames: import_zod3.z.array(boundedString(512)).max(256),
1291
+ styles: import_zod4.z.strictObject({
1292
+ classNames: import_zod4.z.array(boundedString(512)).max(256),
971
1293
  inlineStyle: boundedString(8192).optional(),
972
- matchedRules: import_zod3.z.array(matchedStyleRuleSchema).max(256),
973
- computed: import_zod3.z.record(boundedString(256), boundedString(2048)),
974
- warnings: import_zod3.z.array(boundedString(1024)).max(64)
1294
+ matchedRules: import_zod4.z.array(matchedStyleRuleSchema).max(256),
1295
+ computed: import_zod4.z.record(boundedString(256), boundedString(2048)),
1296
+ warnings: import_zod4.z.array(boundedString(1024)).max(64)
975
1297
  }),
976
1298
  code: codeContextSchema.optional(),
977
- warnings: import_zod3.z.array(boundedString(1024)).max(64)
1299
+ warnings: import_zod4.z.array(boundedString(1024)).max(64)
978
1300
  });
979
- var spotAnnotationRequestSchema = import_zod3.z.strictObject({
980
- schemaVersion: import_zod3.z.literal(3),
1301
+ var spotAnnotationRequestSchema = import_zod4.z.strictObject({
1302
+ schemaVersion: import_zod4.z.literal(3),
981
1303
  id: boundedString(128),
982
- locale: import_zod3.z.enum(SPOTPATCH_LOCALES),
1304
+ locale: import_zod4.z.enum(SPOTPATCH_LOCALES),
983
1305
  page: pageContextSchema,
984
- targets: import_zod3.z.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),
985
- createdAt: import_zod3.z.iso.datetime()
1306
+ targets: import_zod4.z.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),
1307
+ createdAt: import_zod4.z.iso.datetime()
986
1308
  }).superRefine((annotation, context) => {
987
1309
  const total = annotation.targets.reduce(
988
1310
  (characters, target) => characters + target.instruction.length,
@@ -996,53 +1318,212 @@ var spotAnnotationRequestSchema = import_zod3.z.strictObject({
996
1318
  });
997
1319
  }
998
1320
  });
999
- var agentCapabilityRequestSchema = import_zod3.z.strictObject({
1321
+ var agentCapabilityRequestSchema = import_zod4.z.strictObject({
1000
1322
  providerProfileId: profileIdSchema2,
1001
1323
  modelProfileId: profileIdSchema2
1002
1324
  });
1003
- var agentWorkspaceHealthRequestSchema = import_zod3.z.strictObject({});
1004
- var agentJobCreateRequestSchema = import_zod3.z.strictObject({
1325
+ var agentWorkspaceHealthRequestSchema = import_zod4.z.strictObject({});
1326
+ var agentJobCreateRequestSchema = import_zod4.z.strictObject({
1005
1327
  annotation: spotAnnotationRequestSchema,
1006
- applyMode: import_zod3.z.enum(AGENT_APPLY_MODES).optional(),
1328
+ applyMode: import_zod4.z.enum(AGENT_APPLY_MODES).optional(),
1007
1329
  providerProfileId: profileIdSchema2,
1008
1330
  modelProfileId: profileIdSchema2,
1009
- providerDataConsent: import_zod3.z.literal(true),
1010
- trustedFastModeConsent: import_zod3.z.literal(true).optional(),
1011
- workingTreeMode: import_zod3.z.enum(["require-clean", "include-local-changes"]).default("require-clean")
1331
+ providerDataConsent: import_zod4.z.literal(true),
1332
+ trustedFastModeConsent: import_zod4.z.literal(true).optional(),
1333
+ workingTreeMode: import_zod4.z.enum(["require-clean", "include-local-changes"]).default("require-clean")
1334
+ });
1335
+ var agentJobActionRequestSchema = import_zod4.z.strictObject({});
1336
+
1337
+ // src/protocol/external-handoff-constants.ts
1338
+ var EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION = 1;
1339
+ var EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION = 2;
1340
+ var EXTERNAL_HANDOFF_STATES = Object.freeze([
1341
+ "available",
1342
+ "expired",
1343
+ "superseded"
1344
+ ]);
1345
+ var EXTERNAL_HANDOFF_FRAMEWORKS = Object.freeze(["vite", "next"]);
1346
+ var EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS = Object.freeze([
1347
+ "claude-channel",
1348
+ "codex-app-server"
1349
+ ]);
1350
+ var EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES = Object.freeze([
1351
+ "ready",
1352
+ "busy",
1353
+ "blocked"
1354
+ ]);
1355
+ var EXTERNAL_HANDOFF_DISPATCH_PHASES = Object.freeze([
1356
+ "queued",
1357
+ "dispatching",
1358
+ "dispatched",
1359
+ "working",
1360
+ "completed",
1361
+ "failed",
1362
+ "delivery-unknown"
1363
+ ]);
1364
+ var EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES = Object.freeze([
1365
+ "dispatching",
1366
+ "dispatched",
1367
+ "working",
1368
+ "completed",
1369
+ "failed",
1370
+ "delivery-unknown"
1371
+ ]);
1372
+ var EXTERNAL_HANDOFF_LIMITS = Object.freeze({
1373
+ maximumSnapshotBytes: 256 * 1024,
1374
+ maximumPublishBodyBytes: 256 * 1024,
1375
+ maximumBrokerRequestBytes: 8 * 1024,
1376
+ maximumDescriptorBytes: 8 * 1024,
1377
+ maximumHistorySummaries: 8,
1378
+ maximumConnectorReceipts: 64,
1379
+ handoffTtlMs: 15 * 60 * 1e3,
1380
+ defaultWaitMs: 2e4,
1381
+ maximumWaitMs: 25e3,
1382
+ maximumWaiters: 8,
1383
+ maximumDescriptorsPerScan: 32,
1384
+ maximumProjectAncestors: 64,
1385
+ maximumBrokerHeaderBytes: 8 * 1024,
1386
+ maximumBrokerSockets: 32,
1387
+ brokerDiscoveryTimeoutMs: 750,
1388
+ brokerRequestTimeoutMs: 2e3,
1389
+ brokerWaitGraceMs: 2e3,
1390
+ maximumSetupConfigBytes: 1024 * 1024,
1391
+ maximumRequestIdRecords: 16,
1392
+ requestIdTtlMs: 15 * 60 * 1e3,
1393
+ activeHeartbeatIntervalMs: 3e3,
1394
+ activeLeaseDurationMs: 1e4,
1395
+ activeTransportWriteTimeoutMs: 5e3,
1396
+ activeDispatchTimeoutMs: 30 * 60 * 1e3,
1397
+ activeStatusPollMs: 1e3
1398
+ });
1399
+
1400
+ // src/protocol/external-handoff.ts
1401
+ var opaqueIdSchema2 = import_zod5.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/u);
1402
+ var isoTimestampSchema2 = import_zod5.z.iso.datetime();
1403
+ var externalHandoffReportableDispatchPhaseSchema = import_zod5.z.enum(
1404
+ EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES
1405
+ );
1406
+ var externalHandoffPageSummarySchema = import_zod5.z.strictObject({
1407
+ origin: import_zod5.z.string().min(1).max(2048),
1408
+ pathname: import_zod5.z.string().min(1).max(2048)
1409
+ });
1410
+ var externalHandoffSummarySchema = import_zod5.z.strictObject({
1411
+ sessionId: opaqueIdSchema2,
1412
+ framework: import_zod5.z.enum(EXTERNAL_HANDOFF_FRAMEWORKS),
1413
+ revision: import_zod5.z.number().int().positive(),
1414
+ cursor: opaqueIdSchema2,
1415
+ targetCount: import_zod5.z.number().int().positive(),
1416
+ page: externalHandoffPageSummarySchema,
1417
+ publishedAt: isoTimestampSchema2,
1418
+ expiresAt: isoTimestampSchema2,
1419
+ state: import_zod5.z.enum(EXTERNAL_HANDOFF_STATES),
1420
+ pickupCount: import_zod5.z.number().int().nonnegative().max(EXTERNAL_HANDOFF_LIMITS.maximumConnectorReceipts),
1421
+ pickedUpAt: isoTimestampSchema2.optional()
1422
+ });
1423
+ var externalHandoffSnapshotSchema = import_zod5.z.strictObject({
1424
+ schemaVersion: import_zod5.z.literal(EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION),
1425
+ cursor: opaqueIdSchema2,
1426
+ session: import_zod5.z.strictObject({
1427
+ id: opaqueIdSchema2,
1428
+ framework: import_zod5.z.enum(EXTERNAL_HANDOFF_FRAMEWORKS)
1429
+ }),
1430
+ revision: import_zod5.z.number().int().positive(),
1431
+ publishedAt: isoTimestampSchema2,
1432
+ expiresAt: isoTimestampSchema2,
1433
+ annotation: spotAnnotationRequestSchema
1434
+ });
1435
+ var activeAdapterSummarySchema = import_zod5.z.strictObject({
1436
+ kind: import_zod5.z.enum(EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS),
1437
+ state: import_zod5.z.enum(EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES),
1438
+ canDispatch: import_zod5.z.boolean(),
1439
+ connectedAt: isoTimestampSchema2,
1440
+ updatedAt: isoTimestampSchema2
1441
+ }).superRefine((value, context) => {
1442
+ if (value.canDispatch !== (value.state === "ready")) {
1443
+ context.addIssue({
1444
+ code: "custom",
1445
+ message: "canDispatch must match the ready state.",
1446
+ path: ["canDispatch"]
1447
+ });
1448
+ }
1449
+ });
1450
+ var dispatchSummarySchema = import_zod5.z.strictObject({
1451
+ adapterKind: import_zod5.z.enum(EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS),
1452
+ revision: import_zod5.z.number().int().positive(),
1453
+ phase: import_zod5.z.enum(EXTERNAL_HANDOFF_DISPATCH_PHASES),
1454
+ updatedAt: isoTimestampSchema2
1455
+ });
1456
+ var externalHandoffCapabilityRequestSchema = import_zod5.z.strictObject({});
1457
+ var externalHandoffPublishRequestSchema = import_zod5.z.strictObject({
1458
+ requestId: opaqueIdSchema2,
1459
+ annotation: spotAnnotationRequestSchema
1460
+ });
1461
+ var externalHandoffStatusRequestSchema = import_zod5.z.strictObject({
1462
+ cursor: opaqueIdSchema2.optional()
1463
+ });
1464
+ var externalHandoffResolveDeliveryRequestSchema = import_zod5.z.strictObject({
1465
+ cursor: opaqueIdSchema2,
1466
+ confirmation: import_zod5.z.literal("workspace-reviewed")
1467
+ });
1468
+ var externalHandoffCapabilitySchema = import_zod5.z.strictObject({
1469
+ enabled: import_zod5.z.literal(true),
1470
+ brokerReady: import_zod5.z.boolean(),
1471
+ activeWaitCount: import_zod5.z.number().int().nonnegative().max(EXTERNAL_HANDOFF_LIMITS.maximumWaiters),
1472
+ snapshotSchemaVersion: import_zod5.z.literal(EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION),
1473
+ brokerProtocolVersion: import_zod5.z.literal(EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION),
1474
+ activeAdapter: activeAdapterSummarySchema.nullable(),
1475
+ dispatch: dispatchSummarySchema.nullable()
1476
+ });
1477
+ var externalHandoffPublishDeliverySchema = import_zod5.z.discriminatedUnion("mode", [
1478
+ import_zod5.z.strictObject({ mode: import_zod5.z.literal("inbox") }),
1479
+ import_zod5.z.strictObject({
1480
+ mode: import_zod5.z.literal("active"),
1481
+ adapter: activeAdapterSummarySchema,
1482
+ dispatch: dispatchSummarySchema
1483
+ })
1484
+ ]);
1485
+ var externalHandoffPublishResultSchema = import_zod5.z.strictObject({
1486
+ handoff: externalHandoffSummarySchema,
1487
+ delivery: externalHandoffPublishDeliverySchema,
1488
+ replayed: import_zod5.z.boolean()
1489
+ });
1490
+ var externalHandoffStatusResultSchema = import_zod5.z.strictObject({
1491
+ handoff: externalHandoffSummarySchema,
1492
+ activeAdapter: activeAdapterSummarySchema.nullable(),
1493
+ dispatch: dispatchSummarySchema.nullable()
1012
1494
  });
1013
- var agentJobActionRequestSchema = import_zod3.z.strictObject({});
1014
1495
 
1015
1496
  // src/protocol/agent-schemas.ts
1016
- var import_zod4 = require("zod");
1017
- var profileIdSchema3 = import_zod4.z.string().min(1).max(64).regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);
1018
- var boundedString2 = (maximum) => import_zod4.z.string().max(maximum);
1019
- var errorCodeSchema = import_zod4.z.enum(ERROR_CODES);
1020
- var agentCapabilitySnapshotSchema = import_zod4.z.strictObject({
1497
+ var import_zod6 = require("zod");
1498
+ var profileIdSchema3 = import_zod6.z.string().min(1).max(64).regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);
1499
+ var boundedString2 = (maximum) => import_zod6.z.string().max(maximum);
1500
+ var errorCodeSchema = import_zod6.z.enum(ERROR_CODES);
1501
+ var agentCapabilitySnapshotSchema = import_zod6.z.strictObject({
1021
1502
  providerProfileId: profileIdSchema3,
1022
1503
  providerLabel: boundedString2(100),
1023
1504
  modelProfileId: profileIdSchema3,
1024
1505
  modelLabel: boundedString2(100),
1025
- protocol: import_zod4.z.enum(["responses", "chat-completions"]),
1026
- state: import_zod4.z.enum(AGENT_CAPABILITY_STATES),
1027
- authenticated: import_zod4.z.boolean(),
1028
- modelAvailable: import_zod4.z.boolean(),
1029
- toolCalling: import_zod4.z.boolean(),
1030
- toolResultContinuation: import_zod4.z.boolean(),
1031
- streaming: import_zod4.z.boolean(),
1032
- checkedAt: import_zod4.z.iso.datetime().optional(),
1506
+ protocol: import_zod6.z.enum(["responses", "chat-completions"]),
1507
+ state: import_zod6.z.enum(AGENT_CAPABILITY_STATES),
1508
+ authenticated: import_zod6.z.boolean(),
1509
+ modelAvailable: import_zod6.z.boolean(),
1510
+ toolCalling: import_zod6.z.boolean(),
1511
+ toolResultContinuation: import_zod6.z.boolean(),
1512
+ streaming: import_zod6.z.boolean(),
1513
+ checkedAt: import_zod6.z.iso.datetime().optional(),
1033
1514
  errorCode: errorCodeSchema.optional()
1034
1515
  });
1035
- var agentWorkspaceHealthSnapshotSchema = import_zod4.z.strictObject({
1036
- state: import_zod4.z.enum(AGENT_WORKSPACE_STATES),
1037
- checkedAt: import_zod4.z.iso.datetime(),
1038
- changes: import_zod4.z.strictObject({
1039
- staged: import_zod4.z.number().int().nonnegative(),
1040
- unstaged: import_zod4.z.number().int().nonnegative(),
1041
- untracked: import_zod4.z.number().int().nonnegative(),
1042
- conflicted: import_zod4.z.number().int().nonnegative(),
1043
- total: import_zod4.z.number().int().nonnegative()
1516
+ var agentWorkspaceHealthSnapshotSchema = import_zod6.z.strictObject({
1517
+ state: import_zod6.z.enum(AGENT_WORKSPACE_STATES),
1518
+ checkedAt: import_zod6.z.iso.datetime(),
1519
+ changes: import_zod6.z.strictObject({
1520
+ staged: import_zod6.z.number().int().nonnegative(),
1521
+ unstaged: import_zod6.z.number().int().nonnegative(),
1522
+ untracked: import_zod6.z.number().int().nonnegative(),
1523
+ conflicted: import_zod6.z.number().int().nonnegative(),
1524
+ total: import_zod6.z.number().int().nonnegative()
1044
1525
  }),
1045
- canIncludeLocalChanges: import_zod4.z.boolean(),
1526
+ canIncludeLocalChanges: import_zod6.z.boolean(),
1046
1527
  errorCode: errorCodeSchema.optional()
1047
1528
  }).refine(
1048
1529
  ({ state, changes, canIncludeLocalChanges, errorCode }) => {
@@ -1060,42 +1541,42 @@ var agentWorkspaceHealthSnapshotSchema = import_zod4.z.strictObject({
1060
1541
  },
1061
1542
  { message: "Agent workspace health fields are inconsistent." }
1062
1543
  );
1063
- var agentChangedFileSchema = import_zod4.z.strictObject({
1544
+ var agentChangedFileSchema = import_zod6.z.strictObject({
1064
1545
  relativePath: boundedString2(1024),
1065
- kind: import_zod4.z.enum(AGENT_FILE_CHANGE_KINDS),
1066
- additions: import_zod4.z.number().int().nonnegative(),
1067
- deletions: import_zod4.z.number().int().nonnegative()
1546
+ kind: import_zod6.z.enum(AGENT_FILE_CHANGE_KINDS),
1547
+ additions: import_zod6.z.number().int().nonnegative(),
1548
+ deletions: import_zod6.z.number().int().nonnegative()
1068
1549
  });
1069
- var agentCheckResultSchema = import_zod4.z.strictObject({
1550
+ var agentCheckResultSchema = import_zod6.z.strictObject({
1070
1551
  checkId: profileIdSchema3,
1071
1552
  label: boundedString2(100),
1072
- status: import_zod4.z.enum(AGENT_CHECK_STATUSES),
1073
- durationMs: import_zod4.z.number().int().nonnegative(),
1553
+ status: import_zod6.z.enum(AGENT_CHECK_STATUSES),
1554
+ durationMs: import_zod6.z.number().int().nonnegative(),
1074
1555
  output: boundedString2(8e4)
1075
1556
  });
1076
- var agentJobSnapshotSchema = import_zod4.z.strictObject({
1077
- jobId: import_zod4.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
1078
- status: import_zod4.z.enum(AGENT_JOB_STATUSES),
1557
+ var agentJobSnapshotSchema = import_zod6.z.strictObject({
1558
+ jobId: import_zod6.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
1559
+ status: import_zod6.z.enum(AGENT_JOB_STATUSES),
1079
1560
  providerProfileId: profileIdSchema3,
1080
1561
  providerLabel: boundedString2(100),
1081
1562
  modelProfileId: profileIdSchema3,
1082
1563
  modelLabel: boundedString2(100),
1083
1564
  phaseMessage: boundedString2(1024),
1084
- createdAt: import_zod4.z.iso.datetime(),
1085
- updatedAt: import_zod4.z.iso.datetime(),
1086
- canCancel: import_zod4.z.boolean(),
1087
- canApply: import_zod4.z.boolean(),
1088
- canRevert: import_zod4.z.boolean(),
1565
+ createdAt: import_zod6.z.iso.datetime(),
1566
+ updatedAt: import_zod6.z.iso.datetime(),
1567
+ canCancel: import_zod6.z.boolean(),
1568
+ canApply: import_zod6.z.boolean(),
1569
+ canRevert: import_zod6.z.boolean(),
1089
1570
  errorCode: errorCodeSchema.optional()
1090
1571
  });
1091
- var agentJobResultSchema = import_zod4.z.strictObject({
1092
- jobId: import_zod4.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
1572
+ var agentJobResultSchema = import_zod6.z.strictObject({
1573
+ jobId: import_zod6.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
1093
1574
  summary: boundedString2(8e4),
1094
1575
  diff: boundedString2(1e6),
1095
- files: import_zod4.z.array(agentChangedFileSchema).max(100),
1096
- checks: import_zod4.z.array(agentCheckResultSchema).max(100)
1576
+ files: import_zod6.z.array(agentChangedFileSchema).max(100),
1577
+ checks: import_zod6.z.array(agentCheckResultSchema).max(100)
1097
1578
  });
1098
- var agentJobResultResponseSchema = import_zod4.z.strictObject({
1579
+ var agentJobResultResponseSchema = import_zod6.z.strictObject({
1099
1580
  snapshot: agentJobSnapshotSchema,
1100
1581
  result: agentJobResultSchema.optional()
1101
1582
  }).superRefine((value, context) => {
@@ -1107,44 +1588,44 @@ var agentJobResultResponseSchema = import_zod4.z.strictObject({
1107
1588
  });
1108
1589
  }
1109
1590
  });
1110
- var agentJobEventBaseSchema = import_zod4.z.strictObject({
1111
- schemaVersion: import_zod4.z.literal(2),
1112
- sequence: import_zod4.z.number().int().positive(),
1113
- jobId: import_zod4.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
1114
- status: import_zod4.z.enum(AGENT_JOB_STATUSES),
1115
- timestamp: import_zod4.z.iso.datetime()
1591
+ var agentJobEventBaseSchema = import_zod6.z.strictObject({
1592
+ schemaVersion: import_zod6.z.literal(2),
1593
+ sequence: import_zod6.z.number().int().positive(),
1594
+ jobId: import_zod6.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
1595
+ status: import_zod6.z.enum(AGENT_JOB_STATUSES),
1596
+ timestamp: import_zod6.z.iso.datetime()
1116
1597
  });
1117
- var agentJobEventSchema = import_zod4.z.discriminatedUnion("type", [
1598
+ var agentJobEventSchema = import_zod6.z.discriminatedUnion("type", [
1118
1599
  agentJobEventBaseSchema.extend({
1119
- type: import_zod4.z.literal("snapshot"),
1120
- data: import_zod4.z.strictObject({ snapshot: agentJobSnapshotSchema })
1600
+ type: import_zod6.z.literal("snapshot"),
1601
+ data: import_zod6.z.strictObject({ snapshot: agentJobSnapshotSchema })
1121
1602
  }),
1122
1603
  agentJobEventBaseSchema.extend({
1123
- type: import_zod4.z.literal("phase"),
1124
- data: import_zod4.z.strictObject({ message: boundedString2(1024) })
1604
+ type: import_zod6.z.literal("phase"),
1605
+ data: import_zod6.z.strictObject({ message: boundedString2(1024) })
1125
1606
  }),
1126
1607
  agentJobEventBaseSchema.extend({
1127
- type: import_zod4.z.literal("tool"),
1128
- data: import_zod4.z.strictObject({
1129
- turn: import_zod4.z.number().int().positive(),
1608
+ type: import_zod6.z.literal("tool"),
1609
+ data: import_zod6.z.strictObject({
1610
+ turn: import_zod6.z.number().int().positive(),
1130
1611
  toolCallId: boundedString2(256),
1131
1612
  toolName: boundedString2(100),
1132
- state: import_zod4.z.enum(["started", "succeeded", "failed"]),
1613
+ state: import_zod6.z.enum(["started", "succeeded", "failed"]),
1133
1614
  relativePath: boundedString2(1024).optional(),
1134
1615
  checkLabel: boundedString2(100).optional()
1135
1616
  })
1136
1617
  }),
1137
1618
  agentJobEventBaseSchema.extend({
1138
- type: import_zod4.z.literal("check"),
1139
- data: import_zod4.z.strictObject({ result: agentCheckResultSchema })
1619
+ type: import_zod6.z.literal("check"),
1620
+ data: import_zod6.z.strictObject({ result: agentCheckResultSchema })
1140
1621
  }),
1141
1622
  agentJobEventBaseSchema.extend({
1142
- type: import_zod4.z.literal("result-ready"),
1143
- data: import_zod4.z.strictObject({ hasResult: import_zod4.z.literal(true) })
1623
+ type: import_zod6.z.literal("result-ready"),
1624
+ data: import_zod6.z.strictObject({ hasResult: import_zod6.z.literal(true) })
1144
1625
  }),
1145
1626
  agentJobEventBaseSchema.extend({
1146
- type: import_zod4.z.literal("error"),
1147
- data: import_zod4.z.strictObject({
1627
+ type: import_zod6.z.literal("error"),
1628
+ data: import_zod6.z.strictObject({
1148
1629
  code: errorCodeSchema,
1149
1630
  message: boundedString2(1024)
1150
1631
  })
@@ -1197,6 +1678,32 @@ var SPOTPATCH_REPOSITORY_URL = "https://github.com/huanglvjing/spotpatch";
1197
1678
  DEFAULT_DATA_FLOW_LIMITS,
1198
1679
  DEFAULT_RUNTIME_DATA_FLOW_LIMITS,
1199
1680
  ERROR_CODES,
1681
+ ERROR_CODE_VALUES,
1682
+ EXTERNAL_AGENT_ACTIONS,
1683
+ EXTERNAL_AGENT_AUTH_READINESS,
1684
+ EXTERNAL_AGENT_CONNECTION_STATES,
1685
+ EXTERNAL_AGENT_CONTROL_LIMITS,
1686
+ EXTERNAL_AGENT_CONTROL_SCHEMA_VERSION,
1687
+ EXTERNAL_AGENT_DELIVERY_STATUSES,
1688
+ EXTERNAL_AGENT_ERROR_CODES,
1689
+ EXTERNAL_AGENT_ERROR_RECOVERABILITY,
1690
+ EXTERNAL_AGENT_ERROR_STAGES,
1691
+ EXTERNAL_AGENT_EXECUTION_STATUSES,
1692
+ EXTERNAL_AGENT_GRANT_STATES,
1693
+ EXTERNAL_AGENT_MANAGED_ADAPTER_KINDS,
1694
+ EXTERNAL_AGENT_MANAGED_PHASES,
1695
+ EXTERNAL_AGENT_MANAGED_PROFILE,
1696
+ EXTERNAL_AGENT_MODES,
1697
+ EXTERNAL_AGENT_VALIDATION_OUTCOMES,
1698
+ EXTERNAL_HANDOFF_ACTIVE_ADAPTER_KINDS,
1699
+ EXTERNAL_HANDOFF_ACTIVE_ADAPTER_STATES,
1700
+ EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION,
1701
+ EXTERNAL_HANDOFF_DISPATCH_PHASES,
1702
+ EXTERNAL_HANDOFF_FRAMEWORKS,
1703
+ EXTERNAL_HANDOFF_LIMITS,
1704
+ EXTERNAL_HANDOFF_REPORTABLE_DISPATCH_PHASES,
1705
+ EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION,
1706
+ EXTERNAL_HANDOFF_STATES,
1200
1707
  MAX_ANNOTATION_INSTRUCTION_CHARACTERS,
1201
1708
  MAX_ANNOTATION_TARGETS,
1202
1709
  MAX_TARGET_INSTRUCTION_CHARACTERS,
@@ -1211,6 +1718,7 @@ var SPOTPATCH_REPOSITORY_URL = "https://github.com/huanglvjing/spotpatch";
1211
1718
  SPOTPATCH_REPOSITORY_URL,
1212
1719
  SPOTPATCH_TOKEN_HEADER,
1213
1720
  SpotPatchError,
1721
+ activeAdapterSummarySchema,
1214
1722
  agentCapabilityRequestSchema,
1215
1723
  agentCapabilitySnapshotSchema,
1216
1724
  agentChangedFileSchema,
@@ -1227,10 +1735,37 @@ var SPOTPATCH_REPOSITORY_URL = "https://github.com/huanglvjing/spotpatch";
1227
1735
  dataDependencySchema,
1228
1736
  dataFlowComponentReportRequestSchema,
1229
1737
  dataFlowPageReportRequestSchema,
1738
+ dispatchSummarySchema,
1739
+ externalAgentControlCancelRequestSchema,
1740
+ externalAgentControlConnectRequestSchema,
1741
+ externalAgentControlDisconnectRequestSchema,
1742
+ externalAgentControlStatusRequestSchema,
1743
+ externalAgentControlStatusSchema,
1744
+ externalAgentErrorSchema,
1745
+ externalAgentEventSchema,
1746
+ externalAgentEventsRequestSchema,
1747
+ externalAgentManagedResultSchema,
1748
+ externalAgentResultRequestSchema,
1749
+ externalHandoffCapabilityRequestSchema,
1750
+ externalHandoffCapabilitySchema,
1751
+ externalHandoffPublishDeliverySchema,
1752
+ externalHandoffPublishRequestSchema,
1753
+ externalHandoffPublishResultSchema,
1754
+ externalHandoffReportableDispatchPhaseSchema,
1755
+ externalHandoffResolveDeliveryRequestSchema,
1756
+ externalHandoffSnapshotSchema,
1757
+ externalHandoffStatusRequestSchema,
1758
+ externalHandoffStatusResultSchema,
1759
+ externalHandoffSummarySchema,
1230
1760
  formatSourceMarker,
1231
1761
  getAgentJobEndpoint,
1762
+ isErrorCode,
1232
1763
  isSensitiveName,
1233
1764
  limitDataFlowReportCollections,
1765
+ managedCheckSummarySchema,
1766
+ managedFileSummarySchema,
1767
+ managedTaskStatusSchema,
1768
+ managedTimingSummarySchema,
1234
1769
  networkObservationSchema,
1235
1770
  openEditorRequestSchema,
1236
1771
  pageDataFlowReportSchema,