@codetreker/daynight 0.25.4 → 0.26.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 (170) hide show
  1. package/README.md +108 -4
  2. package/config.example.yml +3 -0
  3. package/dist/api/client.js +2 -2
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/parse.js +14 -2
  6. package/dist/api/parse.js.map +1 -1
  7. package/dist/api/types.d.ts +4 -1
  8. package/dist/api/worker-mode.d.ts +6 -0
  9. package/dist/api/worker-mode.js +14 -0
  10. package/dist/api/worker-mode.js.map +1 -0
  11. package/dist/cli/commands.js +2 -0
  12. package/dist/cli/commands.js.map +1 -1
  13. package/dist/commands/controller/command-controls.d.ts +4 -0
  14. package/dist/commands/controller/command-controls.js +33 -0
  15. package/dist/commands/controller/command-controls.js.map +1 -0
  16. package/dist/commands/controller/definition.d.ts +3 -0
  17. package/dist/commands/controller/definition.js +22 -0
  18. package/dist/commands/controller/definition.js.map +1 -0
  19. package/dist/commands/controller/independent.d.ts +3 -0
  20. package/dist/commands/controller/independent.js +344 -0
  21. package/dist/commands/controller/independent.js.map +1 -0
  22. package/dist/commands/controller/index.d.ts +12 -0
  23. package/dist/commands/controller/index.js +73 -0
  24. package/dist/commands/controller/index.js.map +1 -0
  25. package/dist/commands/controller/launch-ticket.d.ts +49 -0
  26. package/dist/commands/controller/launch-ticket.js +99 -0
  27. package/dist/commands/controller/launch-ticket.js.map +1 -0
  28. package/dist/commands/controller/lifecycle-store.d.ts +84 -0
  29. package/dist/commands/controller/lifecycle-store.js +278 -0
  30. package/dist/commands/controller/lifecycle-store.js.map +1 -0
  31. package/dist/commands/controller/local-client.d.ts +44 -0
  32. package/dist/commands/controller/local-client.js +75 -0
  33. package/dist/commands/controller/local-client.js.map +1 -0
  34. package/dist/commands/controller/local-content.d.ts +23 -0
  35. package/dist/commands/controller/local-content.js +103 -0
  36. package/dist/commands/controller/local-content.js.map +1 -0
  37. package/dist/commands/controller/process-proof.d.ts +13 -0
  38. package/dist/commands/controller/process-proof.js +121 -0
  39. package/dist/commands/controller/process-proof.js.map +1 -0
  40. package/dist/commands/controller/providers/claude.d.ts +2 -0
  41. package/dist/commands/controller/providers/claude.js +470 -0
  42. package/dist/commands/controller/providers/claude.js.map +1 -0
  43. package/dist/commands/controller/providers/codex.d.ts +2 -0
  44. package/dist/commands/controller/providers/codex.js +254 -0
  45. package/dist/commands/controller/providers/codex.js.map +1 -0
  46. package/dist/commands/controller/providers/controls-claude.d.ts +26 -0
  47. package/dist/commands/controller/providers/controls-claude.js +138 -0
  48. package/dist/commands/controller/providers/controls-claude.js.map +1 -0
  49. package/dist/commands/controller/providers/controls-codex.d.ts +38 -0
  50. package/dist/commands/controller/providers/controls-codex.js +199 -0
  51. package/dist/commands/controller/providers/controls-codex.js.map +1 -0
  52. package/dist/commands/controller/providers/controls-copilot.d.ts +20 -0
  53. package/dist/commands/controller/providers/controls-copilot.js +143 -0
  54. package/dist/commands/controller/providers/controls-copilot.js.map +1 -0
  55. package/dist/commands/controller/providers/controls.d.ts +21 -0
  56. package/dist/commands/controller/providers/controls.js +53 -0
  57. package/dist/commands/controller/providers/controls.js.map +1 -0
  58. package/dist/commands/controller/providers/copilot-interactions.d.ts +47 -0
  59. package/dist/commands/controller/providers/copilot-interactions.js +295 -0
  60. package/dist/commands/controller/providers/copilot-interactions.js.map +1 -0
  61. package/dist/commands/controller/providers/copilot-projection.d.ts +11 -0
  62. package/dist/commands/controller/providers/copilot-projection.js +93 -0
  63. package/dist/commands/controller/providers/copilot-projection.js.map +1 -0
  64. package/dist/commands/controller/providers/copilot-runtime.d.ts +9 -0
  65. package/dist/commands/controller/providers/copilot-runtime.js +127 -0
  66. package/dist/commands/controller/providers/copilot-runtime.js.map +1 -0
  67. package/dist/commands/controller/providers/copilot.d.ts +2 -0
  68. package/dist/commands/controller/providers/copilot.js +309 -0
  69. package/dist/commands/controller/providers/copilot.js.map +1 -0
  70. package/dist/commands/controller/providers/interactions.d.ts +3 -0
  71. package/dist/commands/controller/providers/interactions.js +79 -0
  72. package/dist/commands/controller/providers/interactions.js.map +1 -0
  73. package/dist/commands/controller/providers/native-rpc.d.ts +28 -0
  74. package/dist/commands/controller/providers/native-rpc.js +85 -0
  75. package/dist/commands/controller/providers/native-rpc.js.map +1 -0
  76. package/dist/commands/controller/providers/projection.d.ts +23 -0
  77. package/dist/commands/controller/providers/projection.js +99 -0
  78. package/dist/commands/controller/providers/projection.js.map +1 -0
  79. package/dist/commands/controller/providers/turns.d.ts +7 -0
  80. package/dist/commands/controller/providers/turns.js +21 -0
  81. package/dist/commands/controller/providers/turns.js.map +1 -0
  82. package/dist/commands/controller/providers/types.d.ts +44 -0
  83. package/dist/commands/controller/providers/types.js +2 -0
  84. package/dist/commands/controller/providers/types.js.map +1 -0
  85. package/dist/commands/controller/recovery.d.ts +6 -0
  86. package/dist/commands/controller/recovery.js +22 -0
  87. package/dist/commands/controller/recovery.js.map +1 -0
  88. package/dist/commands/controller/relay.d.ts +18 -0
  89. package/dist/commands/controller/relay.js +299 -0
  90. package/dist/commands/controller/relay.js.map +1 -0
  91. package/dist/commands/controller/resume.d.ts +18 -0
  92. package/dist/commands/controller/resume.js +193 -0
  93. package/dist/commands/controller/resume.js.map +1 -0
  94. package/dist/commands/controller/runtime.d.ts +5 -0
  95. package/dist/commands/controller/runtime.js +455 -0
  96. package/dist/commands/controller/runtime.js.map +1 -0
  97. package/dist/commands/controller/windows-job.d.ts +3 -0
  98. package/dist/commands/controller/windows-job.js +59 -0
  99. package/dist/commands/controller/windows-job.js.map +1 -0
  100. package/dist/commands/controller/wire-display.d.ts +5 -0
  101. package/dist/commands/controller/wire-display.js +11 -0
  102. package/dist/commands/controller/wire-display.js.map +1 -0
  103. package/dist/commands/worker/backend.d.ts +7 -0
  104. package/dist/commands/worker/backend.js +7 -0
  105. package/dist/commands/worker/backend.js.map +1 -0
  106. package/dist/commands/worker/backends/grant-renewal.d.ts +13 -0
  107. package/dist/commands/worker/backends/grant-renewal.js +42 -0
  108. package/dist/commands/worker/backends/grant-renewal.js.map +1 -0
  109. package/dist/commands/worker/backends/session-api.d.ts +66 -0
  110. package/dist/commands/worker/backends/session-api.js +84 -0
  111. package/dist/commands/worker/backends/session-api.js.map +1 -0
  112. package/dist/commands/worker/backends/web-process.d.ts +79 -0
  113. package/dist/commands/worker/backends/web-process.js +156 -0
  114. package/dist/commands/worker/backends/web-process.js.map +1 -0
  115. package/dist/commands/worker/backends/web-store.d.ts +49 -0
  116. package/dist/commands/worker/backends/web-store.js +323 -0
  117. package/dist/commands/worker/backends/web-store.js.map +1 -0
  118. package/dist/commands/worker/backends/web-types.d.ts +83 -0
  119. package/dist/commands/worker/backends/web-types.js +3 -0
  120. package/dist/commands/worker/backends/web-types.js.map +1 -0
  121. package/dist/commands/worker/backends/web.d.ts +26 -0
  122. package/dist/commands/worker/backends/web.js +178 -0
  123. package/dist/commands/worker/backends/web.js.map +1 -0
  124. package/dist/commands/worker/config.js +12 -5
  125. package/dist/commands/worker/config.js.map +1 -1
  126. package/dist/commands/worker/control.d.ts +2 -0
  127. package/dist/commands/worker/control.js +11 -4
  128. package/dist/commands/worker/control.js.map +1 -1
  129. package/dist/commands/worker/coordinator.d.ts +7 -0
  130. package/dist/commands/worker/coordinator.js +138 -19
  131. package/dist/commands/worker/coordinator.js.map +1 -1
  132. package/dist/commands/worker/herdr/agents.js +5 -4
  133. package/dist/commands/worker/herdr/agents.js.map +1 -1
  134. package/dist/commands/worker/herdr/arguments.js +9 -4
  135. package/dist/commands/worker/herdr/arguments.js.map +1 -1
  136. package/dist/commands/worker/herdr/claude-input.d.ts +2 -0
  137. package/dist/commands/worker/herdr/claude-input.js +20 -0
  138. package/dist/commands/worker/herdr/claude-input.js.map +1 -0
  139. package/dist/commands/worker/herdr/instance.js +1 -1
  140. package/dist/commands/worker/herdr/instance.js.map +1 -1
  141. package/dist/commands/worker/herdr/preflight.d.ts +1 -1
  142. package/dist/commands/worker/herdr/preflight.js +31 -10
  143. package/dist/commands/worker/herdr/preflight.js.map +1 -1
  144. package/dist/commands/worker/herdr.js +5 -1
  145. package/dist/commands/worker/herdr.js.map +1 -1
  146. package/dist/commands/worker/prompts.js +5 -1
  147. package/dist/commands/worker/prompts.js.map +1 -1
  148. package/dist/commands/worker/repositories.js +2 -2
  149. package/dist/commands/worker/repositories.js.map +1 -1
  150. package/dist/commands/worker/runtime.js +62 -10
  151. package/dist/commands/worker/runtime.js.map +1 -1
  152. package/dist/commands/worker/setup-environment.d.ts +2 -1
  153. package/dist/commands/worker/setup-environment.js +10 -4
  154. package/dist/commands/worker/setup-environment.js.map +1 -1
  155. package/dist/commands/worker/setup.js +5 -5
  156. package/dist/commands/worker/setup.js.map +1 -1
  157. package/dist/commands/worker/store.d.ts +2 -1
  158. package/dist/commands/worker/store.js +19 -9
  159. package/dist/commands/worker/store.js.map +1 -1
  160. package/dist/commands/worker/types.d.ts +4 -1
  161. package/dist/session/controller-protocol.d.ts +245 -0
  162. package/dist/session/controller-protocol.js +218 -0
  163. package/dist/session/controller-protocol.js.map +1 -0
  164. package/dist/session/controls.d.ts +28 -0
  165. package/dist/session/controls.js +37 -0
  166. package/dist/session/controls.js.map +1 -0
  167. package/dist/session/protocol.d.ts +290 -0
  168. package/dist/session/protocol.js +307 -0
  169. package/dist/session/protocol.js.map +1 -0
  170. package/package.json +7 -2
