fix(mcp): configure mcp_client allowlist on project switch
Previously mcp_client.configure() was only called during ai_client.send() which meant GUI buttons (Slices/Inspect) couldn't access files when project was switched to an external project like gencpp. Now _switch_project reconfigures mcp_client with the new project's root and file_items.
This commit is contained in:
+1
-1
@@ -23,7 +23,7 @@ separate_tool_calls_panel = false
|
|||||||
bg_shader_enabled = false
|
bg_shader_enabled = false
|
||||||
crt_filter_enabled = false
|
crt_filter_enabled = false
|
||||||
separate_task_dag = false
|
separate_task_dag = false
|
||||||
separate_usage_analytics = false
|
separate_usage_analytics = true
|
||||||
separate_tier1 = false
|
separate_tier1 = false
|
||||||
separate_tier2 = false
|
separate_tier2 = false
|
||||||
separate_tier3 = false
|
separate_tier3 = false
|
||||||
|
|||||||
+21
-21
@@ -74,8 +74,8 @@ Collapsed=0
|
|||||||
DockId=0xAFC85805,2
|
DockId=0xAFC85805,2
|
||||||
|
|
||||||
[Window][Theme]
|
[Window][Theme]
|
||||||
Pos=0,32
|
Pos=0,28
|
||||||
Size=253,1408
|
Size=870,1882
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,3
|
DockId=0x00000005,3
|
||||||
|
|
||||||
@@ -102,26 +102,26 @@ Collapsed=0
|
|||||||
DockId=0x0000000D,0
|
DockId=0x0000000D,0
|
||||||
|
|
||||||
[Window][Discussion Hub]
|
[Window][Discussion Hub]
|
||||||
Pos=255,32
|
Pos=872,28
|
||||||
Size=1761,1408
|
Size=1761,1882
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,0
|
DockId=0x00000006,0
|
||||||
|
|
||||||
[Window][Operations Hub]
|
[Window][Operations Hub]
|
||||||
Pos=0,32
|
Pos=0,28
|
||||||
Size=253,1408
|
Size=870,1882
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,2
|
DockId=0x00000005,2
|
||||||
|
|
||||||
[Window][Files & Media]
|
[Window][Files & Media]
|
||||||
Pos=255,32
|
Pos=872,28
|
||||||
Size=1761,1408
|
Size=1761,1882
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,1
|
DockId=0x00000006,1
|
||||||
|
|
||||||
[Window][AI Settings]
|
[Window][AI Settings]
|
||||||
Pos=0,32
|
Pos=0,28
|
||||||
Size=253,1408
|
Size=870,1882
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,0
|
DockId=0x00000005,0
|
||||||
|
|
||||||
@@ -406,8 +406,8 @@ Collapsed=0
|
|||||||
DockId=0x00000006,1
|
DockId=0x00000006,1
|
||||||
|
|
||||||
[Window][Project Settings]
|
[Window][Project Settings]
|
||||||
Pos=0,32
|
Pos=0,28
|
||||||
Size=253,1408
|
Size=870,1882
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,1
|
DockId=0x00000005,1
|
||||||
|
|
||||||
@@ -547,9 +547,9 @@ Column 0 Width=280
|
|||||||
Column 1 Weight=1.0000
|
Column 1 Weight=1.0000
|
||||||
|
|
||||||
[Table][0x1DA1F4A6,2]
|
[Table][0x1DA1F4A6,2]
|
||||||
RefScale=29
|
RefScale=20
|
||||||
Column 0 Weight=1.0000
|
Column 0 Weight=1.0000
|
||||||
Column 1 Width=543
|
Column 1 Width=374
|
||||||
|
|
||||||
[Table][0x5B562C13,3]
|
[Table][0x5B562C13,3]
|
||||||
RefScale=20
|
RefScale=20
|
||||||
@@ -565,22 +565,22 @@ Column 2 Width=150
|
|||||||
Column 3 Width=40
|
Column 3 Width=40
|
||||||
|
|
||||||
[Table][0x62A953DF,5]
|
[Table][0x62A953DF,5]
|
||||||
RefScale=29
|
RefScale=20
|
||||||
Column 0 Width=60
|
Column 0 Width=41
|
||||||
Column 1 Weight=1.0000
|
Column 1 Weight=1.0000
|
||||||
Column 2 Width=101
|
Column 2 Width=69
|
||||||
Column 3 Width=133
|
Column 3 Width=91
|
||||||
Column 4 Width=102
|
Column 4 Width=70
|
||||||
|
|
||||||
[Docking][Data]
|
[Docking][Data]
|
||||||
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
|
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
|
||||||
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
|
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
|
||||||
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
|
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
|
||||||
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,32 Size=2016,1408 Split=X
|
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,28 Size=2633,1882 Split=X
|
||||||
DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2254,1183 Split=X
|
DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2254,1183 Split=X
|
||||||
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2
|
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2
|
||||||
DockNode ID=0x00000007 Parent=0x0000000B SizeRef=1512,858 Split=X Selected=0x8CA2375C
|
DockNode ID=0x00000007 Parent=0x0000000B SizeRef=1512,858 Split=X Selected=0x8CA2375C
|
||||||
DockNode ID=0x00000005 Parent=0x00000007 SizeRef=2077,1681 CentralNode=1 Selected=0x418C7449
|
DockNode ID=0x00000005 Parent=0x00000007 SizeRef=2077,1681 CentralNode=1 Selected=0x7BD57D6A
|
||||||
DockNode ID=0x00000006 Parent=0x00000007 SizeRef=1761,1681 Selected=0x6F2B5B04
|
DockNode ID=0x00000006 Parent=0x00000007 SizeRef=1761,1681 Selected=0x6F2B5B04
|
||||||
DockNode ID=0x0000000E Parent=0x0000000B SizeRef=1777,858 Selected=0x418C7449
|
DockNode ID=0x0000000E Parent=0x0000000B SizeRef=1777,858 Selected=0x418C7449
|
||||||
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6
|
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6
|
||||||
|
|||||||
@@ -2347,6 +2347,9 @@ class AppController:
|
|||||||
self.ai_status = f"failed to load project: {e}"
|
self.ai_status = f"failed to load project: {e}"
|
||||||
return
|
return
|
||||||
self._refresh_from_project()
|
self._refresh_from_project()
|
||||||
|
import mcp_client
|
||||||
|
file_items_as_dicts = [{"path": f.path if hasattr(f, "path") else str(f)} for f in self.files]
|
||||||
|
mcp_client.configure(file_items_as_dicts, [str(new_root)])
|
||||||
self.ai_status = f"switched to: {Path(path).stem}"
|
self.ai_status = f"switched to: {Path(path).stem}"
|
||||||
|
|
||||||
def _refresh_from_project(self) -> None:
|
def _refresh_from_project(self) -> None:
|
||||||
|
|||||||
+4
-1
@@ -2909,7 +2909,10 @@ class App:
|
|||||||
self.ui_editing_slices_file = f_item
|
self.ui_editing_slices_file = f_item
|
||||||
f_path = f_item.path if hasattr(f_item, "path") else str(f_item)
|
f_path = f_item.path if hasattr(f_item, "path") else str(f_item)
|
||||||
self.text_viewer_title = f"Slices: {f_path}"
|
self.text_viewer_title = f"Slices: {f_path}"
|
||||||
self.text_viewer_content = f_item.content or ""
|
try:
|
||||||
|
self.text_viewer_content = mcp_client.read_file(f_path)
|
||||||
|
except Exception as e:
|
||||||
|
self.text_viewer_content = f"Error reading file: {e}"
|
||||||
self.text_viewer_type = 'cpp' if f_path.endswith(('.cpp', '.hpp', '.h')) else 'python' if f_path.endswith('.py') else 'text'
|
self.text_viewer_type = 'cpp' if f_path.endswith(('.cpp', '.hpp', '.h')) else 'python' if f_path.endswith('.py') else 'text'
|
||||||
self.show_text_viewer = True
|
self.show_text_viewer = True
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user