devduck 1.1.4__tar.gz → 1.1.6__tar.gz
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-1.1.4 → devduck-1.1.6}/PKG-INFO +93 -8
- {devduck-1.1.4 → devduck-1.1.6}/README.md +89 -3
- {devduck-1.1.4 → devduck-1.1.6}/devduck/_version.py +3 -3
- {devduck-1.1.4 → devduck-1.1.6}/devduck.egg-info/PKG-INFO +93 -8
- {devduck-1.1.4 → devduck-1.1.6}/devduck.egg-info/SOURCES.txt +0 -2
- {devduck-1.1.4 → devduck-1.1.6}/devduck.egg-info/requires.txt +3 -3
- {devduck-1.1.4 → devduck-1.1.6}/pyproject.toml +7 -5
- devduck-1.1.4/docs/android.html +0 -1425
- devduck-1.1.4/docs/devduck_tools_config.json +0 -671
- {devduck-1.1.4 → devduck-1.1.6}/.github/workflows/agent.yml +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/.gitignore +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/LICENSE +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/MANIFEST.in +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/action.yml +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/agent_runner.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/__init__.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/__main__.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/agentcore_handler.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/test_redduck.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/__init__.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/_ambient_input.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/_tray_app.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/agentcore_agents.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/agentcore_config.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/agentcore_invoke.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/agentcore_logs.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/ambient.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/create_subagent.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/fetch_github_tool.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/install_tools.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/ipc.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/mcp_server.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/scraper.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/speech_to_speech.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/state_manager.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/store_in_kb.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/system_prompt.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/tcp.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/tray.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/use_github.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck/tools/websocket.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck.egg-info/dependency_links.txt +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck.egg-info/entry_points.txt +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/devduck.egg-info/top_level.txt +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/docs/index.html +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/docs/mac-os-tray.jpg +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/requirements.txt +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/setup-aws-oidc.sh +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/setup.cfg +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/test.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/tools/__init__.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/tools/fetch_github_tool.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/tools/gist.py +0 -0
- {devduck-1.1.4 → devduck-1.1.6}/tools/github_tools.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devduck
|
|
3
|
-
Version: 1.1.
|
|
4
|
-
Summary: 🦆
|
|
3
|
+
Version: 1.1.6
|
|
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,11 +31,8 @@ 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]; sys_platform == "darwin"
|
|
35
34
|
Requires-Dist: strands-agents[otel]
|
|
36
35
|
Requires-Dist: strands-agents-tools
|
|
37
|
-
Requires-Dist: strands-fun-tools[all]; sys_platform == "darwin"
|
|
38
|
-
Requires-Dist: strands-fun-tools[audio]; sys_platform == "darwin"
|
|
39
36
|
Requires-Dist: beautifulsoup4
|
|
40
37
|
Requires-Dist: colorama
|
|
41
38
|
Requires-Dist: websockets
|
|
@@ -45,6 +42,8 @@ Requires-Dist: bedrock-agentcore-starter-toolkit
|
|
|
45
42
|
Requires-Dist: bedrock-agentcore
|
|
46
43
|
Requires-Dist: rumps; sys_platform == "darwin"
|
|
47
44
|
Requires-Dist: strands-mlx; sys_platform == "darwin"
|
|
45
|
+
Provides-Extra: speech
|
|
46
|
+
Requires-Dist: strands-agents[bidi-all]; extra == "speech"
|
|
48
47
|
Dynamic: license-file
|
|
49
48
|
|
|
50
49
|
# 🦆 DevDuck
|
|
@@ -76,6 +75,9 @@ Learn more: https://duck.nyc
|
|
|
76
75
|
# Install & run
|
|
77
76
|
pipx install devduck && devduck
|
|
78
77
|
|
|
78
|
+
# With speech-to-speech capabilities (optional)
|
|
79
|
+
pipx install "devduck[speech]" && devduck
|
|
80
|
+
|
|
79
81
|
# One-shot query
|
|
80
82
|
devduck "create a REST API with FastAPI"
|
|
81
83
|
|
|
@@ -85,6 +87,9 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
85
87
|
|
|
86
88
|
**Requirements:** Python 3.10-3.13, AWS credentials (or Ollama/Anthropic/GitHub/MLX)
|
|
87
89
|
|
|
90
|
+
**Optional extras:**
|
|
91
|
+
- `devduck[speech]` - Real-time speech-to-speech conversations (Nova Sonic, OpenAI Realtime, Gemini Live)
|
|
92
|
+
|
|
88
93
|
---
|
|
89
94
|
|
|
90
95
|
## Core Capabilities
|
|
@@ -100,6 +105,7 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
100
105
|
| 💾 **State Time-Travel** | Save/restore agent state | `state_manager(action="export")` |
|
|
101
106
|
| 📝 **Self-Improvement** | Updates own system prompt | `system_prompt(action="add_context", ...)` |
|
|
102
107
|
| ☁️ **AWS Deploy** | One-command serverless | `agentcore_config(auto_launch=True)` |
|
|
108
|
+
| 🎤 **Speech-to-Speech** | Real-time voice conversations | `pip install devduck[speech]` |
|
|
103
109
|
|
|
104
110
|
---
|
|
105
111
|
|
|
@@ -110,7 +116,13 @@ git clone git@github.com:cagataycali/devduck.git
|
|
|
110
116
|
cd devduck
|
|
111
117
|
python3.13 -m venv .venv
|
|
112
118
|
source .venv/bin/activate
|
|
119
|
+
|
|
120
|
+
# Basic install
|
|
113
121
|
.venv/bin/pip3.13 install -e .
|
|
122
|
+
|
|
123
|
+
# With speech capabilities
|
|
124
|
+
.venv/bin/pip3.13 install -e ".[speech]"
|
|
125
|
+
|
|
114
126
|
devduck
|
|
115
127
|
```
|
|
116
128
|
|
|
@@ -281,6 +293,67 @@ devduck
|
|
|
281
293
|
|
|
282
294
|
---
|
|
283
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
|
+
|
|
284
357
|
## MCP Integration
|
|
285
358
|
|
|
286
359
|
### As MCP Server (Expose DevDuck)
|
|
@@ -447,9 +520,9 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
447
520
|
---
|
|
448
521
|
|
|
449
522
|
<details>
|
|
450
|
-
<summary><strong>📋 All Built-in Tools (
|
|
523
|
+
<summary><strong>📋 All Built-in Tools (39 total)</strong></summary>
|
|
451
524
|
|
|
452
|
-
### DevDuck Core (
|
|
525
|
+
### DevDuck Core (18 tools)
|
|
453
526
|
- `system_prompt` - Update agent's system prompt (GitHub sync support)
|
|
454
527
|
- `store_in_kb` - Store content in Bedrock Knowledge Base
|
|
455
528
|
- `state_manager` - Save/restore agent state (time-travel)
|
|
@@ -468,6 +541,7 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
468
541
|
- `agentcore_agents` - List/manage agent runtimes
|
|
469
542
|
- `manage_tools` - Runtime tool add/remove/reload
|
|
470
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]`)
|
|
471
545
|
|
|
472
546
|
### Strands Tools (13 tools)
|
|
473
547
|
- `shell` - Interactive shell with PTY support
|
|
@@ -574,7 +648,7 @@ devduck
|
|
|
574
648
|
| `LITELLM_API_KEY` | - | LiteLLM API key (auto-detected) |
|
|
575
649
|
| `LLAMAAPI_API_KEY` | - | LlamaAPI key (auto-detected) |
|
|
576
650
|
| **Tools** | | |
|
|
577
|
-
| `DEVDUCK_TOOLS` |
|
|
651
|
+
| `DEVDUCK_TOOLS` | 39 tools | Format: `package1:tool1,tool2;package2:tool3` |
|
|
578
652
|
| `DEVDUCK_LOAD_TOOLS_FROM_DIR` | `false` | Auto-load from `./tools/` directory |
|
|
579
653
|
| **Memory** | | |
|
|
580
654
|
| `DEVDUCK_KNOWLEDGE_BASE_ID` | - | Bedrock KB ID for auto-RAG |
|
|
@@ -590,6 +664,8 @@ devduck
|
|
|
590
664
|
| `DEVDUCK_ENABLE_WS` | `true` | Enable WebSocket server |
|
|
591
665
|
| `DEVDUCK_ENABLE_MCP` | `true` | Enable MCP server |
|
|
592
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`) |
|
|
593
669
|
| **Context** | | |
|
|
594
670
|
| `DEVDUCK_LOG_LINE_COUNT` | `50` | Recent log lines in context |
|
|
595
671
|
| `DEVDUCK_LAST_MESSAGE_COUNT` | `200` | Recent messages in context |
|
|
@@ -632,6 +708,15 @@ export DEVDUCK_LOG_LINE_COUNT=20
|
|
|
632
708
|
export DEVDUCK_LAST_MESSAGE_COUNT=50
|
|
633
709
|
```
|
|
634
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
|
+
|
|
635
720
|
**Ambient overlay not starting:**
|
|
636
721
|
```bash
|
|
637
722
|
# Make sure tkinter is installed
|
|
@@ -27,6 +27,9 @@ Learn more: https://duck.nyc
|
|
|
27
27
|
# Install & run
|
|
28
28
|
pipx install devduck && devduck
|
|
29
29
|
|
|
30
|
+
# With speech-to-speech capabilities (optional)
|
|
31
|
+
pipx install "devduck[speech]" && devduck
|
|
32
|
+
|
|
30
33
|
# One-shot query
|
|
31
34
|
devduck "create a REST API with FastAPI"
|
|
32
35
|
|
|
@@ -36,6 +39,9 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
36
39
|
|
|
37
40
|
**Requirements:** Python 3.10-3.13, AWS credentials (or Ollama/Anthropic/GitHub/MLX)
|
|
38
41
|
|
|
42
|
+
**Optional extras:**
|
|
43
|
+
- `devduck[speech]` - Real-time speech-to-speech conversations (Nova Sonic, OpenAI Realtime, Gemini Live)
|
|
44
|
+
|
|
39
45
|
---
|
|
40
46
|
|
|
41
47
|
## Core Capabilities
|
|
@@ -51,6 +57,7 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
51
57
|
| 💾 **State Time-Travel** | Save/restore agent state | `state_manager(action="export")` |
|
|
52
58
|
| 📝 **Self-Improvement** | Updates own system prompt | `system_prompt(action="add_context", ...)` |
|
|
53
59
|
| ☁️ **AWS Deploy** | One-command serverless | `agentcore_config(auto_launch=True)` |
|
|
60
|
+
| 🎤 **Speech-to-Speech** | Real-time voice conversations | `pip install devduck[speech]` |
|
|
54
61
|
|
|
55
62
|
---
|
|
56
63
|
|
|
@@ -61,7 +68,13 @@ git clone git@github.com:cagataycali/devduck.git
|
|
|
61
68
|
cd devduck
|
|
62
69
|
python3.13 -m venv .venv
|
|
63
70
|
source .venv/bin/activate
|
|
71
|
+
|
|
72
|
+
# Basic install
|
|
64
73
|
.venv/bin/pip3.13 install -e .
|
|
74
|
+
|
|
75
|
+
# With speech capabilities
|
|
76
|
+
.venv/bin/pip3.13 install -e ".[speech]"
|
|
77
|
+
|
|
65
78
|
devduck
|
|
66
79
|
```
|
|
67
80
|
|
|
@@ -232,6 +245,67 @@ devduck
|
|
|
232
245
|
|
|
233
246
|
---
|
|
234
247
|
|
|
248
|
+
## Speech-to-Speech (Optional)
|
|
249
|
+
|
|
250
|
+
**Install speech capabilities:**
|
|
251
|
+
```bash
|
|
252
|
+
pip install "devduck[speech]"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Real-time voice conversations** with multiple providers:
|
|
256
|
+
|
|
257
|
+
```python
|
|
258
|
+
# Start speech session with Nova Sonic (AWS Bedrock)
|
|
259
|
+
speech_to_speech(action="start", provider="novasonic")
|
|
260
|
+
|
|
261
|
+
# Start with OpenAI Realtime API
|
|
262
|
+
speech_to_speech(action="start", provider="openai")
|
|
263
|
+
|
|
264
|
+
# Start with Gemini Live
|
|
265
|
+
speech_to_speech(action="start", provider="gemini_live")
|
|
266
|
+
|
|
267
|
+
# Custom voice and settings
|
|
268
|
+
speech_to_speech(
|
|
269
|
+
action="start",
|
|
270
|
+
provider="novasonic",
|
|
271
|
+
model_settings={
|
|
272
|
+
"provider_config": {"audio": {"voice": "matthew"}},
|
|
273
|
+
"client_config": {"region": "us-east-1"}
|
|
274
|
+
}
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
# Stop session
|
|
278
|
+
speech_to_speech(action="stop", session_id="speech_20250126_140000")
|
|
279
|
+
|
|
280
|
+
# Check status
|
|
281
|
+
speech_to_speech(action="status")
|
|
282
|
+
|
|
283
|
+
# List conversation histories
|
|
284
|
+
speech_to_speech(action="list_history")
|
|
285
|
+
|
|
286
|
+
# List available audio devices
|
|
287
|
+
speech_to_speech(action="list_audio_devices")
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**Supported Providers:**
|
|
291
|
+
- **Nova Sonic (AWS Bedrock):** 11 voices (English, French, Italian, German, Spanish)
|
|
292
|
+
- **OpenAI Realtime API:** GPT-4o Realtime models
|
|
293
|
+
- **Gemini Live:** Native audio streaming
|
|
294
|
+
|
|
295
|
+
**Environment Variables:**
|
|
296
|
+
- `OPENAI_API_KEY` - For OpenAI Realtime
|
|
297
|
+
- `GOOGLE_API_KEY` or `GEMINI_API_KEY` - For Gemini Live
|
|
298
|
+
- AWS credentials - For Nova Sonic (boto3 default credential chain)
|
|
299
|
+
|
|
300
|
+
**Features:**
|
|
301
|
+
- Background execution (parent agent stays responsive)
|
|
302
|
+
- Tool inheritance from parent agent
|
|
303
|
+
- Conversation history saved automatically
|
|
304
|
+
- Natural interruption with VAD
|
|
305
|
+
- Custom audio device selection
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
235
309
|
## MCP Integration
|
|
236
310
|
|
|
237
311
|
### As MCP Server (Expose DevDuck)
|
|
@@ -398,9 +472,9 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
398
472
|
---
|
|
399
473
|
|
|
400
474
|
<details>
|
|
401
|
-
<summary><strong>📋 All Built-in Tools (
|
|
475
|
+
<summary><strong>📋 All Built-in Tools (39 total)</strong></summary>
|
|
402
476
|
|
|
403
|
-
### DevDuck Core (
|
|
477
|
+
### DevDuck Core (18 tools)
|
|
404
478
|
- `system_prompt` - Update agent's system prompt (GitHub sync support)
|
|
405
479
|
- `store_in_kb` - Store content in Bedrock Knowledge Base
|
|
406
480
|
- `state_manager` - Save/restore agent state (time-travel)
|
|
@@ -419,6 +493,7 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
419
493
|
- `agentcore_agents` - List/manage agent runtimes
|
|
420
494
|
- `manage_tools` - Runtime tool add/remove/reload
|
|
421
495
|
- `view_logs` - View/search/clear DevDuck logs
|
|
496
|
+
- `speech_to_speech` - Real-time speech-to-speech conversations (optional - install with `pip install devduck[speech]`)
|
|
422
497
|
|
|
423
498
|
### Strands Tools (13 tools)
|
|
424
499
|
- `shell` - Interactive shell with PTY support
|
|
@@ -525,7 +600,7 @@ devduck
|
|
|
525
600
|
| `LITELLM_API_KEY` | - | LiteLLM API key (auto-detected) |
|
|
526
601
|
| `LLAMAAPI_API_KEY` | - | LlamaAPI key (auto-detected) |
|
|
527
602
|
| **Tools** | | |
|
|
528
|
-
| `DEVDUCK_TOOLS` |
|
|
603
|
+
| `DEVDUCK_TOOLS` | 39 tools | Format: `package1:tool1,tool2;package2:tool3` |
|
|
529
604
|
| `DEVDUCK_LOAD_TOOLS_FROM_DIR` | `false` | Auto-load from `./tools/` directory |
|
|
530
605
|
| **Memory** | | |
|
|
531
606
|
| `DEVDUCK_KNOWLEDGE_BASE_ID` | - | Bedrock KB ID for auto-RAG |
|
|
@@ -541,6 +616,8 @@ devduck
|
|
|
541
616
|
| `DEVDUCK_ENABLE_WS` | `true` | Enable WebSocket server |
|
|
542
617
|
| `DEVDUCK_ENABLE_MCP` | `true` | Enable MCP server |
|
|
543
618
|
| `DEVDUCK_ENABLE_IPC` | `true` | Enable IPC server |
|
|
619
|
+
| **Speech** | | |
|
|
620
|
+
| `BIDI_MODEL_ID` | Provider default | Override bidi model (e.g., `amazon.nova-2-sonic-v1:0`) |
|
|
544
621
|
| **Context** | | |
|
|
545
622
|
| `DEVDUCK_LOG_LINE_COUNT` | `50` | Recent log lines in context |
|
|
546
623
|
| `DEVDUCK_LAST_MESSAGE_COUNT` | `200` | Recent messages in context |
|
|
@@ -583,6 +660,15 @@ export DEVDUCK_LOG_LINE_COUNT=20
|
|
|
583
660
|
export DEVDUCK_LAST_MESSAGE_COUNT=50
|
|
584
661
|
```
|
|
585
662
|
|
|
663
|
+
**Speech dependencies not found:**
|
|
664
|
+
```bash
|
|
665
|
+
# Install speech extras
|
|
666
|
+
pip install "devduck[speech]"
|
|
667
|
+
|
|
668
|
+
# Or with pipx
|
|
669
|
+
pipx install "devduck[speech]"
|
|
670
|
+
```
|
|
671
|
+
|
|
586
672
|
**Ambient overlay not starting:**
|
|
587
673
|
```bash
|
|
588
674
|
# Make sure tkinter is installed
|
|
@@ -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.6'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 1, 6)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'ge1a919b9b'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devduck
|
|
3
|
-
Version: 1.1.
|
|
4
|
-
Summary: 🦆
|
|
3
|
+
Version: 1.1.6
|
|
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,11 +31,8 @@ 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]; sys_platform == "darwin"
|
|
35
34
|
Requires-Dist: strands-agents[otel]
|
|
36
35
|
Requires-Dist: strands-agents-tools
|
|
37
|
-
Requires-Dist: strands-fun-tools[all]; sys_platform == "darwin"
|
|
38
|
-
Requires-Dist: strands-fun-tools[audio]; sys_platform == "darwin"
|
|
39
36
|
Requires-Dist: beautifulsoup4
|
|
40
37
|
Requires-Dist: colorama
|
|
41
38
|
Requires-Dist: websockets
|
|
@@ -45,6 +42,8 @@ Requires-Dist: bedrock-agentcore-starter-toolkit
|
|
|
45
42
|
Requires-Dist: bedrock-agentcore
|
|
46
43
|
Requires-Dist: rumps; sys_platform == "darwin"
|
|
47
44
|
Requires-Dist: strands-mlx; sys_platform == "darwin"
|
|
45
|
+
Provides-Extra: speech
|
|
46
|
+
Requires-Dist: strands-agents[bidi-all]; extra == "speech"
|
|
48
47
|
Dynamic: license-file
|
|
49
48
|
|
|
50
49
|
# 🦆 DevDuck
|
|
@@ -76,6 +75,9 @@ Learn more: https://duck.nyc
|
|
|
76
75
|
# Install & run
|
|
77
76
|
pipx install devduck && devduck
|
|
78
77
|
|
|
78
|
+
# With speech-to-speech capabilities (optional)
|
|
79
|
+
pipx install "devduck[speech]" && devduck
|
|
80
|
+
|
|
79
81
|
# One-shot query
|
|
80
82
|
devduck "create a REST API with FastAPI"
|
|
81
83
|
|
|
@@ -85,6 +87,9 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
85
87
|
|
|
86
88
|
**Requirements:** Python 3.10-3.13, AWS credentials (or Ollama/Anthropic/GitHub/MLX)
|
|
87
89
|
|
|
90
|
+
**Optional extras:**
|
|
91
|
+
- `devduck[speech]` - Real-time speech-to-speech conversations (Nova Sonic, OpenAI Realtime, Gemini Live)
|
|
92
|
+
|
|
88
93
|
---
|
|
89
94
|
|
|
90
95
|
## Core Capabilities
|
|
@@ -100,6 +105,7 @@ python -c "import devduck; devduck('analyze this code')"
|
|
|
100
105
|
| 💾 **State Time-Travel** | Save/restore agent state | `state_manager(action="export")` |
|
|
101
106
|
| 📝 **Self-Improvement** | Updates own system prompt | `system_prompt(action="add_context", ...)` |
|
|
102
107
|
| ☁️ **AWS Deploy** | One-command serverless | `agentcore_config(auto_launch=True)` |
|
|
108
|
+
| 🎤 **Speech-to-Speech** | Real-time voice conversations | `pip install devduck[speech]` |
|
|
103
109
|
|
|
104
110
|
---
|
|
105
111
|
|
|
@@ -110,7 +116,13 @@ git clone git@github.com:cagataycali/devduck.git
|
|
|
110
116
|
cd devduck
|
|
111
117
|
python3.13 -m venv .venv
|
|
112
118
|
source .venv/bin/activate
|
|
119
|
+
|
|
120
|
+
# Basic install
|
|
113
121
|
.venv/bin/pip3.13 install -e .
|
|
122
|
+
|
|
123
|
+
# With speech capabilities
|
|
124
|
+
.venv/bin/pip3.13 install -e ".[speech]"
|
|
125
|
+
|
|
114
126
|
devduck
|
|
115
127
|
```
|
|
116
128
|
|
|
@@ -281,6 +293,67 @@ devduck
|
|
|
281
293
|
|
|
282
294
|
---
|
|
283
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
|
+
|
|
284
357
|
## MCP Integration
|
|
285
358
|
|
|
286
359
|
### As MCP Server (Expose DevDuck)
|
|
@@ -447,9 +520,9 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
447
520
|
---
|
|
448
521
|
|
|
449
522
|
<details>
|
|
450
|
-
<summary><strong>📋 All Built-in Tools (
|
|
523
|
+
<summary><strong>📋 All Built-in Tools (39 total)</strong></summary>
|
|
451
524
|
|
|
452
|
-
### DevDuck Core (
|
|
525
|
+
### DevDuck Core (18 tools)
|
|
453
526
|
- `system_prompt` - Update agent's system prompt (GitHub sync support)
|
|
454
527
|
- `store_in_kb` - Store content in Bedrock Knowledge Base
|
|
455
528
|
- `state_manager` - Save/restore agent state (time-travel)
|
|
@@ -468,6 +541,7 @@ create_subagent(action="list", repository="owner/repo", workflow_id="agent.yml")
|
|
|
468
541
|
- `agentcore_agents` - List/manage agent runtimes
|
|
469
542
|
- `manage_tools` - Runtime tool add/remove/reload
|
|
470
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]`)
|
|
471
545
|
|
|
472
546
|
### Strands Tools (13 tools)
|
|
473
547
|
- `shell` - Interactive shell with PTY support
|
|
@@ -574,7 +648,7 @@ devduck
|
|
|
574
648
|
| `LITELLM_API_KEY` | - | LiteLLM API key (auto-detected) |
|
|
575
649
|
| `LLAMAAPI_API_KEY` | - | LlamaAPI key (auto-detected) |
|
|
576
650
|
| **Tools** | | |
|
|
577
|
-
| `DEVDUCK_TOOLS` |
|
|
651
|
+
| `DEVDUCK_TOOLS` | 39 tools | Format: `package1:tool1,tool2;package2:tool3` |
|
|
578
652
|
| `DEVDUCK_LOAD_TOOLS_FROM_DIR` | `false` | Auto-load from `./tools/` directory |
|
|
579
653
|
| **Memory** | | |
|
|
580
654
|
| `DEVDUCK_KNOWLEDGE_BASE_ID` | - | Bedrock KB ID for auto-RAG |
|
|
@@ -590,6 +664,8 @@ devduck
|
|
|
590
664
|
| `DEVDUCK_ENABLE_WS` | `true` | Enable WebSocket server |
|
|
591
665
|
| `DEVDUCK_ENABLE_MCP` | `true` | Enable MCP server |
|
|
592
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`) |
|
|
593
669
|
| **Context** | | |
|
|
594
670
|
| `DEVDUCK_LOG_LINE_COUNT` | `50` | Recent log lines in context |
|
|
595
671
|
| `DEVDUCK_LAST_MESSAGE_COUNT` | `200` | Recent messages in context |
|
|
@@ -632,6 +708,15 @@ export DEVDUCK_LOG_LINE_COUNT=20
|
|
|
632
708
|
export DEVDUCK_LAST_MESSAGE_COUNT=50
|
|
633
709
|
```
|
|
634
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
|
+
|
|
635
720
|
**Ambient overlay not starting:**
|
|
636
721
|
```bash
|
|
637
722
|
# Make sure tkinter is installed
|
|
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devduck"
|
|
7
7
|
dynamic = ["version"]
|
|
8
|
-
description = "🦆
|
|
8
|
+
description = "🦆 Self-adapting agent - one file."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "Apache-2.0"}
|
|
11
11
|
authors = [
|
|
@@ -35,11 +35,8 @@ dependencies = [
|
|
|
35
35
|
"strands-agents[ollama]",
|
|
36
36
|
"strands-agents[anthropic]",
|
|
37
37
|
"strands-agents[openai]",
|
|
38
|
-
"strands-agents[bidi-all]; sys_platform == 'darwin'",
|
|
39
38
|
"strands-agents[otel]",
|
|
40
39
|
"strands-agents-tools",
|
|
41
|
-
"strands-fun-tools[all]; sys_platform == 'darwin'",
|
|
42
|
-
"strands-fun-tools[audio]; sys_platform == 'darwin'",
|
|
43
40
|
"beautifulsoup4",
|
|
44
41
|
"colorama",
|
|
45
42
|
"websockets",
|
|
@@ -51,6 +48,11 @@ dependencies = [
|
|
|
51
48
|
"strands-mlx; sys_platform == 'darwin'",
|
|
52
49
|
]
|
|
53
50
|
|
|
51
|
+
[project.optional-dependencies]
|
|
52
|
+
speech = [
|
|
53
|
+
"strands-agents[bidi-all]",
|
|
54
|
+
]
|
|
55
|
+
|
|
54
56
|
[project.scripts]
|
|
55
57
|
devduck = "devduck:cli"
|
|
56
58
|
dev = "devduck:cli"
|
|
@@ -71,4 +73,4 @@ devduck = [
|
|
|
71
73
|
]
|
|
72
74
|
|
|
73
75
|
[tool.setuptools_scm]
|
|
74
|
-
write_to = "devduck/_version.py"
|
|
76
|
+
write_to = "devduck/_version.py"
|