From c9862394b00c4aa41e3939b9bed07b63902cb55e Mon Sep 17 00:00:00 2001 From: haikdc Date: Thu, 2 Apr 2026 11:20:29 -0700 Subject: [PATCH] [Haik]: ckpt, added toolkit nesting, also reorganized folder structure --- .../tools/BUILTIN_TOOLKIT/BUILTIN_TOOLKIT.py | 24 +++++++++++ .../components}/AGENTS_TOOLKIT.py | 3 +- .../components}/FILESYSTEM_TOOLKIT.py | 3 +- .../components}/INTERACTION_TOOLKIT.py | 3 +- .../components}/PLANNING_TOOLKIT.py | 3 +- .../components}/SCHEDULING_TOOLKIT.py | 3 +- .../components}/SEARCH_TOOLKIT.py | 3 +- .../components}/SYSTEM_TOOLKIT.py | 3 +- backend/apps/agents/HaikFix/tools/Tool.py | 18 -------- .../tools/shared_structs/TOOL_PERMISSIONS.py | 2 + .../HaikFix/tools/shared_structs/Tool.py | 9 ++++ .../HaikFix/tools/shared_structs/Toolkit.py | 42 +++++++++++++++++++ 12 files changed, 91 insertions(+), 25 deletions(-) create mode 100644 backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/BUILTIN_TOOLKIT.py rename backend/apps/agents/HaikFix/tools/{builtin_toolkits => BUILTIN_TOOLKIT/components}/AGENTS_TOOLKIT.py (63%) rename backend/apps/agents/HaikFix/tools/{builtin_toolkits => BUILTIN_TOOLKIT/components}/FILESYSTEM_TOOLKIT.py (72%) rename backend/apps/agents/HaikFix/tools/{builtin_toolkits => BUILTIN_TOOLKIT/components}/INTERACTION_TOOLKIT.py (57%) rename backend/apps/agents/HaikFix/tools/{builtin_toolkits => BUILTIN_TOOLKIT/components}/PLANNING_TOOLKIT.py (68%) rename backend/apps/agents/HaikFix/tools/{builtin_toolkits => BUILTIN_TOOLKIT/components}/SCHEDULING_TOOLKIT.py (72%) rename backend/apps/agents/HaikFix/tools/{builtin_toolkits => BUILTIN_TOOLKIT/components}/SEARCH_TOOLKIT.py (71%) rename backend/apps/agents/HaikFix/tools/{builtin_toolkits => BUILTIN_TOOLKIT/components}/SYSTEM_TOOLKIT.py (72%) delete mode 100644 backend/apps/agents/HaikFix/tools/Tool.py create mode 100644 backend/apps/agents/HaikFix/tools/shared_structs/TOOL_PERMISSIONS.py create mode 100644 backend/apps/agents/HaikFix/tools/shared_structs/Tool.py create mode 100644 backend/apps/agents/HaikFix/tools/shared_structs/Toolkit.py diff --git a/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/BUILTIN_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/BUILTIN_TOOLKIT.py new file mode 100644 index 00000000..6bb05e85 --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/BUILTIN_TOOLKIT.py @@ -0,0 +1,24 @@ +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool + +from backend.apps.agents.HaikFix.tools.BUILTIN_TOOLKIT.components.AGENTS_TOOLKIT import AGENTS_TOOLKIT +from backend.apps.agents.HaikFix.tools.BUILTIN_TOOLKIT.components.FILESYSTEM_TOOLKIT import FILESYSTEM_TOOLKIT +from backend.apps.agents.HaikFix.tools.BUILTIN_TOOLKIT.components.INTERACTION_TOOLKIT import INTERACTION_TOOLKIT +from backend.apps.agents.HaikFix.tools.BUILTIN_TOOLKIT.components.PLANNING_TOOLKIT import PLANNING_TOOLKIT +from backend.apps.agents.HaikFix.tools.BUILTIN_TOOLKIT.components.SCHEDULING_TOOLKIT import SCHEDULING_TOOLKIT +from backend.apps.agents.HaikFix.tools.BUILTIN_TOOLKIT.components.SEARCH_TOOLKIT import SEARCH_TOOLKIT +from backend.apps.agents.HaikFix.tools.BUILTIN_TOOLKIT.components.SYSTEM_TOOLKIT import SYSTEM_TOOLKIT + +BUILTIN_TOOLKIT = Toolkit( + name="builtin", + description="Builtin tools", + nested_toolkits=[ + AGENTS_TOOLKIT, + FILESYSTEM_TOOLKIT, + INTERACTION_TOOLKIT, + PLANNING_TOOLKIT, + SCHEDULING_TOOLKIT, + SEARCH_TOOLKIT, + SYSTEM_TOOLKIT, + ] +) \ No newline at end of file diff --git a/backend/apps/agents/HaikFix/tools/builtin_toolkits/AGENTS_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/AGENTS_TOOLKIT.py similarity index 63% rename from backend/apps/agents/HaikFix/tools/builtin_toolkits/AGENTS_TOOLKIT.py rename to backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/AGENTS_TOOLKIT.py index 01a51789..998fee13 100644 --- a/backend/apps/agents/HaikFix/tools/builtin_toolkits/AGENTS_TOOLKIT.py +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/AGENTS_TOOLKIT.py @@ -1,4 +1,5 @@ -from backend.apps.agents.HaikFix.tools.Tool import Tool, Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool AGENTS_TOOLKIT = Toolkit( name="agents", diff --git a/backend/apps/agents/HaikFix/tools/builtin_toolkits/FILESYSTEM_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/FILESYSTEM_TOOLKIT.py similarity index 72% rename from backend/apps/agents/HaikFix/tools/builtin_toolkits/FILESYSTEM_TOOLKIT.py rename to backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/FILESYSTEM_TOOLKIT.py index 8988f134..4f7da262 100644 --- a/backend/apps/agents/HaikFix/tools/builtin_toolkits/FILESYSTEM_TOOLKIT.py +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/FILESYSTEM_TOOLKIT.py @@ -1,4 +1,5 @@ -from backend.apps.agents.HaikFix.tools.Tool import Tool, Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool FILESYSTEM_TOOLKIT = Toolkit( name="filesystem", diff --git a/backend/apps/agents/HaikFix/tools/builtin_toolkits/INTERACTION_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/INTERACTION_TOOLKIT.py similarity index 57% rename from backend/apps/agents/HaikFix/tools/builtin_toolkits/INTERACTION_TOOLKIT.py rename to backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/INTERACTION_TOOLKIT.py index a4bf18a5..39f0c4ed 100644 --- a/backend/apps/agents/HaikFix/tools/builtin_toolkits/INTERACTION_TOOLKIT.py +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/INTERACTION_TOOLKIT.py @@ -1,4 +1,5 @@ -from backend.apps.agents.HaikFix.tools.Tool import Tool, Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool INTERACTION_TOOLKIT = Toolkit( name="interaction", diff --git a/backend/apps/agents/HaikFix/tools/builtin_toolkits/PLANNING_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/PLANNING_TOOLKIT.py similarity index 68% rename from backend/apps/agents/HaikFix/tools/builtin_toolkits/PLANNING_TOOLKIT.py rename to backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/PLANNING_TOOLKIT.py index eeadf3bb..f41aeaeb 100644 --- a/backend/apps/agents/HaikFix/tools/builtin_toolkits/PLANNING_TOOLKIT.py +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/PLANNING_TOOLKIT.py @@ -1,4 +1,5 @@ -from backend.apps.agents.HaikFix.tools.Tool import Tool, Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool PLANNING_TOOLKIT = Toolkit( name="planning", diff --git a/backend/apps/agents/HaikFix/tools/builtin_toolkits/SCHEDULING_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SCHEDULING_TOOLKIT.py similarity index 72% rename from backend/apps/agents/HaikFix/tools/builtin_toolkits/SCHEDULING_TOOLKIT.py rename to backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SCHEDULING_TOOLKIT.py index b490c8d2..7f875282 100644 --- a/backend/apps/agents/HaikFix/tools/builtin_toolkits/SCHEDULING_TOOLKIT.py +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SCHEDULING_TOOLKIT.py @@ -1,4 +1,5 @@ -from backend.apps.agents.HaikFix.tools.Tool import Tool, Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool SCHEDULING_TOOLKIT = Toolkit( name="scheduling", diff --git a/backend/apps/agents/HaikFix/tools/builtin_toolkits/SEARCH_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SEARCH_TOOLKIT.py similarity index 71% rename from backend/apps/agents/HaikFix/tools/builtin_toolkits/SEARCH_TOOLKIT.py rename to backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SEARCH_TOOLKIT.py index fc53123c..7bd671d9 100644 --- a/backend/apps/agents/HaikFix/tools/builtin_toolkits/SEARCH_TOOLKIT.py +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SEARCH_TOOLKIT.py @@ -1,4 +1,5 @@ -from backend.apps.agents.HaikFix.tools.Tool import Tool, Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool SEARCH_TOOLKIT = Toolkit( name="search", diff --git a/backend/apps/agents/HaikFix/tools/builtin_toolkits/SYSTEM_TOOLKIT.py b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SYSTEM_TOOLKIT.py similarity index 72% rename from backend/apps/agents/HaikFix/tools/builtin_toolkits/SYSTEM_TOOLKIT.py rename to backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SYSTEM_TOOLKIT.py index 4d80615f..670b9e9f 100644 --- a/backend/apps/agents/HaikFix/tools/builtin_toolkits/SYSTEM_TOOLKIT.py +++ b/backend/apps/agents/HaikFix/tools/BUILTIN_TOOLKIT/components/SYSTEM_TOOLKIT.py @@ -1,4 +1,5 @@ -from backend.apps.agents.HaikFix.tools.Tool import Tool, Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool SYSTEM_TOOLKIT = Toolkit( name="system", diff --git a/backend/apps/agents/HaikFix/tools/Tool.py b/backend/apps/agents/HaikFix/tools/Tool.py deleted file mode 100644 index 5fbbdecd..00000000 --- a/backend/apps/agents/HaikFix/tools/Tool.py +++ /dev/null @@ -1,18 +0,0 @@ -from ast import List -from typing import Literal, Optional -from pydantic import BaseModel - - -TOOL_PERMISSIONS = Literal["allow", "ask", "deny"] - -class Tool(BaseModel): - name: str - description: Optional[str] = None - deferred: bool - permission: TOOL_PERMISSIONS - -class Toolkit(BaseModel): - name: str - description: str - tools: List[Tool] - diff --git a/backend/apps/agents/HaikFix/tools/shared_structs/TOOL_PERMISSIONS.py b/backend/apps/agents/HaikFix/tools/shared_structs/TOOL_PERMISSIONS.py new file mode 100644 index 00000000..9933a57f --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/shared_structs/TOOL_PERMISSIONS.py @@ -0,0 +1,2 @@ +from typing import Literal +TOOL_PERMISSIONS = Literal["allow", "ask", "deny"] \ No newline at end of file diff --git a/backend/apps/agents/HaikFix/tools/shared_structs/Tool.py b/backend/apps/agents/HaikFix/tools/shared_structs/Tool.py new file mode 100644 index 00000000..032acc5d --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/shared_structs/Tool.py @@ -0,0 +1,9 @@ +from typing import Optional +from pydantic import BaseModel +from backend.apps.agents.HaikFix.tools.shared_structs.TOOL_PERMISSIONS import TOOL_PERMISSIONS + +class Tool(BaseModel): + name: str + description: Optional[str] = None + deferred: bool + permission: TOOL_PERMISSIONS \ No newline at end of file diff --git a/backend/apps/agents/HaikFix/tools/shared_structs/Toolkit.py b/backend/apps/agents/HaikFix/tools/shared_structs/Toolkit.py new file mode 100644 index 00000000..b378b9a9 --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/shared_structs/Toolkit.py @@ -0,0 +1,42 @@ +from typing import Optional, List +from pydantic import BaseModel +from backend.apps.agents.HaikFix.tools.shared_structs.Tool import Tool +from backend.apps.agents.HaikFix.tools.shared_structs.TOOL_PERMISSIONS import TOOL_PERMISSIONS +from typeguard import typechecked + +class Toolkit(BaseModel): + name: str + description: str + tools: Optional[List[Tool]] = None + nested_toolkits: Optional[List["Toolkit"]] = None + + @typechecked + def __init__( + self, + name: str, + description: str, + tools: Optional[List[Tool]] = None, + nested_toolkits: Optional[List["Toolkit"]] = None + ) -> None: + super().__init__( + name=name, + description=description, + tools=tools, + nested_toolkits=nested_toolkits + ) + self.validate_structure(tools, nested_toolkits) + + @typechecked + def validate_structure(self) -> None: + assert not ( (self.tools is None) and (self.nested_toolkits is None) ), "Either tools or nested_toolkits must be provided" + assert (self.tools is None) or (self.nested_toolkits is None), "Only one of tools or nested_toolkits can be provided" + + @typechecked + def set_permission(self, permission: TOOL_PERMISSIONS) -> None: + self.validate_structure() + if self.tools is not None: + for tool in self.tools: + tool.permission = permission + if self.nested_toolkits is not None: + for toolkit in self.nested_toolkits: + toolkit.set_permission(permission) \ No newline at end of file