devduck 1.1.5__tar.gz → 1.1.7__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.

Files changed (53) hide show
  1. {devduck-1.1.5 → devduck-1.1.7}/PKG-INFO +93 -6
  2. {devduck-1.1.5 → devduck-1.1.7}/README.md +89 -3
  3. {devduck-1.1.5 → devduck-1.1.7}/devduck/__init__.py +2 -4
  4. {devduck-1.1.5 → devduck-1.1.7}/devduck/_version.py +3 -3
  5. devduck-1.1.7/devduck/tools/__init__.py +73 -0
  6. {devduck-1.1.5 → devduck-1.1.7}/devduck.egg-info/PKG-INFO +93 -6
  7. {devduck-1.1.5 → devduck-1.1.7}/devduck.egg-info/requires.txt +3 -1
  8. {devduck-1.1.5 → devduck-1.1.7}/pyproject.toml +7 -3
  9. devduck-1.1.5/devduck/tools/__init__.py +0 -47
  10. {devduck-1.1.5 → devduck-1.1.7}/.github/workflows/agent.yml +0 -0
  11. {devduck-1.1.5 → devduck-1.1.7}/.gitignore +0 -0
  12. {devduck-1.1.5 → devduck-1.1.7}/LICENSE +0 -0
  13. {devduck-1.1.5 → devduck-1.1.7}/MANIFEST.in +0 -0
  14. {devduck-1.1.5 → devduck-1.1.7}/action.yml +0 -0
  15. {devduck-1.1.5 → devduck-1.1.7}/agent_runner.py +0 -0
  16. {devduck-1.1.5 → devduck-1.1.7}/devduck/__main__.py +0 -0
  17. {devduck-1.1.5 → devduck-1.1.7}/devduck/agentcore_handler.py +0 -0
  18. {devduck-1.1.5 → devduck-1.1.7}/devduck/test_redduck.py +0 -0
  19. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/_ambient_input.py +0 -0
  20. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/_tray_app.py +0 -0
  21. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/agentcore_agents.py +0 -0
  22. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/agentcore_config.py +0 -0
  23. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/agentcore_invoke.py +0 -0
  24. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/agentcore_logs.py +0 -0
  25. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/ambient.py +0 -0
  26. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/create_subagent.py +0 -0
  27. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/fetch_github_tool.py +0 -0
  28. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/install_tools.py +0 -0
  29. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/ipc.py +0 -0
  30. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/mcp_server.py +0 -0
  31. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/scraper.py +0 -0
  32. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/speech_to_speech.py +0 -0
  33. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/state_manager.py +0 -0
  34. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/store_in_kb.py +0 -0
  35. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/system_prompt.py +0 -0
  36. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/tcp.py +0 -0
  37. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/tray.py +0 -0
  38. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/use_github.py +0 -0
  39. {devduck-1.1.5 → devduck-1.1.7}/devduck/tools/websocket.py +0 -0
  40. {devduck-1.1.5 → devduck-1.1.7}/devduck.egg-info/SOURCES.txt +0 -0
  41. {devduck-1.1.5 → devduck-1.1.7}/devduck.egg-info/dependency_links.txt +0 -0
  42. {devduck-1.1.5 → devduck-1.1.7}/devduck.egg-info/entry_points.txt +0 -0
  43. {devduck-1.1.5 → devduck-1.1.7}/devduck.egg-info/top_level.txt +0 -0
  44. {devduck-1.1.5 → devduck-1.1.7}/docs/index.html +0 -0
  45. {devduck-1.1.5 → devduck-1.1.7}/docs/mac-os-tray.jpg +0 -0
  46. {devduck-1.1.5 → devduck-1.1.7}/requirements.txt +0 -0
  47. {devduck-1.1.5 → devduck-1.1.7}/setup-aws-oidc.sh +0 -0
  48. {devduck-1.1.5 → devduck-1.1.7}/setup.cfg +0 -0
  49. {devduck-1.1.5 → devduck-1.1.7}/test.py +0 -0
  50. {devduck-1.1.5 → devduck-1.1.7}/tools/__init__.py +0 -0
  51. {devduck-1.1.5 → devduck-1.1.7}/tools/fetch_github_tool.py +0 -0
  52. {devduck-1.1.5 → devduck-1.1.7}/tools/gist.py +0 -0
  53. {devduck-1.1.5 → devduck-1.1.7}/tools/github_tools.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devduck
3
- Version: 1.1.5
4
- Summary: 🦆 Extreme minimalist self-adapting AI agent - one file, self-healing, runtime dependencies
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 (38 total)</strong></summary>
523
+ <summary><strong>📋 All Built-in Tools (39 total)</strong></summary>
449
524
 
450
- ### DevDuck Core (17 tools)
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` | 38 tools | Format: `package1:tool1,tool2;package2:tool3` |
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
@@ -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 (38 total)</strong></summary>
475
+ <summary><strong>📋 All Built-in Tools (39 total)</strong></summary>
402
476
 
403
- ### DevDuck Core (17 tools)
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` | 38 tools | Format: `package1:tool1,tool2;package2:tool3` |
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
@@ -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)
@@ -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.5'
32
- __version_tuple__ = version_tuple = (1, 1, 5)
31
+ __version__ = version = '1.1.7'
32
+ __version_tuple__ = version_tuple = (1, 1, 7)
33
33
 