@@ -0,0 +1,295 @@
1
+ import { parseInteractionResponse, parseSessionInteraction } from "../../../session/protocol.js";
2
+ import { formInteraction, validateResponse } from "./interactions.js";
3
+ import { record, string, NativeRpcError } from "./native-rpc.js";
4
+ import { limited, nativeEntryId } from "./projection.js";
5
+ const canonical = (value) => JSON.stringify(value, (_key, item) => item && typeof item === "object" && !Array.isArray(item) ? Object.fromEntries(Object.entries(item).sort(([a], [b]) => a.localeCompare(b))) : item);
6
+ const questionSignature = (p) => canonical([p.question, p.choices ?? [], p.allowFreeform !== false]);
7
+ const elicitationSignature = (p) => canonical([p.message, p.mode ?? "form", p.requestedSchema, p.url, p.elicitationSource]);
8
+ const planSignature = (p) => canonical([p.summary, p.planContent ?? "", p.actions, p.recommendedAction]);
9
+ const sessionDecision = (prompt) => {
10
+ if (prompt.managedApprovalRequired === true)
11
+ return undefined;
12
+ if (prompt.kind === "read")
13
+ return { kind: "approve-for-session", approval: { kind: "read" } };
14
+ // Path session grants have no corresponding public typed approval receipt to verify.
15
+ if (prompt.kind === "path")
16
+ return undefined;
17
+ if (prompt.canOfferSessionApproval !== true)
18
+ return undefined;
19
+ if (prompt.kind === "write")
20
+ return { kind: "approve-for-session", approval: { kind: "write" } };
21
+ if (prompt.kind === "commands" && Array.isArray(prompt.commandIdentifiers) && prompt.commandIdentifiers.length && prompt.commandIdentifiers.every(v => typeof v === "string"))
22
+ return { kind: "approve-for-session", approval: { kind: "commands", commandIdentifiers: prompt.commandIdentifiers } };
23
+ return undefined;
24
+ };
25
+ // Validate the schema before the shared mapper so unsupported or malformed constraints cannot disappear.
26
+ const checkedForm = (title, value) => {
27
+ const schema = record(value), properties = record(schema.properties);
28
+ if (!Object.keys(properties).length || Object.keys(properties).length > 64)
29
+ throw new Error("Unsupported Copilot form fields.");
30
+ if (schema.required !== undefined && (!Array.isArray(schema.required) || schema.required.some(k => typeof k !== "string" || !Object.hasOwn(properties, k)) || new Set(schema.required).size !== schema.required.length))
31
+ throw new Error("Invalid Copilot form required fields.");
32
+ for (const [id, raw] of Object.entries(properties)) {
33
+ if (["__proto__", "constructor", "prototype"].includes(id))
34
+ throw new Error("Unsupported Copilot form field.");
35
+ const field = record(raw);
36
+ const allowed = ["type", "title", "description", ...(field.type === "string" ? ["enum", "enumNames"] : field.type === "number" ? ["minimum", "maximum"] : field.type === "array" ? ["items"] : [])];
37
+ if (Object.keys(field).some(k => !allowed.includes(k)))
38
+ throw new Error("Unsupported Copilot form constraint.");
39
+ for (const key of ["title", "description"])
40
+ if (field[key] !== undefined && typeof field[key] !== "string")
41
+ throw new Error("Invalid Copilot form label.");
42
+ if (field.enum !== undefined && (!Array.isArray(field.enum) || !field.enum.length || field.enum.some(v => typeof v !== "string") || new Set(field.enum).size !== field.enum.length))
43
+ throw new Error("Invalid Copilot form enum.");
44
+ if (field.enumNames !== undefined && (!Array.isArray(field.enumNames) || !Array.isArray(field.enum) || field.enumNames.length !== field.enum.length || field.enumNames.some(v => typeof v !== "string")))
45
+ throw new Error("Invalid Copilot enum labels.");
46
+ for (const key of ["minimum", "maximum"])
47
+ if (field[key] !== undefined && (typeof field[key] !== "number" || !Number.isFinite(field[key])))
48
+ throw new Error("Invalid Copilot numeric bound.");
49
+ if (typeof field.minimum === "number" && typeof field.maximum === "number" && field.minimum > field.maximum)
50
+ throw new Error("Invalid Copilot numeric bounds.");
51
+ }
52
+ return formInteraction(title, schema);
53
+ };
54
+ /** SDK callbacks carry no request ID; only an unambiguous full payload can bind them to a native event. */
55
+ export class CopilotInteractions {
56
+ options;
57
+ pending = new Map();
58
+ history = new Map();
59
+ seen = new Set();
60
+ tools = new Map();
61
+ closed = false;
62
+ constructor(options) {
63
+ this.options = options;
64
+ }
65
+ get waiting() { return this.pending.size > 0; }
66
+ get pendingIds() { return [...this.pending.keys()]; }
67
+ onPermissionRequest() { return { kind: "no-result" }; }
68
+ publish(interaction) { this.options.onTimeline({ entryId: interaction.interactionId, revision: interaction.revision, kind: "interaction", interaction }); }
69
+ error(message, id = "unsupported") {
70
+ this.options.onTimeline({ entryId: nativeEntryId(this.options.sessionId, `interaction-error:${id}`), revision: "1", kind: "error", code: "copilot_interaction_unsupported", message });
71
+ return new Error(message);
72
+ }
73
+ accept(event, history = false) {
74
+ if (this.closed)
75
+ return;
76
+ if (event.type === "tool.execution_start" && !history) {
77
+ const owner = event.agentId ?? event.data.parentToolCallId;
78
+ this.tools.set(event.data.toolCallId, owner);
79
+ for (const p of this.pending.values())
80
+ if (p.owner === null && p.toolCallId === event.data.toolCallId)
81
+ p.owner = owner;
82
+ return;
83
+ }
84
+ if (event.type === "abort" && !history) {
85
+ this.cancelOwner(event.agentId);
86
+ return;
87
+ }
88
+ const match = /^(permission|user_input|elicitation|exit_plan_mode)\.(requested|completed)$/.exec(event.type);
89
+ if (!match)
90
+ return;
91
+ const kind = match[1], data = record(event.data), nativeId = string(data.requestId);
92
+ if (!nativeId) {
93
+ this.error("Copilot interaction has no native request identity.");
94
+ return;
95
+ }
96
+ if (history && this.seen.has(nativeId))
97
+ return;
98
+ if (match[2] === "completed") {
99
+ if (history) {
100
+ const previous = this.history.get(nativeId);
101
+ if (previous?.kind === kind) {
102
+ this.history.delete(nativeId);
103
+ this.publish({ ...previous.interaction, state: "resolved", revision: "2" });
104
+ }
105
+ return;
106
+ }
107
+ const p = this.pending.get(nativeId);
108
+ if (!p || p.kind !== kind)
109
+ return;
110
+ let outcome = kind === "permission" ? /^(approved(?:-for-session|-for-location)?|denied-[\w-]+)$/.test(string(record(data.result).kind)) ? data.result : undefined
111
+ : kind === "user_input" ? typeof data.answer === "string" ? { answer: data.answer, wasFreeform: data.wasFreeform === true } : undefined
112
+ : kind === "exit_plan_mode" ? typeof data.approved === "boolean" ? { approved: data.approved, ...(typeof data.selectedAction === "string" ? { selectedAction: data.selectedAction } : {}), ...(typeof data.feedback === "string" ? { feedback: data.feedback } : {}) } : undefined
113
+ : data.action === "accept" || data.action === "decline" || data.action === "cancel" ? { action: data.action, ...(data.action === "accept" ? { content: data.content ?? {} } : {}) } : undefined;
114
+ if (kind === "exit_plan_mode" && data.approved === true) {
115
+ const action = p.interaction.kind === "form" ? p.interaction.fields.find(field => field.fieldId === "action") : undefined;
116
+ if (action?.type !== "select" || !["exit_only", "interactive"].includes(string(data.selectedAction)) || !action.options.some(option => option.id === data.selectedAction))
117
+ outcome = undefined;
118
+ }
119
+ if (kind === "exit_plan_mode" && data.autoApproveEdits === true)
120
+ outcome = undefined;
121
+ const confirmed = outcome !== undefined && (!p.submitted || canonical(outcome) === canonical(p.expected));
122
+ if (kind === "user_input" && outcome !== undefined)
123
+ p.question?.resolve(outcome);
124
+ if (kind === "elicitation" && outcome !== undefined)
125
+ p.elicitation?.resolve(outcome);
126
+ if (kind === "exit_plan_mode" && outcome !== undefined)
127
+ p.plan?.resolve(outcome);
128
+ this.retire(p, confirmed ? "resolved" : "expired", confirmed ? undefined : new Error("Native Copilot interaction did not confirm the submitted response."));
129
+ return;
130
+ }
131
+ if (kind === "permission" && data.resolvedByHook === true)
132
+ return;
133
+ if (!history && this.seen.has(nativeId))
134
+ return;
135
+ try {
136
+ let interaction, signature = "", grant;
137
+ const base = { interactionId: nativeEntryId(this.options.sessionId, `interaction:${nativeId}`), revision: "1", state: "pending" };
138
+ if (kind === "permission") {
139
+ const prompt = record(data.promptRequest);
140
+ grant = sessionDecision(prompt);
141
+ interaction = { ...base, kind: "approval", title: string(prompt.intention) || "Copilot permission", detail: JSON.stringify({ permission: data.permissionRequest, prompt: data.promptRequest }, null, 2), actions: grant ? ["allow_once", "allow_session", "reject"] : ["allow_once", "reject"] };
142
+ }
143
+ else if (kind === "user_input") {
144
+ const q = data;
145
+ signature = questionSignature(q);
146
+ interaction = { ...base, kind: "question", title: "Copilot question", canDismiss: false, questions: [{ questionId: "answer", label: q.question, options: (q.choices ?? []).map(v => ({ id: v, label: v })), multiple: false, allowCustom: q.allowFreeform !== false, required: true, sensitive: false }] };
147
+ }
148
+ else if (kind === "exit_plan_mode") {
149
+ const plan = data;
150
+ if (typeof plan.summary !== "string" || !plan.summary.trim() || !Array.isArray(plan.actions) || plan.actions.some(action => typeof action !== "string") || typeof plan.recommendedAction !== "string" || plan.planContent !== undefined && typeof plan.planContent !== "string")
151
+ throw new Error("Invalid Copilot plan approval request.");
152
+ signature = planSignature(plan);
153
+ const actions = [
154
+ ...(plan.actions.includes("exit_only") ? [{ id: "exit_only", label: "Approve plan" }] : []),
155
+ ...(plan.actions.includes("interactive") ? [{ id: "interactive", label: "Approve and continue" }] : []),
156
+ { id: "reject", label: "Reject plan" },
157
+ ];
158
+ interaction = { ...base, kind: "form", title: "Copilot plan approval", canDismiss: true, fields: [
159
+ { fieldId: "action", label: "Decision", type: "select", required: true, options: actions },
160
+ { fieldId: "feedback", label: "Feedback", type: "text", required: false, sensitive: false },
161
+ ] };
162
+ this.options.onTimeline({ entryId: nativeEntryId(this.options.sessionId, `plan:${nativeId}`), revision: "1", kind: "assistant_message", content: [{ type: "text", text: limited(plan.planContent || plan.summary) }] });
163
+ }
164
+ else {
165
+ if (data.mode !== undefined && data.mode !== "form")
166
+ throw new Error("Copilot URL elicitation is unsupported by this Session protocol.");
167
+ if (typeof data.message !== "string" || !data.message.trim())
168
+ throw new Error("Copilot elicitation requires a message.");
169
+ signature = elicitationSignature(data);
170
+ interaction = { ...checkedForm(data.message, data.requestedSchema), ...base };
171
+ }
172
+ interaction = parseSessionInteraction(interaction);
173
+ if (history) {
174
+ this.history.set(nativeId, { kind, interaction });
175
+ this.publish({ ...interaction, state: "expired" });
176
+ return;
177
+ }
178
+ const toolCallId = string(data.toolCallId ?? record(data.promptRequest).toolCallId ?? record(data.permissionRequest).toolCallId) || undefined;
179
+ const owner = event.agentId ?? (toolCallId ? this.tools.has(toolCallId) ? this.tools.get(toolCallId) : null : undefined);
180
+ this.seen.add(nativeId);
181
+ this.pending.set(nativeId, { nativeId, kind, interaction, signature, owner, toolCallId, submitted: false, sessionDecision: grant });
182
+ this.publish(interaction);
183
+ this.options.onChange();
184
+ }
185
+ catch (error) {
186
+ this.error(error instanceof Error ? error.message : "Unsupported Copilot interaction.", nativeId);
187
+ }
188
+ }
189
+ async bindQuestion(payload) {
190
+ return this.bind("user_input", questionSignature(payload), "question");
191
+ }
192
+ async bindElicitation(payload) {
193
+ // The SDK starts the callback before emitting the identity-bearing notification in the same dispatch.
194
+ await Promise.resolve();
195
+ if (payload.sessionId !== this.options.sessionId)
196
+ throw this.error("Copilot elicitation belongs to another native session.");
197
+ return this.bind("elicitation", elicitationSignature(payload), "elicitation");
198
+ }
199
+ async bindPlan(payload) { return this.bind("exit_plan_mode", planSignature(payload), "plan"); }
200
+ bind(kind, signature, callback) {
201
+ const matches = [...this.pending.values()].filter(p => p.kind === kind && p.signature === signature);
202
+ if (this.closed || matches.length !== 1 || matches[0][callback]) {
203
+ const error = this.error("Copilot callback has no unique native request identity.");
204
+ if (matches.length > 1)
205
+ for (const p of matches)
206
+ this.retire(p, "expired", error);
207
+ return Promise.reject(error);
208
+ }
209
+ const p = matches[0];
210
+ return callback === "question" ? new Promise((resolve, reject) => { p.question = { resolve, reject }; })
211
+ : callback === "elicitation" ? new Promise((resolve, reject) => { p.elicitation = { resolve, reject }; })
212
+ : new Promise((resolve, reject) => { p.plan = { resolve, reject }; });
213
+ }
214
+ retire(p, state, error) {
215
+ this.pending.delete(p.nativeId);
216
+ if (p.timer)
217
+ clearTimeout(p.timer);
218
+ const ended = error ?? new Error("Native Copilot interaction is no longer pending.");
219
+ p.question?.reject(ended);
220
+ p.elicitation?.reject(ended);
221
+ p.plan?.reject(ended);
222
+ if (error || state === "expired")
223
+ p.confirmation?.reject(ended);
224
+ else
225
+ p.confirmation?.resolve();
226
+ this.publish({ ...p.interaction, state, revision: "2" });
227
+ this.options.onChange();
228
+ }
229
+ cancelOwner(owner) { for (const p of this.pending.values())
230
+ if (p.owner === owner)
231
+ this.retire(p, "expired", new Error("Native Copilot interaction was aborted.")); }
232
+ dispose(error = new Error("Native Copilot interactions closed.")) { this.closed = true; for (const p of this.pending.values())
233
+ this.retire(p, "expired", error); this.history.clear(); this.tools.clear(); }
234
+ async respond(id, revision, input) {
235
+ const p = [...this.pending.values()].find(p => p.interaction.interactionId === id);
236
+ if (!p || p.submitted || p.interaction.revision !== revision || this.closed)
237
+ throw new NativeRpcError(-32602, "Native Copilot interaction is stale or already submitted.");
238
+ const response = parseInteractionResponse(input);
239
+ validateResponse(p.interaction, response);
240
+ if (p.kind === "user_input" && !p.question || p.kind === "elicitation" && !p.elicitation || p.kind === "exit_plan_mode" && !p.plan)
241
+ throw new NativeRpcError(-32602, "Native Copilot callback is not available.");
242
+ let reply, decision;
243
+ if (response.kind === "approval") {
244
+ decision = response.action === "reject" ? { kind: "reject" } : response.action === "allow_session" ? p.sessionDecision : { kind: "approve-once", approvedInteractively: true };
245
+ if (!decision)
246
+ throw new NativeRpcError(-32602, "Native session approval is not available.");
247
+ p.expected = response.action === "reject" ? { kind: "denied-interactively-by-user" } : response.action === "allow_once" ? { kind: "approved" }
248
+ : { kind: "approved-for-session", ...(decision.kind === "approve-for-session" ? { approval: decision.approval } : {}) };
249
+ }
250
+ else if (response.kind === "question") {
251
+ const answer = response.answers[0];
252
+ if (answer.text !== null && answer.optionIds.length || answer.optionIds.length + (answer.text !== null ? 1 : 0) !== 1)
253
+ throw new NativeRpcError(-32602, "Copilot requires one unambiguous question answer.");
254
+ reply = { answer: answer.text ?? answer.optionIds[0], wasFreeform: answer.text !== null };
255
+ p.expected = reply;
256
+ }
257
+ else if (p.kind === "exit_plan_mode") {
258
+ const values = response.kind === "form" ? response.values : [];
259
+ const action = values.find(v => v.fieldId === "action")?.value;
260
+ const feedback = values.find(v => v.fieldId === "feedback")?.value;
261
+ reply = { approved: action === "exit_only" || action === "interactive", ...(action === "exit_only" || action === "interactive" ? { selectedAction: action } : {}), ...(typeof feedback === "string" && feedback ? { feedback } : {}) };
262
+ p.expected = reply;
263
+ }
264
+ else {
265
+ reply = response.kind === "dismiss" ? { action: "cancel" } : { action: "accept", content: Object.fromEntries(response.values.map(v => [v.fieldId, typeof v.value === "object" ? [...v.value] : v.value])) };
266
+ p.expected = reply;
267
+ }
268
+ p.submitted = true;
269
+ const confirmation = new Promise((resolve, reject) => { p.confirmation = { resolve, reject }; });
270
+ // Attach rejection handling before dispatch, which may synchronously deliver completion.
271
+ const result = confirmation.then(() => ({ disposition: "handled" }));
272
+ p.timer = setTimeout(() => { p.confirmation?.reject(new Error("Native Copilot interaction result is unknown.")); }, this.options.confirmationTimeoutMs ?? 30_000);
273
+ if (decision) {
274
+ const failed = (error) => { if (p.timer)
275
+ clearTimeout(p.timer); p.confirmation?.reject(error instanceof Error ? error : new Error(String(error))); };
276
+ try {
277
+ void this.options.permissionRpc({ requestId: p.nativeId, result: decision }).then(ack => {
278
+ if (!ack.success)
279
+ failed(new Error("Copilot did not accept the permission response; result is unknown."));
280
+ }, failed);
281
+ }
282
+ catch (error) {
283
+ failed(error);
284
+ }
285
+ }
286
+ else if (p.kind === "user_input")
287
+ p.question.resolve(reply);
288
+ else if (p.kind === "exit_plan_mode")
289
+ p.plan.resolve(reply);
290
+ else
291
+ p.elicitation.resolve(reply);
292
+ return result;
293
+ }
294
+ }
295
+ //# sourceMappingURL=copilot-interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-interactions.js","sourceRoot":"","sources":["../../../../src/commands/controller/providers/copilot-interactions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAqD,MAAM,8BAA8B,CAAC;AACpJ,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAsBzD,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAa,EAAE,EAAE,CAC1F,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrJ,MAAM,iBAAiB,GAAG,CAAC,CAAW,EAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC;AACvH,MAAM,oBAAoB,GAAG,CAAC,CAAuB,EAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC1J,MAAM,aAAa,GAAG,CAAC,CAAO,EAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACvH,MAAM,eAAe,GAAG,CAAC,MAA+B,EAAoC,EAAE;IAC5F,IAAI,MAAM,CAAC,uBAAuB,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAC/F,qFAAqF;IACrF,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,MAAM,CAAC,uBAAuB,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;IACjG,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAC3K,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,EAAE,CAAC;IACxH,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AACF,yGAAyG;AACzG,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,KAAc,EAAsB,EAAE;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAChI,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAClR,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC/G,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAChH,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;YAAE,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC3J,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnO,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC1P,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;YAAE,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC9L,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAClK,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,2GAA2G;AAC3G,MAAM,OAAO,mBAAmB;IAMD,OAAO;IALnB,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,OAAO,GAAG,IAAI,GAAG,EAA2D,CAAC;IAC7E,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IACzB,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;IACvD,MAAM,GAAG,KAAK,CAAC;IACvB,YAA6B,OAAkC;uBAAlC,OAAO;IAA8B,CAAC;IACnE,IAAI,OAAO,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,UAAU,KAAwB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,mBAAmB,KAA4B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,WAA+B,IAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACrL,KAAK,CAAC,OAAe,EAAE,EAAE,GAAG,aAAa;QAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,qBAAqB,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,iCAAiC,EAAE,OAAO,EAAE,CAAC,CAAC;QACvL,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,CAAC,KAAmB,EAAE,OAAO,GAAG,KAAK;QACzC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,IAAI,CAAC,OAAO,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU;oBAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;YACvH,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpF,MAAM,KAAK,GAAG,6EAA6E,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7G,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAS,EAAE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7F,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC/C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,QAAQ,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC;oBAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAC5I,OAAO;YACT,CAAC;YACD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO;YAClC,IAAI,OAAO,GAAY,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,2DAA2D,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACzK,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;oBACvI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;wBAClR,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAClM,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACxD,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1H,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC;oBAAE,OAAO,GAAG,SAAS,CAAC;YACjM,CAAC;YACD,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI;gBAAE,OAAO,GAAG,SAAS,CAAC;YACrF,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1G,IAAI,IAAI,KAAK,YAAY,IAAI,OAAO,KAAK,SAAS;gBAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAwB,CAAC,CAAC;YAClG,IAAI,IAAI,KAAK,aAAa,IAAI,OAAO,KAAK,SAAS;gBAAE,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,OAA4B,CAAC,CAAC;YAC1G,IAAI,IAAI,KAAK,gBAAgB,IAAI,OAAO,KAAK,SAAS;gBAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,OAA6B,CAAC,CAAC;YACvG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC,CAAC;YAC5J,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI;YAAE,OAAO;QAClE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QAChD,IAAI,CAAC;YACH,IAAI,WAA+B,EAAE,SAAS,GAAG,EAAE,EAAE,KAAuC,CAAC;YAC7F,MAAM,IAAI,GAAG,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,SAAkB,EAAE,CAAC;YAC3I,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAAC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC3E,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,oBAAoB,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;YACnS,CAAC;iBAAM,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,IAA2B,CAAC;gBAAC,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACxE,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,aAAa,KAAK,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC7S,CAAC;iBAAM,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAuB,CAAC;gBACrC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC3U,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,OAAO,GAAG;oBACd,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3F,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvG,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;iBACvC,CAAC;gBACF,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;wBAC/F,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;wBAC1F,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;qBAC5F,EAAE,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1N,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;gBACzI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACzH,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBACvC,WAAW,GAAG,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;YAChF,CAAC;YACD,WAAW,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,OAAO,EAAE,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC/H,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;YAC9I,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACzH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YACpI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,EAAE,QAAQ,CAAC,CAAC;QAAC,CAAC;IACxH,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,OAAiB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,OAAoB;QACxC,sGAAsG;QACtG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC7H,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,OAAa,IAAiC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAI1H,IAAI,CAAC,IAAU,EAAE,SAAiB,EAAE,QAA6C;QACvF,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QACrG,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,MAAM,CAAC,IAAI,OAAO;oBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAClF,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACtB,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACrH,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5H,CAAC,CAAC,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IACO,MAAM,CAAC,CAAU,EAAE,KAA6B,EAAE,KAAa;QACrE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAAC,IAAI,CAAC,CAAC,KAAK;YAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACrF,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS;YAAE,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;YAAM,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;QAChG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACpF,CAAC;IACD,WAAW,CAAC,KAAqB,IAAU,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3L,OAAO,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,qCAAqC,CAAC,IAAU,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClN,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,QAAgB,EAAE,KAA0B;QACpE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,2DAA2D,CAAC,CAAC;QAC3K,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC5F,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,2CAA2C,CAAC,CAAC;QAClN,IAAI,KAAyE,EAAE,QAA0C,CAAC;QAC1H,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjC,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;YAC/K,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,2CAA2C,CAAC,CAAC;YAC7F,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;gBAC5I,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5H,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;YAC7M,KAAK,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QACjH,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAC;YAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,EAAE,KAAK,CAAC;YACnE,KAAK,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,aAAa,EAAE,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACvO,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5M,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;QACnB,MAAM,YAAY,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvG,yFAAyF;QACzF,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,GAAoB,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB,IAAI,MAAM,CAAC,CAAC;QAClK,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK;gBAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9J,IAAI,CAAC;gBACH,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACtF,IAAI,CAAC,GAAG,CAAC,OAAO;wBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC,CAAC;gBAC5G,CAAC,EAAE,MAAM,CAAC,CAAC;YACb,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QACpC,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAAE,CAAC,CAAC,QAAS,CAAC,OAAO,CAAC,KAAsB,CAAC,CAAC;aAC3E,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB;YAAE,CAAC,CAAC,IAAK,CAAC,OAAO,CAAC,KAA2B,CAAC,CAAC;;YAC9E,CAAC,CAAC,WAAY,CAAC,OAAO,CAAC,KAA0B,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { ProviderEntry } from "./types.js";
2
+ export declare const copilotOwner: (raw: unknown) => string;
3
+ export declare class CopilotProjection {
4
+ private readonly session;
5
+ private readonly emit;
6
+ private readonly content;
7
+ private readonly finalized;
8
+ private readonly tools;
9
+ constructor(session: string, emit: (entry: ProviderEntry) => void);
10
+ accept(raw: unknown): void;
11
+ }
@@ -0,0 +1,93 @@
1
+ import { record, string } from "./native-rpc.js";
2
+ import { limited, nativeEntryId, readable } from "./projection.js";
3
+ export const copilotOwner = (raw) => { const event = record(raw); return string(event.agentId) || string(record(event.data).parentToolCallId); };
4
+ export class CopilotProjection {
5
+ session;
6
+ emit;
7
+ content = new Map();
8
+ finalized = new Set();
9
+ tools = new Map();
10
+ constructor(session, emit) {
11
+ this.session = session;
12
+ this.emit = emit;
13
+ }
14
+ accept(raw) {
15
+ const event = record(raw), data = record(event.data), type = string(event.type), owner = copilotOwner(raw);
16
+ const key = (kind, id) => `${owner}:${kind}:${id}`;
17
+ const base = (id) => ({ entryId: nativeEntryId(this.session, id), revision: "1" });
18
+ const error = (code, message) => this.emit({ ...base(key("error", string(event.id))), kind: "error", code, message: limited(message) });
19
+ if (["assistant.message_delta", "assistant.message", "assistant.reasoning_delta", "assistant.reasoning"].includes(type)) {
20
+ const reasoning = type.startsWith("assistant.reasoning"), id = string(reasoning ? data.reasoningId : data.messageId);
21
+ if (!id) {
22
+ error("invalid_native_content", "Copilot message identity is unavailable.");
23
+ return;
24
+ }
25
+ const item = key(reasoning ? "reasoning" : "message", id), delta = type.endsWith("_delta");
26
+ if (this.finalized.has(item))
27
+ return;
28
+ const text = delta ? ((this.content.get(item) ?? "") + string(data.deltaContent)).slice(0, 200_001) : string(data.content);
29
+ if (delta)
30
+ this.content.set(item, text);
31
+ else {
32
+ this.finalized.add(item);
33
+ this.content.delete(item);
34
+ }
35
+ if (!text.trim())
36
+ return;
37
+ const displayed = owner ? `[Subagent ${owner}]\n${limited(text)}` : limited(text);
38
+ this.emit(reasoning ? { ...base(item), kind: "reasoning", text: displayed } : { ...base(item), kind: "assistant_message", content: [{ type: "text", text: displayed }] });
39
+ }
40
+ else if (type === "user.message") {
41
+ const text = string(data.content);
42
+ if (text.trim())
43
+ this.emit({ ...base(key("user", string(event.id))), kind: "user_message", content: [{ type: "text", text: limited(text) }] });
44
+ if (Array.isArray(data.attachments) && data.attachments.length)
45
+ error("unsupported_native_resource", "Copilot native attachments are unavailable in this text session.");
46
+ }
47
+ else if (type.startsWith("tool.execution_")) {
48
+ const callId = string(data.toolCallId);
49
+ if (!callId)
50
+ return;
51
+ const item = key("tool", callId), old = this.tools.get(item);
52
+ if (old && old.status !== "running")
53
+ return;
54
+ if (type === "tool.execution_start") {
55
+ const name = string(data.toolName) || "Copilot tool";
56
+ const entry = { ...base(item), kind: "tool_call", callId, name: owner ? `[Subagent ${owner}] ${name}` : name, input: limited(readable(data.arguments)), output: [], status: "running", truncated: false };
57
+ this.tools.set(item, entry);
58
+ this.emit(entry);
59
+ }
60
+ else if (type === "tool.execution_partial_result" && old) {
61
+ const text = (old.output.map(part => part.type === "text" ? part.text : "").join("") + string(data.partialOutput)).slice(0, 200_001);
62
+ const entry = { ...old, output: text.trim() ? [{ type: "text", text: limited(text) }] : [], truncated: old.truncated || text.length > 200_000 };
63
+ this.tools.set(item, entry);
64
+ this.emit(entry);
65
+ }
66
+ else if (type === "tool.execution_complete") {
67
+ const result = record(data.result);
68
+ // Native summary and UI detail often contain the same complete output.
69
+ // Deduplicate whole fields only: repeated lines inside native output are meaningful.
70
+ // https://github.com/xuangong/agent-remote-control/blob/7905c9e2d4a2beb28e84b954a29da3778094e384/packages/agent-provider-copilot/src/tool-result.ts
71
+ const outputs = typeof data.result === "string" ? [data.result] : [result.content, result.detailedContent, result.structuredContent].filter(value => value !== undefined).map(readable);
72
+ // Keep the failure visible even when the accompanying result exceeds the text limit.
73
+ if (data.success === false)
74
+ outputs.unshift(string(record(data.error).message) || "Native tool failed.");
75
+ const text = [...new Set(outputs.filter(value => value.length > 0))].join("\n");
76
+ const entry = { ...(old ?? { ...base(item), kind: "tool_call", callId, name: "Copilot tool", input: "" }), status: data.success ? "completed" : "failed", output: text.trim() ? [{ type: "text", text: limited(text) }] : [], truncated: text.length > 200_000 };
77
+ this.tools.set(item, entry);
78
+ this.emit(entry);
79
+ }
80
+ }
81
+ else if (type === "session.compaction_complete") {
82
+ if (data.success)
83
+ this.emit({ ...base(key("compaction", string(event.id))), kind: "compaction", summary: "Native conversation context compacted." });
84
+ else
85
+ error("native_compaction_failed", `Copilot compaction failed: ${string(data.error) || "Unknown native error"}`);
86
+ }
87
+ else if (type === "session.error")
88
+ error("native_session_error", string(data.message) || "Copilot session failed.");
89
+ else if (type === "session.binary_asset")
90
+ error("unsupported_native_resource", "Copilot native binary content is unavailable in this text session.");
91
+ }
92
+ }
93
+ //# sourceMappingURL=copilot-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-projection.js","sourceRoot":"","sources":["../../../../src/commands/controller/providers/copilot-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAInE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAU,EAAE,GAAG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAElK,MAAM,OAAO,iBAAiB;IAIC,OAAO;IAA2B,IAAI;IAHlD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtD,YAA6B,OAAe,EAAmB,IAAoC;uBAAtE,OAAO;oBAA2B,IAAI;IAAmC,CAAC;IACvG,MAAM,CAAC,GAAY;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3G,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3F,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxJ,IAAI,CAAC,yBAAyB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxH,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrH,IAAI,CAAC,EAAE,EAAE,CAAC;gBAAC,KAAK,CAAC,wBAAwB,EAAE,0CAA0C,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACjG,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3F,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3H,IAAI,KAAK;gBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAAM,CAAC;gBAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YACtG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5K,CAAC;aAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/I,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;gBAAE,KAAK,CAAC,6BAA6B,EAAE,kEAAkE,CAAC,CAAC;QAC3K,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO;YAC5C,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;gBACrD,MAAM,KAAK,GAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBACrN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,IAAI,KAAK,+BAA+B,IAAI,GAAG,EAAE,CAAC;gBAC3D,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrI,MAAM,KAAK,GAAc,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;gBAC3J,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,IAAI,KAAK,yBAAyB,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnC,uEAAuE;gBACvE,qFAAqF;gBACrF,oJAAoJ;gBACpJ,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxL,qFAAqF;gBACrF,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;oBAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,qBAAqB,CAAC,CAAC;gBACzG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChF,MAAM,KAAK,GAAc,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;gBAC5Q,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,6BAA6B,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC,CAAC;;gBAChJ,KAAK,CAAC,0BAA0B,EAAE,8BAA8B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QACvH,CAAC;aAAM,IAAI,IAAI,KAAK,eAAe;YAAE,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;aACjH,IAAI,IAAI,KAAK,sBAAsB;YAAE,KAAK,CAAC,6BAA6B,EAAE,oEAAoE,CAAC,CAAC;IACvJ,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { CopilotClient } from "@github/copilot-sdk";
2
+ import type { ProviderOptions } from "./types.js";
3
+ export declare const copilotDeadline: <T>(promise: Promise<T>, label: string, ms?: number) => Promise<T>;
4
+ export declare const copilotExecutable: () => string;
5
+ export declare const startCopilotRuntime: (options: ProviderOptions, lost: (error: Error) => void) => {
6
+ child: import("child_process").ChildProcessByStdio<null, import("stream").Readable, import("stream").Readable>;
7
+ ready: Promise<CopilotClient>;
8
+ close: () => Promise<void>;
9
+ };
@@ -0,0 +1,127 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomBytes } from "node:crypto";
3
+ import { createRequire } from "node:module";
4
+ import { CopilotClient, RuntimeConnection } from "@github/copilot-sdk";
5
+ export const copilotDeadline = (promise, label, ms = 30_000) => new Promise((resolve, reject) => {
6
+ const timer = setTimeout(() => reject(new Error(`${label} timed out; its result is unknown.`)), ms);
7
+ promise.then(value => { clearTimeout(timer); resolve(value); }, error => { clearTimeout(timer); reject(error); });
8
+ });
9
+ // The npm loader uses spawnSync. Spawn its platform executable directly so the
10
+ // child proof and shutdown signal identify the runtime, rather than a wrapper.
11
+ export const copilotExecutable = () => {
12
+ const require = createRequire(createRequire(import.meta.url).resolve("@github/copilot/package.json"));
13
+ const platforms = process.platform === "linux" && require("detect-libc").isNonGlibcLinuxSync() ? ["linuxmusl", "linux"] : [process.platform];
14
+ for (const platform of platforms)
15
+ try {
16
+ return require.resolve(`@github/copilot-${platform}-${process.arch}`);
17
+ }
18
+ catch { /* Try the CLI's supported platform fallback. */ }
19
+ throw new Error("The installed Copilot CLI has no native package for this platform.");
20
+ };
21
+ export const startCopilotRuntime = (options, lost) => {
22
+ const token = randomBytes(32).toString("hex"), executable = options.executable ?? copilotExecutable();
23
+ const env = { ...(options.env ?? process.env), COPILOT_CONNECTION_TOKEN: token };
24
+ delete env.NODE_DEBUG;
25
+ const js = /\.[cm]?js$/i.test(executable);
26
+ const child = spawn(js ? process.execPath : executable, [...(js ? [executable] : []), "--headless", "--no-auto-update", ...(options.unattended && !options.resumeNativeSessionId ? ["--allow-all", "--no-ask-user", "--no-sandbox"] : [])], { cwd: options.cwd, env, stdio: ["ignore", "pipe", "pipe"], detached: false, windowsHide: true });
27
+ let closing = false, client, closePromise;
28
+ let stopped = false;
29
+ const exited = new Promise(resolve => child.once("exit", () => { stopped = true; resolve(); }));
30
+ const failed = new Promise((_, reject) => {
31
+ child.once("error", error => { if (!closing) {
32
+ reject(error);
33
+ lost(new Error("Native Copilot runtime failed; operation results are unknown."));
34
+ } });
35
+ child.once("exit", () => { if (!closing) {
36
+ const error = new Error("Native Copilot runtime stopped; operation results are unknown.");
37
+ reject(error);
38
+ lost(error);
39
+ } });
40
+ });
41
+ void failed.catch(() => { });
42
+ const spawned = new Promise((resolve, reject) => child.once("spawn", () => {
43
+ try {
44
+ options.onSpawn(child);
45
+ resolve();
46
+ }
47
+ catch (error) {
48
+ reject(error);
49
+ }
50
+ }));
51
+ const listening = new Promise((resolve, reject) => {
52
+ let buffer = "", found = false;
53
+ child.stdout.on("data", chunk => {
54
+ if (found)
55
+ return;
56
+ buffer += String(chunk);
57
+ if (Buffer.byteLength(buffer) > 65_536) {
58
+ found = true;
59
+ reject(new Error("Native Copilot startup output exceeds its limit."));
60
+ return;
61
+ }
62
+ const complete = buffer.slice(0, buffer.lastIndexOf("\n") + 1);
63
+ const port = /listening on port (\d+)[ \t]*\r?\n/i.exec(complete)?.[1];
64
+ if (port) {
65
+ found = true;
66
+ const value = Number(port);
67
+ if (value >= 1 && value <= 65535)
68
+ resolve(value);
69
+ else
70
+ reject(new Error("Invalid native Copilot listener port."));
71
+ }
72
+ });
73
+ });
74
+ child.stderr.on("data", chunk => options.onDiagnostic?.(String(chunk).slice(0, 65_536)));
75
+ const ready = copilotDeadline(Promise.race([Promise.all([spawned, listening]), failed]), "Copilot runtime startup", 15_000).then(async ([, port]) => {
76
+ if (closing)
77
+ throw new Error("Copilot runtime closed during startup.");
78
+ client = new CopilotClient({ connection: RuntimeConnection.forUri(`127.0.0.1:${port}`, { connectionToken: token }) });
79
+ await copilotDeadline(Promise.race([client.start(), failed]), "Copilot SDK connection", 15_000);
80
+ if (closing)
81
+ throw new Error("Copilot runtime closed during connection.");
82
+ return client;
83
+ });
84
+ const close = () => closePromise ??= (async () => {
85
+ closing = true;
86
+ const errors = [];
87
+ if (client) {
88
+ // forUri treats the runtime as external, so the owner sends this public
89
+ // shutdown request before disposing the SDK connection.
90
+ try {
91
+ await copilotDeadline(client.rpc.runtime.shutdown(), "Copilot runtime shutdown", 1500);
92
+ }
93
+ catch (error) {
94
+ errors.push(error);
95
+ }
96
+ try {
97
+ const result = await copilotDeadline(client.stop(), "Copilot SDK shutdown", 3000);
98
+ if (result.length)
99
+ errors.push(...result);
100
+ }
101
+ catch (error) {
102
+ errors.push(error);
103
+ }
104
+ if (errors.length)
105
+ try {
106
+ await copilotDeadline(client.forceStop(), "Copilot SDK transport shutdown", 1000);
107
+ }
108
+ catch (error) {
109
+ errors.push(error);
110
+ }
111
+ }
112
+ if (!stopped && child.pid && child.exitCode === null && child.signalCode === null) {
113
+ try {
114
+ child.kill("SIGTERM");
115
+ await copilotDeadline(exited, "Copilot process termination", 2000);
116
+ }
117
+ catch {
118
+ child.kill("SIGKILL");
119
+ await copilotDeadline(exited, "Copilot process kill", 2000);
120
+ }
121
+ }
122
+ if (errors.length)
123
+ options.onDiagnostic?.("Copilot SDK graceful shutdown failed; the owned runtime was terminated.");
124
+ })();
125
+ return { child, ready, close };
126
+ };
127
+ //# sourceMappingURL=copilot-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-runtime.js","sourceRoot":"","sources":["../../../../src/commands/controller/providers/copilot-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { NativeProvider, ProviderOptions } from "./types.js";
2
+ export declare const openCopilotProvider: (options: ProviderOptions) => Promise<NativeProvider>;