@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,199 @@
1
+ import { createHash } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { open, opendir } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { ProviderControls, controlDeadline, controlError, uniqueOptions, sameControlValue } from "./controls.js";
6
+ import { record, string, NativeRpcError } from "./native-rpc.js";
7
+ export class CodexControls {
8
+ rpc;
9
+ session;
10
+ turn;
11
+ cwd;
12
+ home;
13
+ confirmed;
14
+ store;
15
+ native = {};
16
+ sandboxPolicies = new Map();
17
+ models = [];
18
+ requirements = null;
19
+ commands = new Map();
20
+ pending = new Map();
21
+ closed = false;
22
+ constructor(rpc, session, turn, cwd, home, changed, confirmed, revisionFloor = "0") {
23
+ this.rpc = rpc;
24
+ this.session = session;
25
+ this.turn = turn;
26
+ this.cwd = cwd;
27
+ this.home = home;
28
+ this.confirmed = confirmed;
29
+ this.store = new ProviderControls(changed, revisionFloor);
30
+ }
31
+ seed(value) { const raw = record(value); this.observe({ ...raw, ...(raw.sandbox ? { sandboxPolicy: raw.sandbox } : {}), ...(raw.reasoningEffort ? { effort: raw.reasoningEffort } : {}) }); }
32
+ observe(value) {
33
+ this.native = { ...this.native, ...record(value) };
34
+ const sandbox = record(this.native.sandboxPolicy);
35
+ if (typeof sandbox.type === "string")
36
+ this.sandboxPolicies.set(sandbox.type, structuredClone(sandbox));
37
+ this.describe();
38
+ for (const [id, pending] of this.pending)
39
+ if (Object.entries(pending.patch).every(([key, value]) => sameControlValue(this.native[key], value))) {
40
+ this.pending.delete(id);
41
+ pending.resolve();
42
+ this.confirmed?.(id);
43
+ }
44
+ }
45
+ describe(error = this.store.value.settingsError) {
46
+ const model = string(this.native.model) || null, selected = this.models.find(item => item.model === model);
47
+ const efforts = Array.isArray(selected?.supportedReasoningEfforts) ? selected.supportedReasoningEfforts.map(item => string(record(item).reasoningEffort)).filter(Boolean) : [];
48
+ const settings = [{ id: "model", category: "model", label: "Model", value: model, options: uniqueOptions(this.models.map(item => ({ value: string(item.model), label: string(item.displayName) || string(item.model) }))), mutable: this.models.length > 0, scope: "session", description: "Changes subsequent native steps when supported, and future turns." }];
49
+ if (efforts.length)
50
+ settings.push({ id: "effort", category: "reasoning", label: "Reasoning effort", value: string(this.native.effort) || string(selected?.defaultReasoningEffort) || null, options: uniqueOptions(efforts.map(value => ({ value, label: value }))), mutable: true, scope: "session", description: "The native model defines supported effort levels." });
51
+ const approval = this.native.approvalPolicy, sandbox = record(this.native.sandboxPolicy);
52
+ const allowed = (key, value) => !Array.isArray(this.requirements?.[key]) || this.requirements[key].includes(value);
53
+ settings.push({ id: "approval", category: "permission", label: "Approval policy", value: typeof approval === "string" ? approval : null, options: [{ value: "untrusted", label: "Untrusted" }, { value: "on-request", label: "On request" }, { value: "never", label: "Never ask" }].filter(item => allowed("allowedApprovalPolicies", item.value)), mutable: this.requirements !== null && typeof approval === "string", scope: "next_turn", description: "Approval policy for subsequent turns. Sandbox restrictions remain independent." });
54
+ const modes = { readOnly: "read-only", workspaceWrite: "workspace-write", dangerFullAccess: "danger-full-access" };
55
+ settings.push({ id: "sandbox", category: "permission", label: "Sandbox", value: string(sandbox.type) || null, options: [{ value: "readOnly", label: "Read only" }, { value: "workspaceWrite", label: "Workspace write" }, { value: "dangerFullAccess", label: "Full access" }].filter(item => allowed("allowedSandboxModes", modes[item.value])), mutable: this.requirements !== null && !!sandbox.type, scope: "next_turn", description: "Native sandbox for subsequent turns. Full access removes filesystem and network restrictions." });
56
+ this.store.update({ settings, settingsError: error });
57
+ }
58
+ async refresh() {
59
+ try {
60
+ const models = [], cursors = new Set();
61
+ let cursor;
62
+ do {
63
+ const result = record(await controlDeadline(this.rpc.request("model/list", { ...(cursor ? { cursor } : {}) }), "Codex model discovery"));
64
+ if (!Array.isArray(result.data))
65
+ throw new Error("Invalid native model catalog.");
66
+ models.push(...result.data.map(record).filter(item => item.hidden !== true && string(item.model)));
67
+ cursor = string(result.nextCursor) || undefined;
68
+ if (models.length > 500 || cursor && cursors.has(cursor))
69
+ throw new Error("Native model catalog exceeded its bound.");
70
+ if (cursor)
71
+ cursors.add(cursor);
72
+ } while (cursor);
73
+ this.models = models;
74
+ try {
75
+ const result = record(await this.rpc.request("configRequirements/read", {}));
76
+ this.requirements = result.requirements === null ? {} : result.requirements && typeof result.requirements === "object" && !Array.isArray(result.requirements) ? record(result.requirements) : null;
77
+ }
78
+ catch {
79
+ this.requirements = null;
80
+ }
81
+ this.describe(null);
82
+ }
83
+ catch (error) {
84
+ this.models = [];
85
+ this.requirements = null;
86
+ this.describe(controlError(error));
87
+ }
88
+ try {
89
+ const next = new Map([["compact", { kind: "compact" }]]);
90
+ const commands = [{ id: "compact", name: "compact", description: "Compact the current Codex thread", argumentHint: null, available: true }];
91
+ const result = record(await controlDeadline(this.rpc.request("skills/list", { cwds: [this.cwd], forceReload: true }), "Codex command discovery"));
92
+ if (!Array.isArray(result.data))
93
+ throw new Error("Invalid native skill directory.");
94
+ for (const group of result.data.map(record))
95
+ for (const raw of Array.isArray(group.skills) ? group.skills : []) {
96
+ const skill = record(raw), name = string(skill.name), path = string(skill.path);
97
+ if (group.cwd !== this.cwd || skill.enabled !== true || !name || !path || next.size >= 450)
98
+ continue;
99
+ const id = `skill:${createHash("sha256").update(path).digest("hex")}`;
100
+ next.set(id, { kind: "skill", name, path });
101
+ commands.push({ id, name, description: (string(skill.description) || "Codex skill").slice(0, 1000), argumentHint: "Instructions for this skill", available: true });
102
+ }
103
+ let directory;
104
+ try {
105
+ directory = await opendir(join(this.home, "prompts"));
106
+ }
107
+ catch (error) {
108
+ if (error.code !== "ENOENT")
109
+ throw error;
110
+ }
111
+ if (directory) {
112
+ let count = 0;
113
+ for await (const item of directory) {
114
+ if (++count > 1000)
115
+ throw new Error("Native prompt directory exceeded its bound.");
116
+ if (!item.isFile() || !/^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,127}\.md$/.test(item.name) || next.size >= 500)
117
+ continue;
118
+ const file = await open(join(this.home, "prompts", item.name), constants.O_RDONLY | constants.O_NOFOLLOW);
119
+ try {
120
+ const stat = await file.stat();
121
+ if (!stat.isFile() || stat.size > 262144)
122
+ continue;
123
+ const text = await file.readFile("utf8");
124
+ if (Buffer.byteLength(text) > 262144)
125
+ continue;
126
+ const body = text.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n/, ""), name = item.name.slice(0, -3), id = `prompt:${name}`;
127
+ next.set(id, { kind: "prompt", body });
128
+ commands.push({ id, name: `prompts:${name}`, description: "Custom Codex prompt", argumentHint: "Raw arguments ($ARGUMENTS only)", available: true });
129
+ }
130
+ finally {
131
+ await file.close();
132
+ }
133
+ }
134
+ }
135
+ this.commands = next;
136
+ this.store.update({ commands, commandsError: null });
137
+ }
138
+ catch (error) {
139
+ this.commands.clear();
140
+ this.store.update({ commands: [], commandsError: controlError(error) });
141
+ }
142
+ }
143
+ async set(id, value, operationId, revision) {
144
+ this.store.setting(id, value, revision);
145
+ if (this.closed)
146
+ throw new Error("Native session closed.");
147
+ const patch = id === "model" ? { model: value } : id === "effort" ? { effort: value } : id === "approval" ? { approvalPolicy: value } : { sandboxPolicy: this.sandbox(value) };
148
+ if (id === "model") {
149
+ const selected = this.models.find(item => item.model === value), efforts = Array.isArray(selected?.supportedReasoningEfforts) ? selected.supportedReasoningEfforts.map(item => string(record(item).reasoningEffort)) : [];
150
+ const effort = string(this.native.effort);
151
+ if (!efforts.includes(effort) && selected?.defaultReasoningEffort)
152
+ patch.effort = selected.defaultReasoningEffort;
153
+ }
154
+ const turnId = this.turn();
155
+ let liveApplied = false;
156
+ if (turnId && ["model", "effort"].includes(id)) {
157
+ const result = record(await this.rpc.request("turn/settings/update", { threadId: this.session(), turnId, ...patch }));
158
+ if (result.status !== "applied")
159
+ throw new NativeRpcError(-32602, "Native live model switching is unavailable. Wait for the current turn to finish.");
160
+ liveApplied = true;
161
+ }
162
+ let resolve, reject;
163
+ const confirmation = new Promise((done, fail) => { resolve = done; reject = fail; });
164
+ void confirmation.catch(() => { });
165
+ this.pending.set(operationId, { patch, resolve, reject });
166
+ try {
167
+ await this.rpc.request("thread/settings/update", { threadId: this.session(), ...patch });
168
+ }
169
+ catch (error) {
170
+ if (error instanceof NativeRpcError)
171
+ this.pending.delete(operationId);
172
+ if (liveApplied) {
173
+ const message = `Codex applied this setting to the current turn, but future-turn settings are unconfirmed: ${controlError(error)}`;
174
+ this.store.update({ settingsError: message });
175
+ throw new Error(message);
176
+ }
177
+ throw error;
178
+ }
179
+ await controlDeadline(confirmation, "Codex setting confirmation");
180
+ }
181
+ sandbox(type) {
182
+ const saved = this.sandboxPolicies.get(type);
183
+ if (saved)
184
+ return saved;
185
+ const old = record(this.native.sandboxPolicy);
186
+ if (old.type === type)
187
+ return old;
188
+ if (type === "dangerFullAccess")
189
+ return { type };
190
+ if (type === "readOnly")
191
+ return { type, networkAccess: false };
192
+ return { type, writableRoots: [], networkAccess: false, excludeTmpdirEnvVar: false, excludeSlashTmp: false };
193
+ }
194
+ command(id, revision) { this.store.command(id, revision); const command = this.commands.get(id); if (!command)
195
+ throw new NativeRpcError(-32602, "Command is no longer available."); return command; }
196
+ close() { this.closed = true; for (const item of this.pending.values())
197
+ item.reject(new Error("Native Codex closed before setting confirmation.")); this.pending.clear(); }
198
+ }
199
+ //# sourceMappingURL=controls-codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-codex.js","sourceRoot":"","sources":["../../../../src/commands/controller/providers/controls-codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { CopilotSession } from "@github/copilot-sdk";
2
+ import { ProviderControls } from "./controls.js";
3
+ export declare class CopilotControls {
4
+ private readonly native;
5
+ private readonly confirmed?;
6
+ private readonly skillDiscoveryError;
7
+ readonly store: ProviderControls;
8
+ private toolApproval;
9
+ private pending;
10
+ private pollTimer;
11
+ private polling;
12
+ private closed;
13
+ constructor(native: CopilotSession, changed: () => void, confirmed?: ((operationId: string) => void) | undefined, revisionFloor?: string, skillDiscoveryError?: string | null);
14
+ private permissions;
15
+ initialize(resume: boolean, unattended?: boolean): Promise<void>;
16
+ refresh(includeCommands?: boolean): Promise<void>;
17
+ set(id: string, value: string, operationId: string, revision: string): Promise<void>;
18
+ invoke(id: string, args: string, revision: string): ReturnType<CopilotSession["rpc"]["commands"]["invoke"]>;
19
+ close(): void;
20
+ }
@@ -0,0 +1,143 @@
1
+ import { ProviderControls, controlDeadline, controlError, uniqueOptions } from "./controls.js";
2
+ import { record, string, NativeRpcError } from "./native-rpc.js";
3
+ export class CopilotControls {
4
+ native;
5
+ confirmed;
6
+ skillDiscoveryError;
7
+ store;
8
+ toolApproval = null;
9
+ pending = new Map();
10
+ pollTimer;
11
+ polling = false;
12
+ closed = false;
13
+ constructor(native, changed, confirmed, revisionFloor = "0", skillDiscoveryError = null) {
14
+ this.native = native;
15
+ this.confirmed = confirmed;
16
+ this.skillDiscoveryError = skillDiscoveryError;
17
+ this.store = new ProviderControls(changed, revisionFloor);
18
+ }
19
+ permissions() { return { id: "tool_approval", category: "permission", label: "Tool approvals", value: this.toolApproval, mutable: typeof this.native.rpc.permissions.setApproveAll === "function", scope: "session", description: "Native tool approval policy. Existing grants, path and network permissions are independent.", options: [{ value: "ask", label: "Ask for approval" }, { value: "allow", label: "Allow tools" }] }; }
20
+ async initialize(resume, unattended = false) {
21
+ if (!resume && unattended) {
22
+ if (typeof this.native.rpc.permissions.configure !== "function")
23
+ throw new Error("Native Copilot cannot configure unattended full access.");
24
+ // SDK sessions have independent path and URL managers; runtime flags and
25
+ // setApproveAll alone do not authorize access outside the task worktree.
26
+ const result = await controlDeadline(this.native.rpc.permissions.configure({ approveAllToolPermissionRequests: true, approveAllReadPermissionRequests: true, paths: { unrestricted: true }, urls: { unrestricted: true } }), "Copilot full access initialization");
27
+ if (!result.success)
28
+ throw new Error("Copilot did not confirm unattended full access.");
29
+ this.toolApproval = "allow";
30
+ }
31
+ else if (!resume && typeof this.native.rpc.permissions.setApproveAll === "function") {
32
+ try {
33
+ const result = await controlDeadline(this.native.rpc.permissions.setApproveAll({ enabled: false }), "Copilot permission initialization");
34
+ if (!result.success)
35
+ throw new Error("Copilot did not confirm default tool permissions.");
36
+ this.toolApproval = "ask";
37
+ }
38
+ catch (error) {
39
+ this.store.update({ settingsError: controlError(error) });
40
+ }
41
+ }
42
+ if (!resume && unattended && this.toolApproval !== "allow")
43
+ throw new Error("Native Copilot cannot confirm unattended tool permissions.");
44
+ await this.refresh();
45
+ }
46
+ async refresh(includeCommands = true) {
47
+ try {
48
+ const [current, listing] = await Promise.all([controlDeadline(this.native.rpc.model.getCurrent(), "Copilot current model"), controlDeadline(this.native.rpc.model.list(), "Copilot models")]);
49
+ if (this.closed)
50
+ return;
51
+ if (!Array.isArray(listing.list) || listing.list.length > 500)
52
+ throw new Error("Invalid Copilot model catalog.");
53
+ const models = listing.list.map(record), metadata = models.find(model => model.id === current.modelId), supports = record(record(metadata?.capabilities).supports);
54
+ const levels = metadata?.supportedReasoningEfforts ?? supports.reasoning_effort;
55
+ const settings = [{ id: "model", category: "model", label: "Model", value: current.modelId ?? null, mutable: models.length > 0, scope: "next_turn", description: "Native model switches can remain queued until the current turn finishes.", options: uniqueOptions(models.map(model => ({ value: string(model.id), label: string(model.name) || string(model.id) }))) }, this.permissions()];
56
+ if (Array.isArray(levels) && levels.length)
57
+ settings.push({ id: "effort", category: "reasoning", label: "Reasoning effort", value: current.reasoningEffort ?? null, mutable: true, scope: "next_turn", description: "Omitted effort follows native defaults. Changes apply to subsequent turns.", options: uniqueOptions(levels.filter(value => typeof value === "string").map(value => ({ value, label: value }))) });
58
+ this.store.update({ settings, settingsError: null });
59
+ for (const [id, pending] of this.pending)
60
+ if (pending.model === current.modelId) {
61
+ this.pending.delete(id);
62
+ pending.resolve();
63
+ this.confirmed?.(id);
64
+ }
65
+ if (!this.pending.size && this.pollTimer) {
66
+ clearInterval(this.pollTimer);
67
+ this.pollTimer = undefined;
68
+ }
69
+ }
70
+ catch (error) {
71
+ if (!this.closed)
72
+ this.store.update({ settings: [this.permissions()], settingsError: controlError(error) });
73
+ }
74
+ if (!includeCommands)
75
+ return;
76
+ try {
77
+ if (this.skillDiscoveryError)
78
+ throw new Error(this.skillDiscoveryError);
79
+ await controlDeadline(this.native.rpc.skills.ensureLoaded(), "Copilot skill loading");
80
+ const { skills } = await controlDeadline(this.native.rpc.skills.list(), "Copilot skill listing");
81
+ if (this.closed)
82
+ return;
83
+ const commands = skills.filter(skill => skill.enabled && skill.userInvocable).map(skill => ({ id: skill.name, name: skill.commandName ?? skill.name, description: (skill.description || "Copilot skill").slice(0, 1000), argumentHint: skill.argumentHint?.slice(0, 1000) || null, available: true }));
84
+ if (commands.length > 500)
85
+ throw new Error("Copilot command directory exceeded its bound.");
86
+ this.store.update({ commands, commandsError: null });
87
+ }
88
+ catch (error) {
89
+ if (!this.closed)
90
+ this.store.update({ commands: [], commandsError: controlError(error) });
91
+ }
92
+ }
93
+ async set(id, value, operationId, revision) {
94
+ this.store.setting(id, value, revision);
95
+ if (this.closed)
96
+ throw new Error("Native session closed.");
97
+ if (id === "tool_approval") {
98
+ const operation = this.native.rpc.permissions.setApproveAll({ enabled: value === "allow" }).then(result => { if (!result.success)
99
+ throw new Error("Copilot did not confirm tool permission update."); if (this.closed)
100
+ throw new Error("Native session closed."); this.toolApproval = value; this.store.update({ settings: [...this.store.value.settings.filter(item => item.id !== id), this.permissions()] }); this.confirmed?.(operationId); });
101
+ try {
102
+ await controlDeadline(operation, "Copilot permission update");
103
+ }
104
+ catch (error) {
105
+ this.toolApproval = null;
106
+ this.store.update({ settings: [...this.store.value.settings.filter(item => item.id !== id), this.permissions()], settingsError: controlError(error) });
107
+ throw error;
108
+ }
109
+ return;
110
+ }
111
+ if (id === "effort") {
112
+ await controlDeadline(this.native.rpc.model.setReasoningEffort({ reasoningEffort: value }), "Copilot effort update");
113
+ await this.refresh();
114
+ if (this.store.value.settings.find(item => item.id === id)?.value !== value)
115
+ throw new Error("Copilot did not confirm applied effort.");
116
+ this.confirmed?.(operationId);
117
+ return;
118
+ }
119
+ const response = await controlDeadline(this.native.rpc.model.switchTo({ modelId: value, deferIfModelChangeQueued: true }), "Copilot model update");
120
+ let resolve, reject;
121
+ const confirmation = new Promise((ok, fail) => { resolve = ok; reject = fail; });
122
+ void confirmation.catch(() => { });
123
+ this.pending.set(operationId, { model: value, resolve, reject });
124
+ await this.refresh();
125
+ if (this.pending.has(operationId)) {
126
+ if (!response.deferred) {
127
+ this.pending.delete(operationId);
128
+ throw new Error("Copilot model readback did not match the requested model.");
129
+ }
130
+ this.pollTimer ??= setInterval(() => { if (this.polling || this.closed)
131
+ return; this.polling = true; void this.refresh(false).finally(() => { this.polling = false; }); }, 1000);
132
+ this.pollTimer.unref();
133
+ }
134
+ await controlDeadline(confirmation, "Copilot queued model confirmation");
135
+ }
136
+ async invoke(id, args, revision) { const command = this.store.command(id, revision); if (this.closed)
137
+ throw new NativeRpcError(-32602, "Native session closed."); const result = await controlDeadline(this.native.rpc.commands.invoke({ name: command.name, input: args }), "Copilot command"); if (result.runtimeSettingsChanged)
138
+ await this.refresh(); return result; }
139
+ close() { this.closed = true; if (this.pollTimer)
140
+ clearInterval(this.pollTimer); for (const item of this.pending.values())
141
+ item.reject(new Error("Native Copilot closed before model confirmation.")); this.pending.clear(); }
142
+ }
143
+ //# sourceMappingURL=controls-copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-copilot.js","sourceRoot":"","sources":["../../../../src/commands/controller/providers/controls-copilot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type SessionControls, type SessionSetting, type SessionNativeCommand } from "../../../session/controls.js";
2
+ export type { SessionControls, SessionSetting, SessionNativeCommand };
3
+ export declare const controlError: (error: unknown) => string;
4
+ export declare const controlDeadline: <T>(operation: Promise<T>, label: string, ms?: number) => Promise<T>;
5
+ export declare class ProviderControls {
6
+ private readonly changed;
7
+ value: SessionControls;
8
+ constructor(changed: () => void, floor?: string);
9
+ update(patch: Partial<Omit<SessionControls, "revision">>): void;
10
+ requireRevision(revision: string): void;
11
+ setting(id: string, value: string, revision: string): SessionSetting;
12
+ command(id: string, revision: string): SessionNativeCommand;
13
+ }
14
+ export declare const uniqueOptions: (values: readonly {
15
+ value: string;
16
+ label: string;
17
+ }[]) => {
18
+ value: string;
19
+ label: string;
20
+ }[];
21
+ export declare const sameControlValue: (left: unknown, right: unknown) => boolean;
@@ -0,0 +1,53 @@
1
+ import { parseSessionControls } from "../../../session/controls.js";
2
+ import { NativeRpcError } from "./native-rpc.js";
3
+ export const controlError = (error) => (error instanceof Error ? error.message : String(error)).slice(0, 1000) || "Native controls unavailable.";
4
+ export const controlDeadline = (operation, label, ms = 30_000) => new Promise((resolve, reject) => {
5
+ const timer = setTimeout(() => reject(new Error(`${label} was not confirmed. Check native state before retrying.`)), ms);
6
+ operation.then(result => { clearTimeout(timer); resolve(result); }, error => { clearTimeout(timer); reject(error); });
7
+ });
8
+ export class ProviderControls {
9
+ changed;
10
+ value = { revision: "1", settings: [], commands: [], settingsError: null, commandsError: null };
11
+ constructor(changed, floor = "0") {
12
+ this.changed = changed;
13
+ if (!/^(0|[1-9][0-9]{0,18})$/.test(floor))
14
+ throw new Error("Invalid native control revision floor.");
15
+ this.value = parseSessionControls({ ...this.value, revision: String(BigInt(floor) + 1n) });
16
+ }
17
+ update(patch) {
18
+ const next = { ...this.value, ...patch };
19
+ if (sameControlValue(next, this.value))
20
+ return;
21
+ this.value = parseSessionControls({ ...next, revision: String(BigInt(this.value.revision) + 1n) });
22
+ this.changed();
23
+ }
24
+ requireRevision(revision) { if (revision !== this.value.revision)
25
+ throw new NativeRpcError(-32602, "The native control directory changed. Refresh and choose again."); }
26
+ setting(id, value, revision) {
27
+ this.requireRevision(revision);
28
+ const setting = this.value.settings.find(item => item.id === id);
29
+ if (!setting?.mutable || !setting.options.some(option => option.value === value))
30
+ throw new NativeRpcError(-32602, "The requested native setting is unavailable.");
31
+ return setting;
32
+ }
33
+ command(id, revision) {
34
+ this.requireRevision(revision);
35
+ const command = this.value.commands.find(item => item.id === id);
36
+ if (!command?.available)
37
+ throw new NativeRpcError(-32602, "The requested native command is unavailable.");
38
+ return command;
39
+ }
40
+ }
41
+ export const uniqueOptions = (values) => [...new Map(values.filter(item => item.value && item.label).map(item => [item.value, item])).values()].slice(0, 500);
42
+ export const sameControlValue = (left, right) => {
43
+ if (left === right)
44
+ return true;
45
+ if (Array.isArray(left) && Array.isArray(right))
46
+ return left.length === right.length && left.every((value, index) => sameControlValue(value, right[index]));
47
+ if (left && right && typeof left === "object" && typeof right === "object" && !Array.isArray(left) && !Array.isArray(right)) {
48
+ const a = left, b = right;
49
+ return Object.keys(a).length === Object.keys(b).length && Object.keys(a).every(key => sameControlValue(a[key], b[key]));
50
+ }
51
+ return false;
52
+ };
53
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../../src/commands/controller/providers/controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { CopilotSession, ElicitationResult, ExitPlanModeResult, SessionConfig, SessionEvent } from "@github/copilot-sdk";
2
+ import { type InteractionResponse } from "../../../session/protocol.js";
3
+ import type { ProviderEntry, ProviderReceipt } from "./types.js";
4
+ type Question = Parameters<NonNullable<SessionConfig["onUserInputRequest"]>>[0];
5
+ type QuestionReply = {
6
+ answer: string;
7
+ wasFreeform: boolean;
8
+ };
9
+ type Elicitation = Parameters<NonNullable<SessionConfig["onElicitationRequest"]>>[0];
10
+ type Plan = Parameters<NonNullable<SessionConfig["onExitPlanModeRequest"]>>[0];
11
+ type Permission = Parameters<CopilotSession["rpc"]["permissions"]["handlePendingPermissionRequest"]>[0];
12
+ export type CopilotInteractionOptions = {
13
+ sessionId: string;
14
+ onTimeline(entry: ProviderEntry): void;
15
+ onChange(): void;
16
+ permissionRpc(input: Permission): Promise<{
17
+ success: boolean;
18
+ }>;
19
+ confirmationTimeoutMs?: number;
20
+ };
21
+ /** SDK callbacks carry no request ID; only an unambiguous full payload can bind them to a native event. */
22
+ export declare class CopilotInteractions {
23
+ private readonly options;
24
+ private readonly pending;
25
+ private readonly history;
26
+ private readonly seen;
27
+ private readonly tools;
28
+ private closed;
29
+ constructor(options: CopilotInteractionOptions);
30
+ get waiting(): boolean;
31
+ get pendingIds(): readonly string[];
32
+ onPermissionRequest(): {
33
+ kind: "no-result";
34
+ };
35
+ private publish;
36
+ private error;
37
+ accept(event: SessionEvent, history?: boolean): void;
38
+ bindQuestion(payload: Question): Promise<QuestionReply>;
39
+ bindElicitation(payload: Elicitation): Promise<ElicitationResult>;
40
+ bindPlan(payload: Plan): Promise<ExitPlanModeResult>;
41
+ private bind;
42
+ private retire;
43
+ cancelOwner(owner?: string | null): void;
44
+ dispose(error?: Error): void;
45
+ respond(id: string, revision: string, input: InteractionResponse): Promise<ProviderReceipt>;
46
+ }
47
+ export {};