34
- __commit_id__ = commit_id = 'g815bf432a'
34
+ __commit_id__ = commit_id = 'g5d4e64932'
@@ -0,0 +1,73 @@
1
+ """
2
+ DevDuck Tools Package
3
+
4
+ This module exports all available tools for devduck.
5
+ """
6
+
7
+ from .agentcore_agents import agentcore_agents
8
+ from .agentcore_config import agentcore_config
9
+ from .agentcore_invoke import agentcore_invoke
10
+ from .agentcore_logs import agentcore_logs
11
+ from .ambient import ambient
12
+ from .create_subagent import create_subagent
13
+ from .fetch_github_tool import fetch_github_tool
14
+ from .install_tools import install_tools
15
+ from .ipc import ipc
16
+ from .mcp_server import mcp_server
17
+ from .scraper import scraper
18
+ from .state_manager import state_manager
19
+ from .store_in_kb import store_in_kb
20
+ from .system_prompt import system_prompt
21
+ from .tcp import tcp
22
+ from .tray import tray
23
+ from .use_github import use_github
24
+ from .websocket import websocket
25
+
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.5
4
- Summary: 🦆 Extreme minimalist self-adapting AI agent - one file, self-healing, runtime dependencies
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 (38 total)</strong></summary>
523
+ <summary><strong>📋 All Built-in Tools (39 total)</strong></summary>
449
524
 
450
- ### DevDuck Core (17 tools)
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` | 38 tools | Format: `package1:tool1,tool2;package2:tool3` |
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
@@ -3,7 +3,6 @@ prompt_toolkit
3
3
  strands-agents[ollama]
4
4
  strands-agents[anthropic]
5
5
  strands-agents[openai]
6
- strands-agents[bidi-all]
7
6
  strands-agents[otel]
8
7
  strands-agents-tools
9
8
  beautifulsoup4
@@ -17,3 +16,6 @@ bedrock-agentcore
17
16
  [:sys_platform == "darwin"]
18
17
  rumps
19
18
  strands-mlx
19
+
20
+ [speech]
21
+ strands-agents[bidi-all]
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "devduck"
7
7
  dynamic = ["version"]
8
- description = "🦆 Extreme minimalist self-adapting AI agent - one file, self-healing, runtime dependencies"
8
+ description = "🦆 Self-adapting agent - one file."
9
9
  readme = "README.md"
10
10
  license = {text = "Apache-2.0"}
11
11
  authors = [
@@ -35,7 +35,6 @@ dependencies = [
35
35
  "strands-agents[ollama]",
36
36
  "strands-agents[anthropic]",
37
37
  "strands-agents[openai]",
38
- "strands-agents[bidi-all]",
39
38
  "strands-agents[otel]",
40
39
  "strands-agents-tools",
41
40
  "beautifulsoup4",
@@ -49,6 +48,11 @@ dependencies = [
49
48
  "strands-mlx; sys_platform == 'darwin'",
50
49
  ]
51
50
 
51
+ [project.optional-dependencies]
52
+ speech = [
53
+ "strands-agents[bidi-all]",
54
+ ]
55
+
52
56
  [project.scripts]
53
57
  devduck = "devduck:cli"
54
58
  dev = "devduck:cli"
@@ -69,4 +73,4 @@ devduck = [
69
73
  ]
70
74
 
71
75
  [tool.setuptools_scm]
72
- write_to = "devduck/_version.py"
76
+ write_to = "devduck/_version.py"
@@ -1,47 +0,0 @@
1
- """
2
- DevDuck Tools Package
3
-
4
- This module exports all available tools for devduck.
5
- """
6
-
7
- from .agentcore_agents import agentcore_agents
8
- from .agentcore_config import agentcore_config
9
- from .agentcore_invoke import agentcore_invoke
10
- from .agentcore_logs import agentcore_logs
11
- from .ambient import ambient
12
- from .create_subagent import create_subagent
13
- from .fetch_github_tool import fetch_github_tool
14
- from .install_tools import install_tools
15
- from .ipc import ipc
16
- from .mcp_server import mcp_server
17
- from .scraper import scraper
18
- from .speech_to_speech import speech_to_speech
19
- from .state_manager import state_manager
20
- from .store_in_kb import store_in_kb
21
- from .system_prompt import system_prompt
22
- from .tcp import tcp
23
- from .tray import tray
24
- from .use_github import use_github
25
- from .websocket import websocket
26
-
27
- __all__ = [
28
- "agentcore_agents",
29
- "agentcore_config",
30
- "agentcore_invoke",
31
- "agentcore_logs",
32
- "ambient",
33
- "create_subagent",
34
- "fetch_github_tool",
35
- "install_tools",
36
- "ipc",
37
- "mcp_server",
38
- "scraper",
39
- "speech_to_speech",
40
- "state_manager",
41
- "store_in_kb",
42
- "system_prompt",
43
- "tcp",
44
- "tray",
45
- "use_github",
46
- "websocket",
47
- ]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes