devduck 1.1.5__py3-none-any.whl → 1.1.7__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.
Potentially problematic release.
This version of devduck might be problematic. Click here for more details.
- devduck/__init__.py +2 -4
- devduck/_version.py +2 -2
- devduck/tools/__init__.py +48 -22
- {devduck-1.1.5.dist-info → devduck-1.1.7.dist-info}/METADATA +93 -6
- {devduck-1.1.5.dist-info → devduck-1.1.7.dist-info}/RECORD +9 -9
- {devduck-1.1.5.dist-info → devduck-1.1.7.dist-info}/WHEEL +0 -0
- {devduck-1.1.5.dist-info → devduck-1.1.7.dist-info}/entry_points.txt +0 -0
- {devduck-1.1.5.dist-info → devduck-1.1.7.dist-info}/licenses/LICENSE +0 -0
- {devduck-1.1.5.dist-info → devduck-1.1.7.dist-info}/top_level.txt +0 -0
devduck/__init__.py
CHANGED
|
@@ -687,8 +687,6 @@ class DevDuck:
|
|
|
687
687
|
server_tools_needed = []
|
|
688
688
|
if servers.get("tcp", {}).get("enabled", False):
|
|
689
689
|
server_tools_needed.append("tcp")
|
|
690
|
-
if servers.get("ws", {}).get("enabled", True):
|
|
691
|
-
server_tools_needed.append("websocket")
|
|
692
690
|
if servers.get("mcp", {}).get("enabled", False):
|
|
693
691
|
server_tools_needed.append("mcp_server")
|
|
694
692
|
if servers.get("ipc", {}).get("enabled", False):
|
|
@@ -697,11 +695,11 @@ class DevDuck:
|
|
|
697
695
|
# Append to default tools if any server tools are needed
|
|
698
696
|
if server_tools_needed:
|
|
699
697
|
server_tools_str = ",".join(server_tools_needed)
|
|
700
|
-
default_tools = f"devduck.tools:system_prompt,fetch_github_tool,{server_tools_str};strands_tools:shell"
|
|
698
|
+
default_tools = f"devduck.tools:system_prompt,fetch_github_tool,websocket,{server_tools_str};strands_tools:shell"
|
|
701
699
|
logger.info(f"Auto-added server tools: {server_tools_str}")
|
|
702
700
|
else:
|
|
703
701
|
default_tools = (
|
|
704
|
-
"devduck.tools:system_prompt,fetch_github_tool;strands_tools:shell"
|
|
702
|
+
"devduck.tools:system_prompt,fetch_github_tool,websocket;strands_tools:shell"
|
|
705
703
|
)
|
|
706
704
|
|
|
707
705
|
tools_config = os.getenv("DEVDUCK_TOOLS", default_tools)
|
devduck/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.1.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 1,
|
|
31
|
+
__version__ = version = '1.1.7'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 1, 7)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
devduck/tools/__init__.py
CHANGED
|
@@ -15,7 +15,6 @@ from .install_tools import install_tools
|
|
|
15
15
|
from .ipc import ipc
|
|
16
16
|
from .mcp_server import mcp_server
|
|
17
17
|
from .scraper import scraper
|
|
18
|
-
from .speech_to_speech import speech_to_speech
|
|
19
18
|
from .state_manager import state_manager
|
|
20
19
|
from .store_in_kb import store_in_kb
|
|
21
20
|
from .system_prompt import system_prompt
|
|
@@ -24,24 +23,51 @@ from .tray import tray
|
|
|
24
23
|
from .use_github import use_github
|
|
25
24
|
from .websocket import websocket
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
26
|
+
# Optional Tools
|
|
27
|
+
try:
|
|
28
|
+
from .speech_to_speech import speech_to_speech
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
"agentcore_agents",
|
|
32
|
+
"agentcore_config",
|
|
33
|
+
"agentcore_invoke",
|
|
34
|
+
"agentcore_logs",
|
|
35
|
+
"ambient",
|
|
36
|
+
"create_subagent",
|
|
37
|
+
"fetch_github_tool",
|
|
38
|
+
"install_tools",
|
|
39
|
+
"ipc",
|
|
40
|
+
"mcp_server",
|
|
41
|
+
"scraper",
|
|
42
|
+
"speech_to_speech",
|
|
43
|
+
"state_manager",
|
|
44
|
+
"store_in_kb",
|
|
45
|
+
"system_prompt",
|
|
46
|
+
"tcp",
|
|
47
|
+
"tray",
|
|
48
|
+
"use_github",
|
|
49
|
+
"websocket",
|
|
50
|
+
]
|
|
51
|
+
except ImportError:
|
|
52
|
+
__all__ = [
|
|
53
|
+
"agentcore_agents",
|
|
54
|
+
"agentcore_config",
|
|
55
|
+
"agentcore_invoke",
|
|
56
|
+
"agentcore_logs",
|
|
57
|
+
"ambient",
|
|
58
|
+
"create_subagent",
|
|
59
|
+
"fetch_github_tool",
|
|
60
|
+
"install_tools",
|
|
61
|
+
"ipc",
|
|
62
|
+
"mcp_server",
|
|
63
|
+
"scraper",
|
|
64
|
+
"state_manager",
|
|
65
|
+
"store_in_kb",
|
|
66
|
+
"system_prompt",
|
|
67
|
+
"tcp",
|
|
68
|
+
"tray",
|
|
69
|
+
"use_github",
|
|
70
|
+
"websocket",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devduck
|
|
3
|
-
Version: 1.1.
|
|
4
|
-
Summary: 🦆
|
|
3
|
+
Version: 1.1.7
|
|
4
|
+
Summary: 🦆 Self-adapting agent - one file.
|
|
5
5
|
Author-email: Cagatay Cali <cagataycali@icloud.com>
|
|
6
6
|
License: Apache-2.0
|
|
7
7
|
Project-URL: Homepage, https://github.com/cagataycali/devduck
|
|
@@ -31,7 +31,6 @@ Requires-Dist: prompt_toolkit
|
|
|
31
31
|
Requires-Dist: strands-agents[ollama]
|
|
32
32
|
Requires-Dist: strands-agents[anthropic]
|
|
33
33
|
Requires-Dist: strands-agents[openai]
|
|
34
|
-
Requires-Dist: strands-agents[bidi-all]
|
|
35
34
|
Requires-Dist: strands-agents[otel]
|
|
36
35
|
Requires-Dist: strands-agents-tools
|
|
37
36
|
Requires-Dist: beautifulsoup4
|
|
@@ -43,6 +42,8 @@ Requires-Dist: bedrock-agentcore-starter-toolkit
|
|
|
43
42
|
Requires-Dist: bedrock-agentcore
|
|
44
43
|
Requires-Dist: rumps; sys_platform == "darwin"
|
|
45
44
|
Requires-Dist: strands-mlx; sys_platform == "darwin"
|
|
45
|
+
Provides-Extra: speech
|
|
46
|
+
Requires-Dist: strands-agents[bidi-all]; extra == "speech"
|
|
46
47
|
Dynamic: license-file
|
|
47
48
|
|
|
48
49
|
# 🦆 DevDuck
|
|
@@ -74,6 +75,9 @@ Learn more: https://duck.nyc
|
|
|
74
75
|
# Install & run
|
|
75
76
|
pipx install devduck && devduck
|
|
76
77
|
|
|
78
|
+
# With speech-to-speech capabilities (optional)
|
|
79
|
+
pipx install "devduck[speech]" && devduck
|
|
80
|
+
|
|
77
81
|
# One-shot query
|
|
78
82
|
devduck "create a REST API with FastAPI"
|
|
79
83
|
|
|
@@ -83,6 +87,9 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
83
87
|
|
|
84
88
|
**Requirements:** Python 3.10-3.13, AWS credentials (or Ollama/Anthropic/GitHub/MLX)
|
|
85
89
|
|
|
90
|
+
**Optional extras:**
|
|
91
|
+
- `devduck[speech]` - Real-time speech-to-speech conversations (Nova Sonic, OpenAI Realtime, Gemini Live)
|
|
92
|
+
|
|
86
93
|
---
|
|
87
94
|
|
|
88
95
|
## Core Capabilities
|
|
@@ -98,6 +105,7 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
98
105
|
| 💾 **State Time-Travel** | Save/restore agent state | `state_manager(action="export")` |
|
|
99
106
|
| 📝 **Self-Improvement** | Updates own system prompt | `system_prompt(action="add_context", ...)` |
|
|
100
107
|
| ☁️ **AWS Deploy** | One-command serverless | `agentcore_config(auto_launch=True)` |
|
|
108
|
+
| 🎤 **Speech-to-Speech** | Real-time voice conversations | `pip install devduck[speech]` |
|
|
101
109
|
|
|
102
110
|
---
|
|
103
111
|
|
|
@@ -108,7 +116,13 @@ git clone git@github.com:cagataycali/devduck.git
|
|
|
108
116
|
cd devduck
|
|
109
117
|
python3.13 -m venv .venv
|
|
110
118
|
source .venv/bin/activate
|
|
119
|
+
|
|
120
|
+
# Basic install
|
|
111
121
|
.venv/bin/pip3.13 install -e .
|
|
122
|
+
|
|
123
|
+
# With speech capabilities
|
|
124
|
+
.venv/bin/pip3.13 install -e ".[speech]"
|
|
125
|
+
|
|
112
126
|
devduck
|
|
113
127
|
```
|
|
114
128
|
|
|
@@ -279,6 +293,67 @@ devduck
|
|
|
279
293
|
|
|
280
294
|
---
|
|
281
295
|
|
|
296
|
+
## Speech-to-Speech (Optional)
|
|
297
|
+
|
|
298
|
+
**Install speech capabilities:**
|
|
299
|
+
```bash
|
|
300
|
+
pip install "devduck[speech]"
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Real-time voice conversations** with multiple providers:
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
# Start speech session with Nova Sonic (AWS Bedrock)
|
|
307
|
+
speech_to_speech(action="start", provider="novasonic")
|
|
308
|
+
|
|
309
|
+
# Start with OpenAI Realtime API
|
|
310
|
+
speech_to_speech(action="start", provider="openai")
|
|
311
|
+
|
|
312
|
+
# Start with Gemini Live
|
|
313
|
+
speech_to_speech(action="start", provider="gemini_live")
|
|
314
|
+
|
|
315
|
+
# Custom voice and settings
|
|
316
|
+
speech_to_speech(
|
|
317
|
+
action="start",
|
|
318
|
+
provider="novasonic",
|
|
319
|
+
model_settings={
|
|
320
|
+
"provider_config": {"audio": {"voice": "matthew"}},
|
|
321
|
+
"client_config": {"region": "us-east-1"}
|
|
322
|
+
}
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
# Stop session
|
|
326
|
+
speech_to_speech(action="stop", session_id="speech_20250126_140000")
|
|
327
|
+
|
|
328
|
+
# Check status
|
|
329
|
+
speech_to_speech(action="status")
|
|
330
|
+
|
|
331
|
+
# List conversation histories
|
|
332
|
+
speech_to_speech(action="list_history")
|
|
333
|
+
|
|
334
|
+
# List available audio devices
|
|
335
|
+
speech_to_speech(action="list_audio_devices")
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Supported Providers:**
|
|
339
|
+
- **Nova Sonic (AWS Bedrock):** 11 voices (English, French, Italian, German, Spanish)
|
|
340
|
+
- **OpenAI Realtime API:** GPT-4o Realtime models
|
|
341
|
+
- **Gemini Live:** Native audio streaming
|
|
342
|
+
|
|
343
|
+
**Environment Variables:**
|
|
344
|
+
- `OPENAI_API_KEY` - For OpenAI Realtime
|
|
345
|
+
- `GOOGLE_API_KEY` or `GEMINI_API_KEY` - For Gemini Live
|
|
346
|
+
- AWS credentials - For Nova Sonic (boto3 default credential chain)
|
|
347
|
+
|
|
348
|
+
**Features:**
|
|
349
|
+
- Background execution (parent agent stays responsive)
|
|
350
|
+
- Tool inheritance from parent agent
|
|
351
|
+
- Conversation history saved automatically
|
|
352
|
+
- Natural interruption with VAD
|
|
353
|
+
- Custom audio device selection
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
282
357
|
## MCP Integration
|
|
283
358
|
|
|
284
359
|
### As MCP Server (Expose DevDuck)
|
|
@@ -445,9 +520,9 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
445
520
|
---
|
|
446
521
|
|
|
447
522
|
<details>
|
|
448
|
-
<summary><strong>📋 All Built-in Tools (
|
|
523
|
+
<summary><strong>📋 All Built-in Tools (39 total)</strong></summary>
|
|
449
524
|
|
|
450
|
-
### DevDuck Core (
|
|
525
|
+
### DevDuck Core (18 tools)
|
|
451
526
|
- `system_prompt` - Update agent's system prompt (GitHub sync support)
|
|
452
527
|
- `store_in_kb` - Store content in Bedrock Knowledge Base
|
|
453
528
|
- `state_manager` - Save/restore agent state (time-travel)
|
|
@@ -466,6 +541,7 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
466
541
|
- `agentcore_agents` - List/manage agent runtimes
|
|
467
542
|
- `manage_tools` - Runtime tool add/remove/reload
|
|
468
543
|
- `view_logs` - View/search/clear DevDuck logs
|
|
544
|
+
- `speech_to_speech` - Real-time speech-to-speech conversations (optional - install with `pip install devduck[speech]`)
|
|
469
545
|
|
|
470
546
|
### Strands Tools (13 tools)
|
|
471
547
|
- `shell` - Interactive shell with PTY support
|
|
@@ -572,7 +648,7 @@ devduck
|
|
|
572
648
|
| `LITELLM_API_KEY` | - | LiteLLM API key (auto-detected) |
|
|
573
649
|
| `LLAMAAPI_API_KEY` | - | LlamaAPI key (auto-detected) |
|
|
574
650
|
| **Tools** | | |
|
|
575
|
-
| `DEVDUCK_TOOLS` |
|
|
651
|
+
| `DEVDUCK_TOOLS` | 39 tools | Format: `package1:tool1,tool2;package2:tool3` |
|
|
576
652
|
| `DEVDUCK_LOAD_TOOLS_FROM_DIR` | `false` | Auto-load from `./tools/` directory |
|
|
577
653
|
| **Memory** | | |
|
|
578
654
|
| `DEVDUCK_KNOWLEDGE_BASE_ID` | - | Bedrock KB ID for auto-RAG |
|
|
@@ -588,6 +664,8 @@ devduck
|
|
|
588
664
|
| `DEVDUCK_ENABLE_WS` | `true` | Enable WebSocket server |
|
|
589
665
|
| `DEVDUCK_ENABLE_MCP` | `true` | Enable MCP server |
|
|
590
666
|
| `DEVDUCK_ENABLE_IPC` | `true` | Enable IPC server |
|
|
667
|
+
| **Speech** | | |
|
|
668
|
+
| `BIDI_MODEL_ID` | Provider default | Override bidi model (e.g., `amazon.nova-2-sonic-v1:0`) |
|
|
591
669
|
| **Context** | | |
|
|
592
670
|
| `DEVDUCK_LOG_LINE_COUNT` | `50` | Recent log lines in context |
|
|
593
671
|
| `DEVDUCK_LAST_MESSAGE_COUNT` | `200` | Recent messages in context |
|
|
@@ -630,6 +708,15 @@ export DEVDUCK_LOG_LINE_COUNT=20
|
|
|
630
708
|
export DEVDUCK_LAST_MESSAGE_COUNT=50
|
|
631
709
|
```
|
|
632
710
|
|
|
711
|
+
**Speech dependencies not found:**
|
|
712
|
+
```bash
|
|
713
|
+
# Install speech extras
|
|
714
|
+
pip install "devduck[speech]"
|
|
715
|
+
|
|
716
|
+
# Or with pipx
|
|
717
|
+
pipx install "devduck[speech]"
|
|
718
|
+
```
|
|
719
|
+
|
|
633
720
|
**Ambient overlay not starting:**
|
|
634
721
|
```bash
|
|
635
722
|
# Make sure tkinter is installed
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
devduck/__init__.py,sha256=
|
|
1
|
+
devduck/__init__.py,sha256=4yV11upjpY7xL0KZHERZw8zkDJTk6AlPV5qZve0Q7ho,75863
|
|
2
2
|
devduck/__main__.py,sha256=aeF2RR4k7lzSR2X1QKV9XQPCKhtsH0JYUv2etBBqmL0,145
|
|
3
|
-
devduck/_version.py,sha256=
|
|
3
|
+
devduck/_version.py,sha256=XScxAJn_hLwoilMyvvJG_0tPX3X-Jhde5mefhI8pVSM,704
|
|
4
4
|
devduck/agentcore_handler.py,sha256=0DKJTTjoH9P8a70G0f5dOIIwy6bjqaN46voAWaSOpDY,2221
|
|
5
5
|
devduck/test_redduck.py,sha256=ILtKKMuoyVfmhnibmbojpbOsqbcKooZv4j9qtE2LWdw,1750
|
|
6
|
-
devduck/tools/__init__.py,sha256=
|
|
6
|
+
devduck/tools/__init__.py,sha256=xoLphnkrIo1vwXohLwHxHgAtCNaTfAtPv-oSS7JMu8Q,1744
|
|
7
7
|
devduck/tools/_ambient_input.py,sha256=3lBgLO81BvkxjgTrQc-EuxNLXmO1oPUt2Ysg1jR4Fsk,13897
|
|
8
8
|
devduck/tools/_tray_app.py,sha256=E4rtJcegRsBs_FdQVGdA-0Ax7uxVb6AbuyqjwCArHj0,19405
|
|
9
9
|
devduck/tools/agentcore_agents.py,sha256=fiDNhl7R2tVbp1mEOySJTfGXwap5q3COenYOjiJDE_g,6488
|
|
@@ -25,9 +25,9 @@ devduck/tools/tcp.py,sha256=w2m_Jf6vZ4NYu0AwgZd7C7eKs4No2EVHZ2WYIl_Bt0A,22017
|
|
|
25
25
|
devduck/tools/tray.py,sha256=FgVhUtLdsdv5_ERK-RyAIpDE8Zb0IfoqhHQdwMxrHUQ,7547
|
|
26
26
|
devduck/tools/use_github.py,sha256=nr3JSGk48mKUobpgW__2gu6lFyUj93a1XRs3I6vH8W4,13682
|
|
27
27
|
devduck/tools/websocket.py,sha256=A8bqgdDZs8hcf2HctkJzQOzMvb5mXUC7YZ-xqkOyn94,16959
|
|
28
|
-
devduck-1.1.
|
|
29
|
-
devduck-1.1.
|
|
30
|
-
devduck-1.1.
|
|
31
|
-
devduck-1.1.
|
|
32
|
-
devduck-1.1.
|
|
33
|
-
devduck-1.1.
|
|
28
|
+
devduck-1.1.7.dist-info/licenses/LICENSE,sha256=UANcoWwfVeuM9597WUkjEQbzqIUH0bJoE9Tpwgj_LvU,11345
|
|
29
|
+
devduck-1.1.7.dist-info/METADATA,sha256=FTF9VSKqQKNrqCo11fJYWmoCpXa7dppmC48VsCGesnk,24090
|
|
30
|
+
devduck-1.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
31
|
+
devduck-1.1.7.dist-info/entry_points.txt,sha256=PJ8gvdi2MnKEK8yCwcmZDeLQ-lx94EV_jp4-v8AKuTA,58
|
|
32
|
+
devduck-1.1.7.dist-info/top_level.txt,sha256=ySXWlVronp8xHYfQ_Hdfr463e0EnbWuqyuxs94EU7yk,8
|
|
33
|
+
devduck-1.1.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|