feat(ui): Add UI toggles for available tools per-project
This commit is contained in:
23
gui.py
23
gui.py
@@ -589,6 +589,13 @@ class App:
|
|||||||
dpg.set_value("auto_add_history", proj.get("discussion", {}).get("auto_add", False))
|
dpg.set_value("auto_add_history", proj.get("discussion", {}).get("auto_add", False))
|
||||||
if dpg.does_item_exist("project_word_wrap"):
|
if dpg.does_item_exist("project_word_wrap"):
|
||||||
dpg.set_value("project_word_wrap", proj.get("project", {}).get("word_wrap", True))
|
dpg.set_value("project_word_wrap", proj.get("project", {}).get("word_wrap", True))
|
||||||
|
|
||||||
|
agent_tools = proj.get("agent", {}).get("tools", {})
|
||||||
|
for t_name in ["run_powershell", "read_file", "list_directory", "search_files", "get_file_summary", "web_search", "fetch_url"]:
|
||||||
|
tag = f"tool_toggle_{t_name}"
|
||||||
|
if dpg.does_item_exist(tag):
|
||||||
|
dpg.set_value(tag, agent_tools.get(t_name, True))
|
||||||
|
|
||||||
self.cb_word_wrap_toggled(app_data=proj.get("project", {}).get("word_wrap", True))
|
self.cb_word_wrap_toggled(app_data=proj.get("project", {}).get("word_wrap", True))
|
||||||
|
|
||||||
def _save_active_project(self):
|
def _save_active_project(self):
|
||||||
@@ -867,6 +874,13 @@ class App:
|
|||||||
if dpg.does_item_exist("project_word_wrap"):
|
if dpg.does_item_exist("project_word_wrap"):
|
||||||
proj["project"]["word_wrap"] = dpg.get_value("project_word_wrap")
|
proj["project"]["word_wrap"] = dpg.get_value("project_word_wrap")
|
||||||
|
|
||||||
|
# Agent tools
|
||||||
|
proj.setdefault("agent", {}).setdefault("tools", {})
|
||||||
|
for t_name in ["run_powershell", "read_file", "list_directory", "search_files", "get_file_summary", "web_search", "fetch_url"]:
|
||||||
|
tag = f"tool_toggle_{t_name}"
|
||||||
|
if dpg.does_item_exist(tag):
|
||||||
|
proj["agent"]["tools"][t_name] = dpg.get_value(tag)
|
||||||
|
|
||||||
# Discussion
|
# Discussion
|
||||||
self._flush_disc_entries_to_project()
|
self._flush_disc_entries_to_project()
|
||||||
disc_sec = proj.setdefault("discussion", {})
|
disc_sec = proj.setdefault("discussion", {})
|
||||||
@@ -1699,6 +1713,15 @@ class App:
|
|||||||
default_value=self.project.get("project", {}).get("word_wrap", True),
|
default_value=self.project.get("project", {}).get("word_wrap", True),
|
||||||
callback=self.cb_word_wrap_toggled
|
callback=self.cb_word_wrap_toggled
|
||||||
)
|
)
|
||||||
|
dpg.add_separator()
|
||||||
|
dpg.add_text("Agent Capabilities")
|
||||||
|
agent_tools = self.project.get("agent", {}).get("tools", {})
|
||||||
|
for t_name in ["run_powershell", "read_file", "list_directory", "search_files", "get_file_summary", "web_search", "fetch_url"]:
|
||||||
|
dpg.add_checkbox(
|
||||||
|
tag=f"tool_toggle_{t_name}",
|
||||||
|
label=f"Enable {t_name}",
|
||||||
|
default_value=agent_tools.get(t_name, True)
|
||||||
|
)
|
||||||
|
|
||||||
# ---- Files panel ----
|
# ---- Files panel ----
|
||||||
with dpg.window(
|
with dpg.window(
|
||||||
|
|||||||
@@ -100,6 +100,17 @@ def default_project(name: str = "unnamed") -> dict:
|
|||||||
"output": {"output_dir": "./md_gen"},
|
"output": {"output_dir": "./md_gen"},
|
||||||
"files": {"base_dir": ".", "paths": []},
|
"files": {"base_dir": ".", "paths": []},
|
||||||
"screenshots": {"base_dir": ".", "paths": []},
|
"screenshots": {"base_dir": ".", "paths": []},
|
||||||
|
"agent": {
|
||||||
|
"tools": {
|
||||||
|
"run_powershell": True,
|
||||||
|
"read_file": True,
|
||||||
|
"list_directory": True,
|
||||||
|
"search_files": True,
|
||||||
|
"get_file_summary": True,
|
||||||
|
"web_search": True,
|
||||||
|
"fetch_url": True
|
||||||
|
}
|
||||||
|
},
|
||||||
"discussion": {
|
"discussion": {
|
||||||
"roles": ["User", "AI", "Vendor API", "System"],
|
"roles": ["User", "AI", "Vendor API", "System"],
|
||||||
"active": "main",
|
"active": "main",
|
||||||
|
|||||||
17
tests/test_agent_capabilities.py
Normal file
17
tests/test_agent_capabilities.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
def test_agent_capabilities_config():
|
||||||
|
# A dummy test to fulfill the Red Phase for Agent Capability Configuration.
|
||||||
|
# The new function in gui.py should be get_active_tools() or we check the project dict.
|
||||||
|
from project_manager import default_project
|
||||||
|
|
||||||
|
proj = default_project("test_proj")
|
||||||
|
|
||||||
|
# We expect 'agent' config to exist in a default project and list tools
|
||||||
|
assert "agent" in proj
|
||||||
|
assert "tools" in proj["agent"]
|
||||||
|
|
||||||
|
# By default, all tools should probably be True or defined
|
||||||
|
tools = proj["agent"]["tools"]
|
||||||
|
assert "run_powershell" in tools
|
||||||
|
assert tools["run_powershell"] is True
|
||||||
Reference in New Issue
Block a user