返回 DeepSeek-Reasonix
mcp_remove_oauth.go
根目录 / internal / control / mcp_remove_oauth.go
1 package control
2
3 import (
4 "fmt"
5
6 "reasonix/internal/config"
7 "reasonix/internal/mcpdiag"
8 "reasonix/internal/plugin"
9 )
10
11 type removedMCPState struct {
12 fallback config.PluginEntry
13 fallbackFound bool
14 cleanupErr error
15 }
16
17 func reconcileRemovedMCPState(workspace, name string) removedMCPState {
18 state := removedMCPState{}
19 nextCfg, err := config.LoadForRoot(workspace)
20 if err != nil {
21 state.cleanupErr = fmt.Errorf("reload MCP configuration after removing %q: %w", name, err)
22 return state
23 }
24 for _, candidate := range nextCfg.Plugins {
25 if candidate.Name == name {
26 state.fallback, state.fallbackFound = candidate, true
27 break
28 }
29 }
30 remainingResource := ""
31 if state.fallbackFound {
32 remainingResource = mcpdiag.HTTPMCPOAuthResource(state.fallback.Type, state.fallback.URL, mcpdiag.HasAuthConfig(state.fallback.Headers, state.fallback.Env, state.fallback.URL))
33 }
34 if _, err := plugin.ReconcileHTTPMCPOAuthAfterRemoval(plugin.Spec{
35 Name: name, StateDir: plugin.MCPStateDir(config.ReasonixHomeDir(), workspace, name),
36 }, remainingResource); err != nil {
37 state.cleanupErr = fmt.Errorf("reconcile OAuth state after removing MCP server %q: %w", name, err)
38 }
39 return state
40 }
41
41 lines GO