Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
8b9eae6
first commit
pwang347 Apr 21, 2026
c978c5d
updates
pwang347 Apr 22, 2026
9d0a1f4
PR updates
pwang347 Apr 22, 2026
ac86399
Merge branch 'main' of github.com:microsoft/vscode into pawang/disabl…
pwang347 Apr 22, 2026
e5fb6ab
wip
pwang347 Apr 23, 2026
20737b5
nit
pwang347 Apr 23, 2026
ba2be74
nit
pwang347 Apr 23, 2026
7e18eca
cleanup
pwang347 Apr 23, 2026
0b2767c
Merge branch 'pr-311806' into pawang/disableCustomizations
pwang347 Apr 23, 2026
1dea8b1
claude
pwang347 Apr 23, 2026
0ab1e21
API update
pwang347 Apr 23, 2026
736b8c7
Merge branch 'main' of github.com:microsoft/vscode into pawang/disabl…
pwang347 Apr 23, 2026
d7f153f
update
pwang347 Apr 23, 2026
321667d
add support for local enablement
pwang347 Apr 23, 2026
4d68ecf
PR
pwang347 Apr 23, 2026
6b1b422
new tests
pwang347 Apr 23, 2026
f3e657a
fixes
pwang347 Apr 23, 2026
4335b51
updates
pwang347 Apr 23, 2026
339f902
refactor
pwang347 Apr 24, 2026
e691cdf
clean
pwang347 Apr 24, 2026
ed5c585
clean
pwang347 Apr 24, 2026
d73b498
clean
pwang347 Apr 24, 2026
8a70776
clean
pwang347 Apr 24, 2026
37cbecc
clean
pwang347 Apr 24, 2026
dca714c
clean
pwang347 Apr 24, 2026
f1b78dd
clean
pwang347 Apr 24, 2026
7e594c0
clean
pwang347 Apr 24, 2026
325e1b8
clean
pwang347 Apr 24, 2026
a672ec8
clean
pwang347 Apr 24, 2026
cee8a17
clean
pwang347 Apr 24, 2026
1a8c4a8
updates
pwang347 Apr 24, 2026
82a04f9
clean
pwang347 Apr 24, 2026
4fb09ca
fixes
pwang347 Apr 24, 2026
3a3879e
Merge branch 'main' of github.com:microsoft/vscode into pawang/disabl…
pwang347 Apr 24, 2026
71e762c
PR
pwang347 Apr 24, 2026
0a322fb
don't write to json
pwang347 Apr 24, 2026
8e14893
Merge branch 'main' of github.com:microsoft/vscode into pawang/disabl…
pwang347 Apr 24, 2026
1ab30b1
fixes
pwang347 Apr 24, 2026
7d9e67c
CI
pwang347 Apr 24, 2026
f0eb463
API update
pwang347 Apr 28, 2026
0c08bc5
PR
pwang347 Apr 28, 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import type { Settings as ClaudeSettings } from '@anthropic-ai/claude-agent-sdk';
import { URI } from '../../../../util/vs/base/common/uri';
import { createDecorator } from '../../../../util/vs/platform/instantiation/common/instantiation';
import { ISessionSettingsService, SessionSettingsFile } from '../../common/sessionSettingsService';

export const IClaudeSettingsService = createDecorator<IClaudeSettingsService>('claudeSettingsService');

export enum ClaudeSettingsLocationType {
// ~/.claude/settings.json
User = 'user',
// <workspace>/.claude/settings.json
Workspace = 'workspace',
// <workspace>/.claude/settings.local.json
WorkspaceLocal = 'workspaceLocal',
}

export type ClaudeSettingsFile = SessionSettingsFile<ClaudeSettingsLocationType, ClaudeSettings>;

export interface IClaudeSettingsService extends ISessionSettingsService<ClaudeSettingsLocationType, ClaudeSettings> {
/**
* Returns the settings URI for the given location and a URI that belongs to a workspace folder.
*/
getUri(location: ClaudeSettingsLocationType, workspaceUri: URI): URI;
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import { resolvePromptToContentBlocks } from './claudePromptResolver';
import { ClaudeSettingsChangeTracker } from './claudeSettingsChangeTracker';
import { ParsedClaudeModelId } from '../common/claudeModelId';
import { IClaudeSessionStateService } from '../common/claudeSessionStateService';
import { IClaudeSettingsService } from '../common/claudeSettingsService';

// Manages Claude Code agent interactions and language model server lifecycle
export class ClaudeAgentManager extends Disposable {
Expand Down Expand Up @@ -218,6 +219,7 @@ export class ClaudeCodeSession extends Disposable {
@IClaudePluginService private readonly claudePluginService: IClaudePluginService,
@IOTelService private readonly _otelService: IOTelService,
@IChatDebugFileLoggerService private readonly _debugFileLogger: IChatDebugFileLoggerService,
@IClaudeSettingsService private readonly settingsService: IClaudeSettingsService,
) {
super();
this._currentModelId = initialModelId;
Expand Down Expand Up @@ -263,15 +265,7 @@ export class ClaudeCodeSession extends Disposable {

// Track settings/hooks files
tracker.registerPathResolver(() => {
const paths: URI[] = [];
// User-level settings
paths.push(URI.joinPath(this.envService.userHome, '.claude', 'settings.json'));
// Project-level settings files
for (const folder of this.workspaceService.getWorkspaceFolders()) {
paths.push(URI.joinPath(folder, '.claude', 'settings.json'));
paths.push(URI.joinPath(folder, '.claude', 'settings.local.json'));
}
return paths;
return this.settingsService.getUris();
});

// Track agent files in agents directories
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import type { Settings as ClaudeSettings } from '@anthropic-ai/claude-agent-sdk';
import { INativeEnvService } from '../../../../platform/env/common/envService';
import { IFileSystemService } from '../../../../platform/filesystem/common/fileSystemService';
import { IWorkspaceService } from '../../../../platform/workspace/common/workspaceService';
import { URI } from '../../../../util/vs/base/common/uri';
import { ClaudeSettingsLocationType, IClaudeSettingsService } from '../common/claudeSettingsService';
import { SessionSettingsLocationDescriptor } from '../../common/sessionSettingsService';
import { SessionSettingsService } from '../../common/baseSessionSettingsService';

const CLAUDE_LOCATIONS: readonly SessionSettingsLocationDescriptor<ClaudeSettingsLocationType>[] = [
{
type: ClaudeSettingsLocationType.WorkspaceLocal,
priority: 0,
getUris: (workspaceFolders) => workspaceFolders.map(f => URI.joinPath(f, '.claude', 'settings.local.json')),
},
{
type: ClaudeSettingsLocationType.Workspace,
priority: 1,
getUris: (workspaceFolders) => workspaceFolders.map(f => URI.joinPath(f, '.claude', 'settings.json')),
},
{
type: ClaudeSettingsLocationType.User,
priority: 2,
getUris: (_workspaceFolders, userHome) => [URI.joinPath(userHome, '.claude', 'settings.json')],
},
];

export class ClaudeSettingsService extends SessionSettingsService<ClaudeSettingsLocationType, ClaudeSettings> implements IClaudeSettingsService {

constructor(
@IWorkspaceService workspaceService: IWorkspaceService,
@IFileSystemService fileSystemService: IFileSystemService,
@INativeEnvService envService: INativeEnvService,
) {
super(CLAUDE_LOCATIONS, workspaceService, fileSystemService, envService);
}

protected getDefaultSettings(): ClaudeSettings {
return {};
}
}
Loading