Skip to content

Commit d1d9241

Browse files
authored
Fix Copilot SDK headless auth/driver path and tool-permission denials in daily workflows (#37322)
1 parent 09e4ca6 commit d1d9241

6 files changed

Lines changed: 41 additions & 36 deletions

File tree

.github/workflows/daily-syntax-error-quality.lock.yml

Lines changed: 2 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/workflows/daily-syntax-error-quality.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,7 @@ engine:
1616
copilot-sdk: true
1717
tools:
1818
cli-proxy: true
19-
bash:
20-
- "gh aw compile *"
21-
- "gh aw compile /tmp/gh-aw/agent/syntax-error-tests/*.md"
22-
- "head -n 30 /tmp/gh-aw/agent/candidates/"
23-
- "cp /tmp/gh-aw/agent/candidates/"
24-
- "cat /tmp/gh-aw/agent/syntax-error-tests/*.md"
25-
- "mkdir -p /tmp/gh-aw/agent/syntax-error-tests"
19+
bash: true
2620
safe-outputs:
2721
create-issue:
2822
expires: 3d

.github/workflows/daily-workflow-updater.lock.yml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/workflows/daily-workflow-updater.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ tracker-id: daily-workflow-updater
1818
engine:
1919
id: copilot
2020
copilot-sdk: true
21-
copilot-sdk-driver: .github/drivers/copilot_sdk_driver_sample_ruby.rb
2221
strict: true
2322

2423
network:

actions/setup/js/copilot_sdk_driver.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ function buildCopilotSDKPermissionHandler(permissionConfig, approveAll, logOptio
203203
case "write":
204204
return allowedToolEntries.has("write");
205205
case "read":
206-
return allowedToolEntries.has("read");
206+
return allowedToolEntries.has("read") || allowedToolEntries.has("shell");
207207
case "url":
208208
return allowedToolEntries.has("web_fetch");
209209
case "mcp":

actions/setup/js/copilot_sdk_driver.test.cjs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,41 @@ describe("copilot_sdk_driver.cjs", () => {
265265
expect(onPermissionRequest({ kind: "read", fileName: "a.txt" })).toEqual({ kind: "approve-once" });
266266
});
267267

268+
it("allows read requests when shell access is allowlisted", async () => {
269+
const disconnect = vi.fn().mockResolvedValue(undefined);
270+
const stop = vi.fn().mockResolvedValue(undefined);
271+
const createSession = vi.fn().mockResolvedValue({
272+
sessionId: "session-read-via-shell",
273+
on: () => {},
274+
sendAndWait: vi.fn().mockResolvedValue({ data: { content: "ok" } }),
275+
disconnect,
276+
});
277+
class FakeCopilotClient {
278+
start = vi.fn().mockResolvedValue(undefined);
279+
createSession = createSession;
280+
stop = stop;
281+
}
282+
283+
const result = await runWithCopilotSDK({
284+
sdkUri: "http://127.0.0.1:3002",
285+
prompt: "test prompt",
286+
logger: () => {},
287+
permissionConfig: {
288+
allowedTools: ["shell"],
289+
},
290+
sdkModule: {
291+
CopilotClient: FakeCopilotClient,
292+
RuntimeConnection: { forUri: vi.fn(() => ({})) },
293+
approveAll: () => ({ kind: "approve-once" }),
294+
},
295+
});
296+
297+
expect(result.exitCode).toBe(0);
298+
const sessionConfig = createSession.mock.calls[0][0];
299+
const onPermissionRequest = sessionConfig.onPermissionRequest;
300+
expect(onPermissionRequest({ kind: "read", fileName: "a.txt" })).toEqual({ kind: "approve-once" });
301+
});
302+
268303
it("logs permission-denied SDK requests as core warnings", async () => {
269304
const disconnect = vi.fn().mockResolvedValue(undefined);
270305
const stop = vi.fn().mockResolvedValue(undefined);

0 commit comments

Comments
 (0)