constants.ts
utils/settings/constants.ts
No strong subsystem tag
203
Lines
5627
Bytes
12
Exports
1
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with general runtime concerns. It contains 203 lines, 1 detected imports, and 12 detected exports.
Important relationships
- utils/settings/allErrors.ts
- utils/settings/applySettingsChange.ts
- utils/settings/changeDetector.ts
- utils/settings/internalWrites.ts
- utils/settings/managedPath.ts
- utils/settings/permissionValidation.ts
- utils/settings/pluginOnlyPolicy.ts
- utils/settings/schemaOutput.ts
- ink/constants.ts
- tools/AgentTool/constants.ts
- tools/ConfigTool/constants.ts
- tools/EnterPlanModeTool/constants.ts
Detected exports
SETTING_SOURCESSettingSourcegetSettingSourceNamegetSourceDisplayNamegetSettingSourceDisplayNameLowercasegetSettingSourceDisplayNameCapitalizedparseSettingSourcesFlaggetEnabledSettingSourcesisSettingSourceEnabledEditableSettingSourceSOURCESCLAUDE_CODE_SETTINGS_SCHEMA_URL
Keywords
casesourcesettingssettingsourceprojectflagusernamesettingresult
Detected imports
../../bootstrap/state.js
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
import { getAllowedSettingSources } from '../../bootstrap/state.js'
/**
* All possible sources where settings can come from
* Order matters - later sources override earlier ones
*/
export const SETTING_SOURCES = [
// User settings (global)
'userSettings',
// Project settings (shared per-directory)
'projectSettings',
// Local settings (gitignored)
'localSettings',
// Flag settings (from --settings flag)
'flagSettings',
// Policy settings (managed-settings.json or remote settings from API)
'policySettings',
] as const
export type SettingSource = (typeof SETTING_SOURCES)[number]
export function getSettingSourceName(source: SettingSource): string {
switch (source) {
case 'userSettings':
return 'user'
case 'projectSettings':
return 'project'
case 'localSettings':
return 'project, gitignored'
case 'flagSettings':
return 'cli flag'
case 'policySettings':
return 'managed'
}
}
/**
* Get short display name for a setting source (capitalized, for context/skills UI)
* @param source The setting source or 'plugin'/'built-in'
* @returns Short capitalized display name like 'User', 'Project', 'Plugin'
*/
export function getSourceDisplayName(
source: SettingSource | 'plugin' | 'built-in',
): string {
switch (source) {
case 'userSettings':
return 'User'
case 'projectSettings':
return 'Project'
case 'localSettings':
return 'Local'
case 'flagSettings':
return 'Flag'
case 'policySettings':
return 'Managed'
case 'plugin':
return 'Plugin'
case 'built-in':
return 'Built-in'
}
}
/**
* Get display name for a setting or permission rule source (lowercase, for inline use)
* @param source The setting source or permission rule source
* @returns Display name for the source in lowercase
*/
export function getSettingSourceDisplayNameLowercase(
source: SettingSource | 'cliArg' | 'command' | 'session',
): string {
switch (source) {
case 'userSettings':
return 'user settings'
case 'projectSettings':
return 'shared project settings'
case 'localSettings':
return 'project local settings'
case 'flagSettings':
return 'command line arguments'
case 'policySettings':
return 'enterprise managed settings'
case 'cliArg':
return 'CLI argument'
case 'command':
return 'command configuration'
case 'session':
return 'current session'
}
}
/**
* Get display name for a setting or permission rule source (capitalized, for UI labels)
* @param source The setting source or permission rule source
* @returns Display name for the source with first letter capitalized
*/
export function getSettingSourceDisplayNameCapitalized(
source: SettingSource | 'cliArg' | 'command' | 'session',
): string {
switch (source) {
case 'userSettings':
return 'User settings'
case 'projectSettings':
return 'Shared project settings'
case 'localSettings':
return 'Project local settings'
case 'flagSettings':
return 'Command line arguments'
case 'policySettings':
return 'Enterprise managed settings'
case 'cliArg':
return 'CLI argument'
case 'command':
return 'Command configuration'
case 'session':
return 'Current session'
}
}
/**
* Parse the --setting-sources CLI flag into SettingSource array
* @param flag Comma-separated string like "user,project,local"
* @returns Array of SettingSource values
*/
export function parseSettingSourcesFlag(flag: string): SettingSource[] {
if (flag === '') return []
const names = flag.split(',').map(s => s.trim())
const result: SettingSource[] = []
for (const name of names) {
switch (name) {
case 'user':
result.push('userSettings')
break
case 'project':
result.push('projectSettings')
break
case 'local':
result.push('localSettings')
break
default:
throw new Error(
`Invalid setting source: ${name}. Valid options are: user, project, local`,
)
}
}
return result
}
/**
* Get enabled setting sources with policy/flag always included
* @returns Array of enabled SettingSource values
*/
export function getEnabledSettingSources(): SettingSource[] {
const allowed = getAllowedSettingSources()
// Always include policy and flag settings
const result = new Set<SettingSource>(allowed)
result.add('policySettings')
result.add('flagSettings')
return Array.from(result)
}
/**
* Check if a specific source is enabled
* @param source The source to check
* @returns true if the source should be loaded
*/
export function isSettingSourceEnabled(source: SettingSource): boolean {
const enabled = getEnabledSettingSources()
return enabled.includes(source)
}
/**
* Editable setting sources (excludes policySettings and flagSettings which are read-only)
*/
export type EditableSettingSource = Exclude<
SettingSource,
'policySettings' | 'flagSettings'
>
/**
* List of sources where permission rules can be saved, in display order.
* Used by permission-rule and hook-save UIs to present source options.
*/
export const SOURCES = [
'localSettings',
'projectSettings',
'userSettings',
] as const satisfies readonly EditableSettingSource[]
/**
* The JSON Schema URL for Claude Code settings
* You can edit the contents at https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/claude-code-settings.json
*/
export const CLAUDE_CODE_SETTINGS_SCHEMA_URL =
'https://json.schemastore.org/claude-code-settings.json'