forked from ultraworkers/claw-code
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmigrateEnableAllProjectMcpServersToSettings.ts
More file actions
118 lines (108 loc) · 3.88 KB
/
Copy pathmigrateEnableAllProjectMcpServersToSettings.ts
File metadata and controls
118 lines (108 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import { logEvent } from 'src/services/analytics/index.js'
import {
getCurrentProjectConfig,
saveCurrentProjectConfig,
} from '../utils/config.js'
import { logError } from '../utils/log.js'
import {
getSettingsForSource,
updateSettingsForSource,
} from '../utils/settings/settings.js'
/**
* Migration: Move MCP server approval fields from project config to local settings
* This migrates both enableAllProjectMcpServers and enabledMcpjsonServers to the
* settings system for better management and consistency.
*/
export function migrateEnableAllProjectMcpServersToSettings(): void {
const projectConfig = getCurrentProjectConfig()
// Check if any field exists in project config
const hasEnableAll = projectConfig.enableAllProjectMcpServers !== undefined
const hasEnabledServers =
projectConfig.enabledMcpjsonServers &&
projectConfig.enabledMcpjsonServers.length > 0
const hasDisabledServers =
projectConfig.disabledMcpjsonServers &&
projectConfig.disabledMcpjsonServers.length > 0
if (!hasEnableAll && !hasEnabledServers && !hasDisabledServers) {
return
}
try {
const existingSettings = getSettingsForSource('localSettings') || {}
const updates: Partial<{
enableAllProjectMcpServers: boolean
enabledMcpjsonServers: string[]
disabledMcpjsonServers: string[]
}> = {}
const fieldsToRemove: Array<
| 'enableAllProjectMcpServers'
| 'enabledMcpjsonServers'
| 'disabledMcpjsonServers'
> = []
// Migrate enableAllProjectMcpServers if it exists and hasn't been migrated
if (
hasEnableAll &&
existingSettings.enableAllProjectMcpServers === undefined
) {
updates.enableAllProjectMcpServers =
projectConfig.enableAllProjectMcpServers
fieldsToRemove.push('enableAllProjectMcpServers')
} else if (hasEnableAll) {
// Already migrated, just mark for removal
fieldsToRemove.push('enableAllProjectMcpServers')
}
// Migrate enabledMcpjsonServers if it exists
if (hasEnabledServers && projectConfig.enabledMcpjsonServers) {
const existingEnabledServers =
existingSettings.enabledMcpjsonServers || []
// Merge the servers (avoiding duplicates)
updates.enabledMcpjsonServers = [
...new Set([
...existingEnabledServers,
...projectConfig.enabledMcpjsonServers,
]),
]
fieldsToRemove.push('enabledMcpjsonServers')
}
// Migrate disabledMcpjsonServers if it exists
if (hasDisabledServers && projectConfig.disabledMcpjsonServers) {
const existingDisabledServers =
existingSettings.disabledMcpjsonServers || []
// Merge the servers (avoiding duplicates)
updates.disabledMcpjsonServers = [
...new Set([
...existingDisabledServers,
...projectConfig.disabledMcpjsonServers,
]),
]
fieldsToRemove.push('disabledMcpjsonServers')
}
// Update settings if there are any updates
if (Object.keys(updates).length > 0) {
updateSettingsForSource('localSettings', updates)
}
// Remove migrated fields from project config
if (
fieldsToRemove.includes('enableAllProjectMcpServers') ||
fieldsToRemove.includes('enabledMcpjsonServers') ||
fieldsToRemove.includes('disabledMcpjsonServers')
) {
saveCurrentProjectConfig(current => {
const {
enableAllProjectMcpServers: _enableAll,
enabledMcpjsonServers: _enabledServers,
disabledMcpjsonServers: _disabledServers,
...configWithoutFields
} = current
return configWithoutFields
})
}
// Log the migration event
logEvent('tengu_migrate_mcp_approval_fields_success', {
migratedCount: fieldsToRemove.length,
})
} catch (e: unknown) {
// Log migration failure but don't throw to avoid breaking startup
logError(e)
logEvent('tengu_migrate_mcp_approval_fields_error', {})
}
}