Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
1c2fad9
initial fix for issues #1240 and #505
DaubnerF Sep 1, 2026
d52e160
Merge branch 'main' into bugfix_for_1240_505
DaubnerF Sep 2, 2026
41a7698
1st round of fixes
DaubnerF Sep 2, 2026
a607ec9
Merge branch 'main' into bugfix_for_1240_505
DaubnerF Sep 2, 2026
f27387b
fixed comments
DaubnerF Sep 2, 2026
8f2245f
Merge branch 'main' into bugfix_for_1240_505
DaubnerF Sep 3, 2026
bc6f8ff
increase test coverage
DaubnerF Sep 3, 2026
6968a98
revert: remove Windows shell invocation from stryker-diff
DaubnerF Sep 4, 2026
e00a2b1
fix: address CodeRabbit review on tool-policy prompt unification
DaubnerF Sep 4, 2026
943a16e
fix(test): correct apiModelId in generateSystemPrompt state mock
DaubnerF Sep 4, 2026
bd7894c
drop use_mcp_tool from policy when no MCP tool is permitted
DaubnerF Sep 4, 2026
c289453
Merge branch 'main' into bugfix_for_1240_505
DaubnerF Sep 5, 2026
26a3a68
code hardening
DaubnerF Sep 7, 2026
198d865
initial implementation of blanket auto-deny commands
DaubnerF Sep 7, 2026
7e42bf5
Merge branch 'Zoo-Code-Org:main' into bugfix_for_1240_505
DaubnerF Sep 7, 2026
170fad0
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 7, 2026
528b023
bound model fetch with timeout, typed provider state test doubles
DaubnerF Sep 8, 2026
aa8f108
cover preview model fetch timeout path with tests
DaubnerF Sep 8, 2026
415422b
pin completion-time history save ordering with unit tests
DaubnerF Sep 8, 2026
1db50a1
poll history length in restart e2e to tolerate atomic write window
DaubnerF Sep 8, 2026
227ab61
Merge remote-tracking branch 'upstream/main' into bugfix_for_1240_505
DaubnerF Sep 8, 2026
6a769b5
share one model-info snapshot per request between prompt and tools
DaubnerF Sep 8, 2026
92c6f32
resolve provider state once before the MCP wait
DaubnerF Sep 8, 2026
2ce570a
cover the undefined provider state path in the system prompt tests
DaubnerF Sep 8, 2026
ac35870
reuse one model-info snapshot per request and honor cancellation
DaubnerF Sep 8, 2026
b75e73b
pin the retry count the request seam receives
DaubnerF Sep 8, 2026
b1236cd
refactor(task): require callers to thread provider state into system …
DaubnerF Sep 8, 2026
cbb13d3
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 9, 2026
85beb67
fix(api): cancel abandoned model-metadata waits via AbortSignal
DaubnerF Sep 9, 2026
d06883a
test(api): cover abort-signal detach paths and thread request model s…
DaubnerF Sep 9, 2026
7492e7b
Merge branch 'bugfix_for_1240_505' into blanket-auto-deny-commands
DaubnerF Sep 9, 2026
0c8fce9
test(webview): pin alwaysDenyUnapprovedCommands persistence through u…
DaubnerF Sep 9, 2026
2e4a823
chore: tighten blanket auto-deny comments and test names for accuracy
DaubnerF Sep 9, 2026
8b2400d
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 10, 2026
e0a638d
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 11, 2026
ff32e88
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 11, 2026
083c7f6
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 14, 2026
a5be701
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 15, 2026
c1378c6
Merge upstream/main (08d05eb0f) into blanket-auto-deny-commands
DaubnerF Sep 20, 2026
45b0ddb
test: remove out-of-scope Task history-persistence spec
DaubnerF Sep 20, 2026
c96cf92
test(auto-deny): pin AutoApprovalContext forwarding seam and fix stal…
DaubnerF Sep 20, 2026
fc8c08e
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 21, 2026
0837727
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 22, 2026
4576e51
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 23, 2026
984ddfc
test(webview): visual snapshot for blanket auto-deny checkbox
DaubnerF Sep 23, 2026
fb78031
test(core): unit coverage for blanket auto-deny reasons and edge cases
DaubnerF Sep 23, 2026
25aa92e
test(core): align auto-deny test fixtures with policy emission shapes
DaubnerF Sep 24, 2026
b430999
fix(core): deny verdictless DCG command asks with a retryable reason
DaubnerF Sep 24, 2026
1cf2fbe
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 24, 2026
0162e54
test(webview): cover blanket auto-deny toggle save round-trip
DaubnerF Sep 24, 2026
a8a7187
fix(task): re-check auto-approval policy when queued answers resume a…
DaubnerF Sep 25, 2026
2ec9936
Merge branch 'main' into blanket-auto-deny-commands
edelauna Sep 25, 2026
ef8309c
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 27, 2026
f59c666
fix(tools): re-check command policy before an approved command runs
DaubnerF Sep 28, 2026
43a5ddf
test(tools): cover blanket-deny kinds missing from the auto-deny spec
DaubnerF Sep 28, 2026
2a08840
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 28, 2026
f479dad
fix(task): arm ask status timers from all release paths
DaubnerF Sep 29, 2026
c338831
fix(settings): read blanket auto-deny toggle from the checkbox target
DaubnerF Sep 29, 2026
7c83f3a
Merge branch 'Zoo-Code-Org:main' into blanket-auto-deny-commands
DaubnerF Sep 30, 2026
89165a4
fix(task): enforce blanket deny at queue claims and policy re-checks
DaubnerF Sep 30, 2026
3d921b1
fix(auto-approval): cancel queued-command policy re-check on task abort
DaubnerF Sep 30, 2026
8e76b80
Merge branch 'main' into blanket-auto-deny-commands
DaubnerF Sep 30, 2026
fe30882
fix(ci): treat negative v8 branch deltas as uncovered when merging lcov
DaubnerF Sep 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions packages/types/src/__tests__/global-settings.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
DEFAULT_ALWAYS_DENY_UNAPPROVED_COMMANDS,
DEFAULT_DESTRUCTIVE_COMMAND_GUARD_ENABLED,
GLOBAL_SETTINGS_KEYS,
globalSettingsSchema,
Expand All @@ -20,3 +21,20 @@ describe("destructive command guard global setting", () => {
expect(() => globalSettingsSchema.parse({ destructiveCommandGuardEnabled: "true" })).toThrow()
})
})

