agentpool 2.2.3__py3-none-any.whl → 2.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- acp/__init__.py +0 -4
- acp/acp_requests.py +20 -77
- acp/agent/connection.py +8 -0
- acp/agent/implementations/debug_server/debug_server.py +6 -2
- acp/agent/protocol.py +6 -0
- acp/client/connection.py +38 -29
- acp/client/implementations/default_client.py +3 -2
- acp/client/implementations/headless_client.py +2 -2
- acp/connection.py +2 -2
- acp/notifications.py +18 -49
- acp/schema/__init__.py +2 -0
- acp/schema/agent_responses.py +21 -0
- acp/schema/client_requests.py +3 -3
- acp/schema/session_state.py +63 -29
- acp/task/supervisor.py +2 -2
- acp/utils.py +2 -2
- agentpool/__init__.py +2 -0
- agentpool/agents/acp_agent/acp_agent.py +278 -263
- agentpool/agents/acp_agent/acp_converters.py +150 -17
- agentpool/agents/acp_agent/client_handler.py +35 -24
- agentpool/agents/acp_agent/session_state.py +14 -6
- agentpool/agents/agent.py +471 -643
- agentpool/agents/agui_agent/agui_agent.py +104 -107
- agentpool/agents/agui_agent/helpers.py +3 -4
- agentpool/agents/base_agent.py +485 -32
- agentpool/agents/claude_code_agent/FORKING.md +191 -0
- agentpool/agents/claude_code_agent/__init__.py +13 -1
- agentpool/agents/claude_code_agent/claude_code_agent.py +654 -334
- agentpool/agents/claude_code_agent/converters.py +4 -141
- agentpool/agents/claude_code_agent/models.py +77 -0
- agentpool/agents/claude_code_agent/static_info.py +100 -0
- agentpool/agents/claude_code_agent/usage.py +242 -0
- agentpool/agents/events/__init__.py +22 -0
- agentpool/agents/events/builtin_handlers.py +65 -0
- agentpool/agents/events/event_emitter.py +3 -0
- agentpool/agents/events/events.py +84 -3
- agentpool/agents/events/infer_info.py +145 -0
- agentpool/agents/events/processors.py +254 -0
- agentpool/agents/interactions.py +41 -6
- agentpool/agents/modes.py +13 -0
- agentpool/agents/slashed_agent.py +5 -4
- agentpool/agents/tool_wrapping.py +18 -6
- agentpool/common_types.py +35 -21
- agentpool/config_resources/acp_assistant.yml +2 -2
- agentpool/config_resources/agents.yml +3 -0
- agentpool/config_resources/agents_template.yml +1 -0
- agentpool/config_resources/claude_code_agent.yml +9 -8
- agentpool/config_resources/external_acp_agents.yml +2 -1
- agentpool/delegation/base_team.py +4 -30
- agentpool/delegation/pool.py +104 -265
- agentpool/delegation/team.py +57 -57
- agentpool/delegation/teamrun.py +50 -55
- agentpool/functional/run.py +10 -4
- agentpool/mcp_server/client.py +73 -38
- agentpool/mcp_server/conversions.py +54 -13
- agentpool/mcp_server/manager.py +9 -23
- agentpool/mcp_server/registries/official_registry_client.py +10 -1
- agentpool/mcp_server/tool_bridge.py +114 -79
- agentpool/messaging/connection_manager.py +11 -10
- agentpool/messaging/event_manager.py +5 -5
- agentpool/messaging/message_container.py +6 -30
- agentpool/messaging/message_history.py +87 -8
- agentpool/messaging/messagenode.py +52 -14
- agentpool/messaging/messages.py +2 -26
- agentpool/messaging/processing.py +10 -22
- agentpool/models/__init__.py +1 -1
- agentpool/models/acp_agents/base.py +6 -2
- agentpool/models/acp_agents/mcp_capable.py +124 -15
- agentpool/models/acp_agents/non_mcp.py +0 -23
- agentpool/models/agents.py +66 -66
- agentpool/models/agui_agents.py +1 -1
- agentpool/models/claude_code_agents.py +111 -17
- agentpool/models/file_parsing.py +0 -1
- agentpool/models/manifest.py +70 -50
- agentpool/prompts/conversion_manager.py +1 -1
- agentpool/prompts/prompts.py +5 -2
- agentpool/resource_providers/__init__.py +2 -0
- agentpool/resource_providers/aggregating.py +4 -2
- agentpool/resource_providers/base.py +13 -3
- agentpool/resource_providers/codemode/code_executor.py +72 -5
- agentpool/resource_providers/codemode/helpers.py +2 -2
- agentpool/resource_providers/codemode/provider.py +64 -12
- agentpool/resource_providers/codemode/remote_mcp_execution.py +2 -2
- agentpool/resource_providers/codemode/remote_provider.py +9 -12
- agentpool/resource_providers/filtering.py +3 -1
- agentpool/resource_providers/mcp_provider.py +66 -12
- agentpool/resource_providers/plan_provider.py +111 -18
- agentpool/resource_providers/pool.py +5 -3
- agentpool/resource_providers/resource_info.py +111 -0
- agentpool/resource_providers/static.py +2 -2
- agentpool/sessions/__init__.py +2 -0
- agentpool/sessions/manager.py +2 -3
- agentpool/sessions/models.py +9 -6
- agentpool/sessions/protocol.py +28 -0
- agentpool/sessions/session.py +11 -55
- agentpool/storage/manager.py +361 -54
- agentpool/talk/registry.py +4 -4
- agentpool/talk/talk.py +9 -10
- agentpool/testing.py +1 -1
- agentpool/tool_impls/__init__.py +6 -0
- agentpool/tool_impls/agent_cli/__init__.py +42 -0
- agentpool/tool_impls/agent_cli/tool.py +95 -0
- agentpool/tool_impls/bash/__init__.py +64 -0
- agentpool/tool_impls/bash/helpers.py +35 -0
- agentpool/tool_impls/bash/tool.py +171 -0
- agentpool/tool_impls/delete_path/__init__.py +70 -0
- agentpool/tool_impls/delete_path/tool.py +142 -0
- agentpool/tool_impls/download_file/__init__.py +80 -0
- agentpool/tool_impls/download_file/tool.py +183 -0
- agentpool/tool_impls/execute_code/__init__.py +55 -0
- agentpool/tool_impls/execute_code/tool.py +163 -0
- agentpool/tool_impls/grep/__init__.py +80 -0
- agentpool/tool_impls/grep/tool.py +200 -0
- agentpool/tool_impls/list_directory/__init__.py +73 -0
- agentpool/tool_impls/list_directory/tool.py +197 -0
- agentpool/tool_impls/question/__init__.py +42 -0
- agentpool/tool_impls/question/tool.py +127 -0
- agentpool/tool_impls/read/__init__.py +104 -0
- agentpool/tool_impls/read/tool.py +305 -0
- agentpool/tools/__init__.py +2 -1
- agentpool/tools/base.py +114 -34
- agentpool/tools/manager.py +57 -1
- agentpool/ui/base.py +2 -2
- agentpool/ui/mock_provider.py +2 -2
- agentpool/ui/stdlib_provider.py +2 -2
- agentpool/utils/streams.py +21 -96
- agentpool/vfs_registry.py +7 -2
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/METADATA +16 -22
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/RECORD +242 -195
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/WHEEL +1 -1
- agentpool_cli/__main__.py +20 -0
- agentpool_cli/create.py +1 -1
- agentpool_cli/serve_acp.py +59 -1
- agentpool_cli/serve_opencode.py +1 -1
- agentpool_cli/ui.py +557 -0
- agentpool_commands/__init__.py +12 -5
- agentpool_commands/agents.py +1 -1
- agentpool_commands/pool.py +260 -0
- agentpool_commands/session.py +1 -1
- agentpool_commands/text_sharing/__init__.py +119 -0
- agentpool_commands/text_sharing/base.py +123 -0
- agentpool_commands/text_sharing/github_gist.py +80 -0
- agentpool_commands/text_sharing/opencode.py +462 -0
- agentpool_commands/text_sharing/paste_rs.py +59 -0
- agentpool_commands/text_sharing/pastebin.py +116 -0
- agentpool_commands/text_sharing/shittycodingagent.py +112 -0
- agentpool_commands/utils.py +31 -32
- agentpool_config/__init__.py +30 -2
- agentpool_config/agentpool_tools.py +498 -0
- agentpool_config/converters.py +1 -1
- agentpool_config/event_handlers.py +42 -0
- agentpool_config/events.py +1 -1
- agentpool_config/forward_targets.py +1 -4
- agentpool_config/jinja.py +3 -3
- agentpool_config/mcp_server.py +1 -5
- agentpool_config/nodes.py +1 -1
- agentpool_config/observability.py +44 -0
- agentpool_config/session.py +0 -3
- agentpool_config/storage.py +38 -39
- agentpool_config/task.py +3 -3
- agentpool_config/tools.py +11 -28
- agentpool_config/toolsets.py +22 -90
- agentpool_server/a2a_server/agent_worker.py +307 -0
- agentpool_server/a2a_server/server.py +23 -18
- agentpool_server/acp_server/acp_agent.py +125 -56
- agentpool_server/acp_server/commands/acp_commands.py +46 -216
- agentpool_server/acp_server/commands/docs_commands/fetch_repo.py +8 -7
- agentpool_server/acp_server/event_converter.py +651 -0
- agentpool_server/acp_server/input_provider.py +53 -10
- agentpool_server/acp_server/server.py +1 -11
- agentpool_server/acp_server/session.py +90 -410
- agentpool_server/acp_server/session_manager.py +8 -34
- agentpool_server/agui_server/server.py +3 -1
- agentpool_server/mcp_server/server.py +5 -2
- agentpool_server/opencode_server/ENDPOINTS.md +53 -14
- agentpool_server/opencode_server/OPENCODE_UI_TOOLS_COMPLETE.md +202 -0
- agentpool_server/opencode_server/__init__.py +0 -8
- agentpool_server/opencode_server/converters.py +132 -26
- agentpool_server/opencode_server/input_provider.py +160 -8
- agentpool_server/opencode_server/models/__init__.py +42 -20
- agentpool_server/opencode_server/models/app.py +12 -0
- agentpool_server/opencode_server/models/events.py +203 -29
- agentpool_server/opencode_server/models/mcp.py +19 -0
- agentpool_server/opencode_server/models/message.py +18 -1
- agentpool_server/opencode_server/models/parts.py +134 -1
- agentpool_server/opencode_server/models/question.py +56 -0
- agentpool_server/opencode_server/models/session.py +13 -1
- agentpool_server/opencode_server/routes/__init__.py +4 -0
- agentpool_server/opencode_server/routes/agent_routes.py +33 -2
- agentpool_server/opencode_server/routes/app_routes.py +66 -3
- agentpool_server/opencode_server/routes/config_routes.py +66 -5
- agentpool_server/opencode_server/routes/file_routes.py +184 -5
- agentpool_server/opencode_server/routes/global_routes.py +1 -1
- agentpool_server/opencode_server/routes/lsp_routes.py +1 -1
- agentpool_server/opencode_server/routes/message_routes.py +122 -66
- agentpool_server/opencode_server/routes/permission_routes.py +63 -0
- agentpool_server/opencode_server/routes/pty_routes.py +23 -22
- agentpool_server/opencode_server/routes/question_routes.py +128 -0
- agentpool_server/opencode_server/routes/session_routes.py +139 -68
- agentpool_server/opencode_server/routes/tui_routes.py +1 -1
- agentpool_server/opencode_server/server.py +47 -2
- agentpool_server/opencode_server/state.py +30 -0
- agentpool_storage/__init__.py +0 -4
- agentpool_storage/base.py +81 -2
- agentpool_storage/claude_provider/ARCHITECTURE.md +433 -0
- agentpool_storage/claude_provider/__init__.py +42 -0
- agentpool_storage/{claude_provider.py → claude_provider/provider.py} +190 -8
- agentpool_storage/file_provider.py +149 -15
- agentpool_storage/memory_provider.py +132 -12
- agentpool_storage/opencode_provider/ARCHITECTURE.md +386 -0
- agentpool_storage/opencode_provider/__init__.py +16 -0
- agentpool_storage/opencode_provider/helpers.py +414 -0
- agentpool_storage/opencode_provider/provider.py +895 -0
- agentpool_storage/session_store.py +20 -6
- agentpool_storage/sql_provider/sql_provider.py +135 -2
- agentpool_storage/sql_provider/utils.py +2 -12
- agentpool_storage/zed_provider/__init__.py +16 -0
- agentpool_storage/zed_provider/helpers.py +281 -0
- agentpool_storage/zed_provider/models.py +130 -0
- agentpool_storage/zed_provider/provider.py +442 -0
- agentpool_storage/zed_provider.py +803 -0
- agentpool_toolsets/__init__.py +0 -2
- agentpool_toolsets/builtin/__init__.py +2 -4
- agentpool_toolsets/builtin/code.py +4 -4
- agentpool_toolsets/builtin/debug.py +115 -40
- agentpool_toolsets/builtin/execution_environment.py +54 -165
- agentpool_toolsets/builtin/skills.py +0 -77
- agentpool_toolsets/builtin/subagent_tools.py +64 -51
- agentpool_toolsets/builtin/workers.py +4 -2
- agentpool_toolsets/composio_toolset.py +2 -2
- agentpool_toolsets/entry_points.py +3 -1
- agentpool_toolsets/fsspec_toolset/grep.py +25 -5
- agentpool_toolsets/fsspec_toolset/helpers.py +3 -2
- agentpool_toolsets/fsspec_toolset/toolset.py +350 -66
- agentpool_toolsets/mcp_discovery/data/mcp_servers.parquet +0 -0
- agentpool_toolsets/mcp_discovery/toolset.py +74 -17
- agentpool_toolsets/mcp_run_toolset.py +8 -11
- agentpool_toolsets/notifications.py +33 -33
- agentpool_toolsets/openapi.py +3 -1
- agentpool_toolsets/search_toolset.py +3 -1
- agentpool_config/resources.py +0 -33
- agentpool_server/acp_server/acp_tools.py +0 -43
- agentpool_server/acp_server/commands/spawn.py +0 -210
- agentpool_storage/opencode_provider.py +0 -730
- agentpool_storage/text_log_provider.py +0 -276
- agentpool_toolsets/builtin/chain.py +0 -288
- agentpool_toolsets/builtin/user_interaction.py +0 -52
- agentpool_toolsets/semantic_memory_toolset.py +0 -536
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/entry_points.txt +0 -0
- {agentpool-2.2.3.dist-info → agentpool-2.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"""ShittyCodingAgent.ai text sharing provider.
|
|
2
|
+
|
|
3
|
+
Creates a GitHub Gist and returns a preview URL via shittycodingagent.ai.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
|
+
|
|
11
|
+
from agentpool_commands.text_sharing.base import ShareResult, TextSharer
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from agentpool_commands.text_sharing.base import Visibility
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
PREVIEW_BASE_URL = "https://shittycodingagent.ai/session"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ShittyCodingAgentSharer(TextSharer):
|
|
22
|
+
"""Share text via GitHub Gists with shittycodingagent.ai preview URL.
|
|
23
|
+
|
|
24
|
+
Creates a secret (unlisted) GitHub Gist and returns a URL in the format:
|
|
25
|
+
https://shittycodingagent.ai/session?{gist_id}
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(self, token: str | None = None) -> None:
|
|
29
|
+
"""Initialize the ShittyCodingAgent sharer.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
token: GitHub personal access token. If not provided,
|
|
33
|
+
reads from GITHUB_TOKEN environment variable.
|
|
34
|
+
"""
|
|
35
|
+
self._token = token or os.environ.get("GITHUB_TOKEN") or os.environ.get("GH_TOKEN")
|
|
36
|
+
if not self._token:
|
|
37
|
+
msg = "GitHub token required. Set GITHUB_TOKEN/GH_TOKEN or pass token parameter."
|
|
38
|
+
raise ValueError(msg)
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def name(self) -> str:
|
|
42
|
+
"""Name of the sharing service."""
|
|
43
|
+
return "ShittyCodingAgent.ai"
|
|
44
|
+
|
|
45
|
+
async def share(
|
|
46
|
+
self,
|
|
47
|
+
content: str,
|
|
48
|
+
*,
|
|
49
|
+
title: str | None = None,
|
|
50
|
+
syntax: str | None = None,
|
|
51
|
+
visibility: Visibility = "unlisted",
|
|
52
|
+
expires_in: int | None = None,
|
|
53
|
+
) -> ShareResult:
|
|
54
|
+
"""Share content via GitHub Gist with shittycodingagent.ai preview.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
content: The text content to share
|
|
58
|
+
title: Filename for the gist (defaults to "session.html")
|
|
59
|
+
syntax: File extension hint (e.g. "html")
|
|
60
|
+
visibility: Always creates unlisted gist (visibility param ignored)
|
|
61
|
+
expires_in: Ignored (gists don't expire)
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
ShareResult with shittycodingagent.ai preview URL
|
|
65
|
+
"""
|
|
66
|
+
import anyenv
|
|
67
|
+
|
|
68
|
+
# Default to session.html for the typical use case
|
|
69
|
+
filename = title or f"session.{syntax or 'html'}"
|
|
70
|
+
|
|
71
|
+
# Always create as unlisted (secret) gist
|
|
72
|
+
payload: dict[str, Any] = {
|
|
73
|
+
"files": {filename: {"content": content}},
|
|
74
|
+
"public": False,
|
|
75
|
+
}
|
|
76
|
+
headers = {
|
|
77
|
+
"Authorization": f"Bearer {self._token}",
|
|
78
|
+
"Accept": "application/vnd.github+json",
|
|
79
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
80
|
+
}
|
|
81
|
+
url = "https://api.github.com/gists"
|
|
82
|
+
response: dict[str, Any] = await anyenv.post_json(url, payload, headers=headers)
|
|
83
|
+
|
|
84
|
+
gist_id = response["id"]
|
|
85
|
+
raw_url = response["files"][filename]["raw_url"]
|
|
86
|
+
|
|
87
|
+
# Build the shittycodingagent.ai preview URL
|
|
88
|
+
preview_url = f"{PREVIEW_BASE_URL}?{gist_id}"
|
|
89
|
+
|
|
90
|
+
return ShareResult(
|
|
91
|
+
url=preview_url,
|
|
92
|
+
raw_url=raw_url,
|
|
93
|
+
delete_url=None,
|
|
94
|
+
id=gist_id,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
if __name__ == "__main__":
|
|
99
|
+
import asyncio
|
|
100
|
+
|
|
101
|
+
async def main() -> None:
|
|
102
|
+
"""Example usage of the ShittyCodingAgentSharer class."""
|
|
103
|
+
sharer = ShittyCodingAgentSharer()
|
|
104
|
+
result = await sharer.share(
|
|
105
|
+
"<html><body><h1>Test Session</h1></body></html>",
|
|
106
|
+
title="session.html",
|
|
107
|
+
)
|
|
108
|
+
print(f"Preview URL: {result.url}")
|
|
109
|
+
print(f"Raw: {result.raw_url}")
|
|
110
|
+
print(f"Gist ID: {result.id}")
|
|
111
|
+
|
|
112
|
+
asyncio.run(main())
|
agentpool_commands/utils.py
CHANGED
|
@@ -3,16 +3,19 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import importlib.util
|
|
6
|
-
from typing import Literal
|
|
6
|
+
from typing import TYPE_CHECKING, Literal
|
|
7
7
|
import webbrowser
|
|
8
8
|
|
|
9
|
-
from anyenv.text_sharing import TextSharerStr, Visibility # noqa: TC002
|
|
10
9
|
from slashed import CommandContext, CommandError # noqa: TC002
|
|
11
10
|
|
|
12
11
|
from agentpool.messaging.context import NodeContext # noqa: TC001
|
|
13
12
|
from agentpool_commands.base import NodeCommand
|
|
14
13
|
|
|
15
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from agentpool_commands.text_sharing import TextSharerStr, Visibility
|
|
17
|
+
|
|
18
|
+
|
|
16
19
|
LogLevel = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
|
|
17
20
|
|
|
18
21
|
|
|
@@ -21,11 +24,10 @@ class CopyClipboardCommand(NodeCommand):
|
|
|
21
24
|
|
|
22
25
|
Allows copying a configurable number of messages with options for:
|
|
23
26
|
- Number of messages to include
|
|
24
|
-
- Including/excluding system messages
|
|
25
27
|
- Token limit for context size
|
|
26
28
|
- Custom format templates
|
|
27
29
|
|
|
28
|
-
Requires
|
|
30
|
+
Requires copykitten package to be installed.
|
|
29
31
|
"""
|
|
30
32
|
|
|
31
33
|
name = "copy-clipboard"
|
|
@@ -36,7 +38,6 @@ class CopyClipboardCommand(NodeCommand):
|
|
|
36
38
|
ctx: CommandContext[NodeContext],
|
|
37
39
|
*,
|
|
38
40
|
num_messages: int = 1,
|
|
39
|
-
include_system: bool = False,
|
|
40
41
|
max_tokens: int | None = None,
|
|
41
42
|
format_template: str | None = None,
|
|
42
43
|
) -> None:
|
|
@@ -45,19 +46,17 @@ class CopyClipboardCommand(NodeCommand):
|
|
|
45
46
|
Args:
|
|
46
47
|
ctx: Command context
|
|
47
48
|
num_messages: Number of messages to copy (default: 1)
|
|
48
|
-
include_system: Include system messages
|
|
49
49
|
max_tokens: Only include messages up to token limit
|
|
50
50
|
format_template: Custom format template
|
|
51
51
|
"""
|
|
52
52
|
try:
|
|
53
|
-
import
|
|
53
|
+
import copykitten
|
|
54
54
|
except ImportError as e:
|
|
55
|
-
msg = "
|
|
55
|
+
msg = "copykitten package required for clipboard operations"
|
|
56
56
|
raise CommandError(msg) from e
|
|
57
57
|
|
|
58
58
|
content = await ctx.context.agent.conversation.format_history(
|
|
59
59
|
num_messages=num_messages,
|
|
60
|
-
include_system=include_system,
|
|
61
60
|
max_tokens=max_tokens,
|
|
62
61
|
format_template=format_template,
|
|
63
62
|
)
|
|
@@ -67,8 +66,7 @@ class CopyClipboardCommand(NodeCommand):
|
|
|
67
66
|
return
|
|
68
67
|
|
|
69
68
|
try:
|
|
70
|
-
|
|
71
|
-
clipman.copy(content)
|
|
69
|
+
copykitten.copy(content)
|
|
72
70
|
await ctx.print("📋 **Messages copied to clipboard**")
|
|
73
71
|
except Exception as e:
|
|
74
72
|
msg = f"Failed to copy to clipboard: {e}"
|
|
@@ -76,8 +74,8 @@ class CopyClipboardCommand(NodeCommand):
|
|
|
76
74
|
|
|
77
75
|
@classmethod
|
|
78
76
|
def condition(cls) -> bool:
|
|
79
|
-
"""Check if
|
|
80
|
-
return importlib.util.find_spec("
|
|
77
|
+
"""Check if copykitten is available."""
|
|
78
|
+
return importlib.util.find_spec("copykitten") is not None
|
|
81
79
|
|
|
82
80
|
|
|
83
81
|
class EditAgentFileCommand(NodeCommand):
|
|
@@ -134,8 +132,7 @@ class ShareHistoryCommand(NodeCommand):
|
|
|
134
132
|
ctx: CommandContext[NodeContext],
|
|
135
133
|
*,
|
|
136
134
|
provider: TextSharerStr = "paste_rs",
|
|
137
|
-
num_messages: int =
|
|
138
|
-
include_system: bool = False,
|
|
135
|
+
num_messages: int | None = None,
|
|
139
136
|
max_tokens: int | None = None,
|
|
140
137
|
format_template: str | None = None,
|
|
141
138
|
title: str | None = None,
|
|
@@ -147,32 +144,39 @@ class ShareHistoryCommand(NodeCommand):
|
|
|
147
144
|
Args:
|
|
148
145
|
ctx: Command context
|
|
149
146
|
provider: Text sharing provider to use
|
|
150
|
-
num_messages: Number of messages from history to share (
|
|
151
|
-
include_system: Include system messages in history
|
|
147
|
+
num_messages: Number of messages from history to share (None = all messages)
|
|
152
148
|
max_tokens: Token limit for conversation history
|
|
153
149
|
format_template: Custom format template for history
|
|
154
150
|
title: Title/filename for the shared content
|
|
155
151
|
syntax: Syntax highlighting (e.g., "python", "markdown")
|
|
156
152
|
visibility: Visibility level
|
|
157
153
|
"""
|
|
158
|
-
from
|
|
154
|
+
from agentpool_commands.text_sharing import get_sharer
|
|
159
155
|
|
|
160
|
-
|
|
161
|
-
num_messages=num_messages,
|
|
162
|
-
include_system=include_system,
|
|
163
|
-
max_tokens=max_tokens,
|
|
164
|
-
format_template=format_template,
|
|
165
|
-
)
|
|
156
|
+
conversation = ctx.context.agent.conversation
|
|
166
157
|
|
|
167
|
-
if
|
|
158
|
+
# Check if there's content to share
|
|
159
|
+
messages_to_check = (
|
|
160
|
+
conversation.chat_messages[-num_messages:]
|
|
161
|
+
if num_messages
|
|
162
|
+
else conversation.chat_messages
|
|
163
|
+
)
|
|
164
|
+
if not messages_to_check:
|
|
168
165
|
await ctx.print("ℹ️ **No content to share**") # noqa: RUF001
|
|
169
166
|
return
|
|
170
167
|
|
|
171
168
|
try:
|
|
172
169
|
# Get the appropriate sharer
|
|
173
170
|
sharer = get_sharer(provider)
|
|
174
|
-
|
|
175
|
-
|
|
171
|
+
|
|
172
|
+
# Use structured sharing for providers that support it (OpenCode)
|
|
173
|
+
# Otherwise fall back to plain text sharing
|
|
174
|
+
result = await sharer.share_conversation(
|
|
175
|
+
conversation,
|
|
176
|
+
title=title,
|
|
177
|
+
visibility=visibility,
|
|
178
|
+
num_messages=num_messages,
|
|
179
|
+
)
|
|
176
180
|
# Format success message
|
|
177
181
|
provider_name = sharer.name
|
|
178
182
|
msg_parts = [f"🔗 **Content shared via {provider_name}:**", f"• URL: {result.url}"]
|
|
@@ -187,11 +191,6 @@ class ShareHistoryCommand(NodeCommand):
|
|
|
187
191
|
msg = f"Failed to share content via {provider}: {e}"
|
|
188
192
|
raise CommandError(msg) from e
|
|
189
193
|
|
|
190
|
-
@classmethod
|
|
191
|
-
def condition(cls) -> bool:
|
|
192
|
-
"""Check if anyenv text_sharing is available."""
|
|
193
|
-
return importlib.util.find_spec("anyenv.text_sharing") is not None
|
|
194
|
-
|
|
195
194
|
|
|
196
195
|
class GetLogsCommand(NodeCommand):
|
|
197
196
|
"""Get recent log entries from memory.
|
agentpool_config/__init__.py
CHANGED
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
from typing import Annotated
|
|
7
|
+
from pydantic import Field
|
|
8
|
+
|
|
9
|
+
from agentpool_config.tools import ImportToolConfig, BaseToolConfig
|
|
10
|
+
from agentpool_config.agentpool_tools import AgentpoolToolConfig
|
|
11
|
+
from agentpool_config.builtin_tools import BuiltinToolConfig
|
|
12
|
+
|
|
6
13
|
from agentpool_config.forward_targets import ForwardingTarget
|
|
7
14
|
from agentpool_config.session import SessionQuery
|
|
8
15
|
from agentpool_config.teams import TeamConfig
|
|
@@ -28,11 +35,30 @@ from agentpool_config.hooks import (
|
|
|
28
35
|
HooksConfig,
|
|
29
36
|
PromptHookConfig,
|
|
30
37
|
)
|
|
38
|
+
from agentpool_config.toolsets import ToolsetConfig
|
|
31
39
|
|
|
40
|
+
|
|
41
|
+
ToolConfig = Annotated[
|
|
42
|
+
ImportToolConfig | AgentpoolToolConfig,
|
|
43
|
+
Field(discriminator="type"),
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
NativeAgentToolConfig = Annotated[
|
|
47
|
+
ToolConfig | BuiltinToolConfig,
|
|
48
|
+
Field(discriminator="type"),
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
# Unified type for all tool configurations (single tools + toolsets)
|
|
52
|
+
AnyToolConfig = Annotated[
|
|
53
|
+
NativeAgentToolConfig | ToolsetConfig,
|
|
54
|
+
Field(discriminator="type"),
|
|
55
|
+
]
|
|
32
56
|
__all__ = [
|
|
57
|
+
"AnyToolConfig",
|
|
33
58
|
"BaseEventHandlerConfig",
|
|
34
59
|
"BaseHookConfig",
|
|
35
60
|
"BaseMCPServerConfig",
|
|
61
|
+
"BaseToolConfig",
|
|
36
62
|
"CallableHookConfig",
|
|
37
63
|
"CallbackEventHandlerConfig",
|
|
38
64
|
"CommandHookConfig",
|
|
@@ -41,13 +67,15 @@ __all__ = [
|
|
|
41
67
|
"HookConfig",
|
|
42
68
|
"HooksConfig",
|
|
43
69
|
"MCPServerConfig",
|
|
70
|
+
"NativeAgentToolConfig",
|
|
44
71
|
"PromptHookConfig",
|
|
45
|
-
"ResourceInfo",
|
|
46
72
|
"SSEMCPServerConfig",
|
|
47
73
|
"SessionQuery",
|
|
48
74
|
"StdioMCPServerConfig",
|
|
49
75
|
"StdoutEventHandlerConfig",
|
|
50
76
|
"StreamableHTTPMCPServerConfig",
|
|
51
77
|
"TeamConfig",
|
|
78
|
+
"ToolConfig",
|
|
79
|
+
"ToolsetConfig",
|
|
52
80
|
"resolve_handler_configs",
|
|
53
81
|
]
|