@codetreker/daynight 0.25.4 → 0.27.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -11
- package/config.example.yml +3 -0
- package/dist/api/client.d.ts +3 -2
- package/dist/api/client.js +10 -6
- package/dist/api/client.js.map +1 -1
- package/dist/api/parse.d.ts +3 -2
- package/dist/api/parse.js +59 -10
- package/dist/api/parse.js.map +1 -1
- package/dist/api/types.d.ts +75 -1
- package/dist/api/worker-mode.d.ts +6 -0
- package/dist/api/worker-mode.js +14 -0
- package/dist/api/worker-mode.js.map +1 -0
- package/dist/cli/commands.js +2 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/commands/controller/command-controls.d.ts +4 -0
- package/dist/commands/controller/command-controls.js +33 -0
- package/dist/commands/controller/command-controls.js.map +1 -0
- package/dist/commands/controller/definition.d.ts +3 -0
- package/dist/commands/controller/definition.js +22 -0
- package/dist/commands/controller/definition.js.map +1 -0
- package/dist/commands/controller/independent.d.ts +3 -0
- package/dist/commands/controller/independent.js +344 -0
- package/dist/commands/controller/independent.js.map +1 -0
- package/dist/commands/controller/index.d.ts +12 -0
- package/dist/commands/controller/index.js +73 -0
- package/dist/commands/controller/index.js.map +1 -0
- package/dist/commands/controller/launch-ticket.d.ts +49 -0
- package/dist/commands/controller/launch-ticket.js +99 -0
- package/dist/commands/controller/launch-ticket.js.map +1 -0
- package/dist/commands/controller/lifecycle-store.d.ts +84 -0
- package/dist/commands/controller/lifecycle-store.js +278 -0
- package/dist/commands/controller/lifecycle-store.js.map +1 -0
- package/dist/commands/controller/local-client.d.ts +44 -0
- package/dist/commands/controller/local-client.js +75 -0
- package/dist/commands/controller/local-client.js.map +1 -0
- package/dist/commands/controller/local-content.d.ts +23 -0
- package/dist/commands/controller/local-content.js +103 -0
- package/dist/commands/controller/local-content.js.map +1 -0
- package/dist/commands/controller/process-proof.d.ts +13 -0
- package/dist/commands/controller/process-proof.js +121 -0
- package/dist/commands/controller/process-proof.js.map +1 -0
- package/dist/commands/controller/providers/claude.d.ts +2 -0
- package/dist/commands/controller/providers/claude.js +470 -0
- package/dist/commands/controller/providers/claude.js.map +1 -0
- package/dist/commands/controller/providers/codex.d.ts +2 -0
- package/dist/commands/controller/providers/codex.js +254 -0
- package/dist/commands/controller/providers/codex.js.map +1 -0
- package/dist/commands/controller/providers/controls-claude.d.ts +26 -0
- package/dist/commands/controller/providers/controls-claude.js +138 -0
- package/dist/commands/controller/providers/controls-claude.js.map +1 -0
- package/dist/commands/controller/providers/controls-codex.d.ts +38 -0
- package/dist/commands/controller/providers/controls-codex.js +199 -0
- package/dist/commands/controller/providers/controls-codex.js.map +1 -0
- package/dist/commands/controller/providers/controls-copilot.d.ts +20 -0
- package/dist/commands/controller/providers/controls-copilot.js +143 -0
- package/dist/commands/controller/providers/controls-copilot.js.map +1 -0
- package/dist/commands/controller/providers/controls.d.ts +21 -0
- package/dist/commands/controller/providers/controls.js +53 -0
- package/dist/commands/controller/providers/controls.js.map +1 -0
- package/dist/commands/controller/providers/copilot-interactions.d.ts +47 -0
- package/dist/commands/controller/providers/copilot-interactions.js +295 -0
- package/dist/commands/controller/providers/copilot-interactions.js.map +1 -0
- package/dist/commands/controller/providers/copilot-projection.d.ts +11 -0
- package/dist/commands/controller/providers/copilot-projection.js +93 -0
- package/dist/commands/controller/providers/copilot-projection.js.map +1 -0
- package/dist/commands/controller/providers/copilot-runtime.d.ts +9 -0
- package/dist/commands/controller/providers/copilot-runtime.js +127 -0
- package/dist/commands/controller/providers/copilot-runtime.js.map +1 -0
- package/dist/commands/controller/providers/copilot.d.ts +2 -0
- package/dist/commands/controller/providers/copilot.js +309 -0
- package/dist/commands/controller/providers/copilot.js.map +1 -0
- package/dist/commands/controller/providers/interactions.d.ts +3 -0
- package/dist/commands/controller/providers/interactions.js +79 -0
- package/dist/commands/controller/providers/interactions.js.map +1 -0
- package/dist/commands/controller/providers/native-rpc.d.ts +28 -0
- package/dist/commands/controller/providers/native-rpc.js +85 -0
- package/dist/commands/controller/providers/native-rpc.js.map +1 -0
- package/dist/commands/controller/providers/projection.d.ts +23 -0
- package/dist/commands/controller/providers/projection.js +99 -0
- package/dist/commands/controller/providers/projection.js.map +1 -0
- package/dist/commands/controller/providers/turns.d.ts +7 -0
- package/dist/commands/controller/providers/turns.js +21 -0
- package/dist/commands/controller/providers/turns.js.map +1 -0
- package/dist/commands/controller/providers/types.d.ts +44 -0
- package/dist/commands/controller/providers/types.js +2 -0
- package/dist/commands/controller/providers/types.js.map +1 -0
- package/dist/commands/controller/recovery.d.ts +6 -0
- package/dist/commands/controller/recovery.js +22 -0
- package/dist/commands/controller/recovery.js.map +1 -0
- package/dist/commands/controller/relay.d.ts +18 -0
- package/dist/commands/controller/relay.js +299 -0
- package/dist/commands/controller/relay.js.map +1 -0
- package/dist/commands/controller/resume.d.ts +18 -0
- package/dist/commands/controller/resume.js +193 -0
- package/dist/commands/controller/resume.js.map +1 -0
- package/dist/commands/controller/runtime.d.ts +5 -0
- package/dist/commands/controller/runtime.js +455 -0
- package/dist/commands/controller/runtime.js.map +1 -0
- package/dist/commands/controller/windows-job.d.ts +3 -0
- package/dist/commands/controller/windows-job.js +59 -0
- package/dist/commands/controller/windows-job.js.map +1 -0
- package/dist/commands/controller/wire-display.d.ts +5 -0
- package/dist/commands/controller/wire-display.js +11 -0
- package/dist/commands/controller/wire-display.js.map +1 -0
- package/dist/commands/skill/skills/using-daynight/SKILL.md +52 -162
- package/dist/commands/skill/skills/using-daynight/references/authorization.md +36 -0
- package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +77 -193
- package/dist/commands/skill/skills/using-daynight/references/create-task.md +31 -186
- package/dist/commands/skill/skills/using-daynight/references/final-acceptance.md +25 -0
- package/dist/commands/skill/skills/using-daynight/references/goal.md +46 -243
- package/dist/commands/skill/skills/using-daynight/references/handbook.md +37 -294
- package/dist/commands/skill/skills/using-daynight/references/handoff.md +33 -91
- package/dist/commands/skill/skills/using-daynight/references/project-management.md +24 -0
- package/dist/commands/skill/skills/using-daynight/references/run-task.md +18 -59
- package/dist/commands/skill/skills/using-daynight/references/setup.md +16 -0
- package/dist/commands/skill/skills/using-daynight/references/task-content.md +80 -177
- package/dist/commands/skill/skills/using-daynight/references/task-execution.md +34 -126
- package/dist/commands/skill/skills/using-daynight/references/task-management.md +135 -0
- package/dist/commands/skill/skills/using-daynight/references/write-safety.md +34 -0
- package/dist/commands/task/command.js +5 -3
- package/dist/commands/task/command.js.map +1 -1
- package/dist/commands/task/definition.js +4 -2
- package/dist/commands/task/definition.js.map +1 -1
- package/dist/commands/task/rendering.d.ts +1 -0
- package/dist/commands/task/rendering.js +10 -1
- package/dist/commands/task/rendering.js.map +1 -1
- package/dist/commands/worker/backend.d.ts +7 -0
- package/dist/commands/worker/backend.js +7 -0
- package/dist/commands/worker/backend.js.map +1 -0
- package/dist/commands/worker/backends/grant-renewal.d.ts +13 -0
- package/dist/commands/worker/backends/grant-renewal.js +42 -0
- package/dist/commands/worker/backends/grant-renewal.js.map +1 -0
- package/dist/commands/worker/backends/session-api.d.ts +66 -0
- package/dist/commands/worker/backends/session-api.js +84 -0
- package/dist/commands/worker/backends/session-api.js.map +1 -0
- package/dist/commands/worker/backends/web-process.d.ts +79 -0
- package/dist/commands/worker/backends/web-process.js +156 -0
- package/dist/commands/worker/backends/web-process.js.map +1 -0
- package/dist/commands/worker/backends/web-store.d.ts +49 -0
- package/dist/commands/worker/backends/web-store.js +323 -0
- package/dist/commands/worker/backends/web-store.js.map +1 -0
- package/dist/commands/worker/backends/web-types.d.ts +83 -0
- package/dist/commands/worker/backends/web-types.js +3 -0
- package/dist/commands/worker/backends/web-types.js.map +1 -0
- package/dist/commands/worker/backends/web.d.ts +26 -0
- package/dist/commands/worker/backends/web.js +178 -0
- package/dist/commands/worker/backends/web.js.map +1 -0
- package/dist/commands/worker/config.js +12 -5
- package/dist/commands/worker/config.js.map +1 -1
- package/dist/commands/worker/control.d.ts +2 -0
- package/dist/commands/worker/control.js +11 -4
- package/dist/commands/worker/control.js.map +1 -1
- package/dist/commands/worker/coordinator.d.ts +10 -1
- package/dist/commands/worker/coordinator.js +153 -24
- package/dist/commands/worker/coordinator.js.map +1 -1
- package/dist/commands/worker/herdr/agents.js +5 -4
- package/dist/commands/worker/herdr/agents.js.map +1 -1
- package/dist/commands/worker/herdr/arguments.js +9 -4
- package/dist/commands/worker/herdr/arguments.js.map +1 -1
- package/dist/commands/worker/herdr/claude-input.d.ts +2 -0
- package/dist/commands/worker/herdr/claude-input.js +20 -0
- package/dist/commands/worker/herdr/claude-input.js.map +1 -0
- package/dist/commands/worker/herdr/command.d.ts +11 -2
- package/dist/commands/worker/herdr/command.js +23 -8
- package/dist/commands/worker/herdr/command.js.map +1 -1
- package/dist/commands/worker/herdr/instance.d.ts +5 -1
- package/dist/commands/worker/herdr/instance.js +31 -1
- package/dist/commands/worker/herdr/instance.js.map +1 -1
- package/dist/commands/worker/herdr/preflight.d.ts +1 -1
- package/dist/commands/worker/herdr/preflight.js +34 -15
- package/dist/commands/worker/herdr/preflight.js.map +1 -1
- package/dist/commands/worker/herdr/version-probe.d.ts +13 -0
- package/dist/commands/worker/herdr/version-probe.js +21 -0
- package/dist/commands/worker/herdr/version-probe.js.map +1 -0
- package/dist/commands/worker/herdr.js +7 -7
- package/dist/commands/worker/herdr.js.map +1 -1
- package/dist/commands/worker/index.d.ts +2 -0
- package/dist/commands/worker/index.js +1 -1
- package/dist/commands/worker/index.js.map +1 -1
- package/dist/commands/worker/prompts.js +5 -1
- package/dist/commands/worker/prompts.js.map +1 -1
- package/dist/commands/worker/remote.d.ts +3 -1
- package/dist/commands/worker/remote.js +4 -0
- package/dist/commands/worker/remote.js.map +1 -1
- package/dist/commands/worker/reporter.d.ts +14 -0
- package/dist/commands/worker/reporter.js +174 -0
- package/dist/commands/worker/reporter.js.map +1 -0
- package/dist/commands/worker/repositories.js +2 -2
- package/dist/commands/worker/repositories.js.map +1 -1
- package/dist/commands/worker/runtime.d.ts +2 -0
- package/dist/commands/worker/runtime.js +76 -11
- package/dist/commands/worker/runtime.js.map +1 -1
- package/dist/commands/worker/setup-environment.d.ts +2 -1
- package/dist/commands/worker/setup-environment.js +10 -4
- package/dist/commands/worker/setup-environment.js.map +1 -1
- package/dist/commands/worker/setup.js +5 -5
- package/dist/commands/worker/setup.js.map +1 -1
- package/dist/commands/worker/store.d.ts +2 -1
- package/dist/commands/worker/store.js +19 -9
- package/dist/commands/worker/store.js.map +1 -1
- package/dist/commands/worker/telemetry.d.ts +22 -0
- package/dist/commands/worker/telemetry.js +265 -0
- package/dist/commands/worker/telemetry.js.map +1 -0
- package/dist/commands/worker/types.d.ts +4 -1
- package/dist/session/controller-protocol.d.ts +245 -0
- package/dist/session/controller-protocol.js +218 -0
- package/dist/session/controller-protocol.js.map +1 -0
- package/dist/session/controls.d.ts +28 -0
- package/dist/session/controls.js +37 -0
- package/dist/session/controls.js.map +1 -0
- package/dist/session/protocol.d.ts +290 -0
- package/dist/session/protocol.js +307 -0
- package/dist/session/protocol.js.map +1 -0
- 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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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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"}
|