describe("alwaysDenyUnapprovedCommands global setting", () => {
it("is opt-in by default", () => {
expect(DEFAULT_ALWAYS_DENY_UNAPPROVED_COMMANDS).toBe(false)
})

it("accepts and exposes the persisted setting", () => {
expect(globalSettingsSchema.parse({ alwaysDenyUnapprovedCommands: true })).toEqual({
alwaysDenyUnapprovedCommands: true,
})
expect(GLOBAL_SETTINGS_KEYS).toContain("alwaysDenyUnapprovedCommands")
})

it("rejects non-boolean setting values", () => {
expect(() => globalSettingsSchema.parse({ alwaysDenyUnapprovedCommands: "true" })).toThrow()
})
})
17 changes: 17 additions & 0 deletions packages/types/src/global-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,15 @@ export const DEFAULT_DIFF_FUZZY_THRESHOLD = 1.0

export const DEFAULT_DESTRUCTIVE_COMMAND_GUARD_ENABLED = false

/**
* Whether commands that are not explicitly auto-approved are automatically
* denied (with a structured reason sent to the model) instead of prompting the
* user. Opt-in: by default, unapproved commands still ask for confirmation.
* Only engages when command auto-approval (`autoApprovalEnabled` +
* `alwaysAllowExecute`) is on.
*/
export const DEFAULT_ALWAYS_DENY_UNAPPROVED_COMMANDS = false

/**
* Terminal output preview size options for persisted command output.
*
Expand Down Expand Up @@ -154,6 +163,14 @@ export const globalSettingsSchema = z.object({
alwaysAllowSubtasks: z.boolean().optional(),
alwaysAllowExecute: z.boolean().optional(),
destructiveCommandGuardEnabled: z.boolean().optional(),
/**
* Blanket auto-deny for unapproved commands. When true (and command
* auto-approval is engaged), every command that is not explicitly
* auto-approved is automatically denied with a structured reason delivered
* to the model, instead of prompting the user.
* @default false
*/
alwaysDenyUnapprovedCommands: z.boolean().optional(),
alwaysAllowFollowupQuestions: z.boolean().optional(),
followupAutoApproveTimeoutMs: z.number().optional(),
allowedCommands: z.array(z.string()).optional(),
Expand Down
1 change: 1 addition & 0 deletions packages/types/src/vscode-extension-host.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,7 @@ export type ExtensionState = Pick<
| "alwaysAllowFollowupQuestions"
| "alwaysAllowExecute"
| "destructiveCommandGuardEnabled"
| "alwaysDenyUnapprovedCommands"
| "followupAutoApproveTimeoutMs"
| "allowedCommands"
| "deniedCommands"
Expand Down
Loading
Loading