devduck 0.5.4__py3-none-any.whl → 0.7.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.

Potentially problematic release.


This version of devduck might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devduck
3
- Version: 0.5.4
3
+ Version: 0.7.0
4
4
  Summary: 🦆 Extreme minimalist self-adapting AI agent - one file, self-healing, runtime dependencies
5
5
  Author-email: Cagatay Cali <cagataycali@icloud.com>
6
6
  License: Apache-2.0
@@ -53,6 +53,19 @@ Dynamic: license-file
53
53
 
54
54
  One Python file that adapts to your environment, fixes itself, and expands capabilities at runtime.
55
55
 
56
+ Learn more: https://duck.nyc
57
+
58
+ ## 🎬 See It In Action
59
+
60
+ | Feature | What You'll See | Video |
61
+ |---------|----------------|-------|
62
+ | 🔥 **Hot-Reload** | Agent detects code changes and restarts instantly—no manual intervention needed. Edit your agent code or tools while running, save the file, and watch it reload automatically. | [Watch Demo](https://redduck.dev/videos/hot-reload.mp4) |
63
+ | 🌐 **Web UI** | Clean, modern web interface for chatting with DevDuck. Real-time streaming responses, tool execution visibility, and beautiful markdown rendering. | [Watch Demo](https://redduck.dev/videos/web-ui.mp4) |
64
+ | 🛠️ **Dynamic Tool Creation** | Create a new tool by simply saving a `.py` file in the `./tools/` directory. No restart, no configuration—the agent loads it instantly and starts using it. Pure hot-reload magic. | [Watch Demo](https://redduck.dev/videos/dynamic-tool-creation.mp4) |
65
+ | 🌊 **TCP Streaming Server** | Connect from any client (netcat, custom apps, other agents) via TCP. Real-time streaming responses with parallel tool execution. Multi-protocol access to the same agent. | [Watch Demo](https://redduck.dev/videos/tcp.mp4) |
66
+ | 🔌 **IPC & macOS Tray** | Unix socket-based inter-process communication with native macOS menu bar integration. DevDuck runs in your menu bar with quick actions, status indicators, and seamless IPC streaming via `/tmp/devduck_main.sock`. | ![Demo](docs/mac-os-tray.jpg) |
67
+ | 💬 **Ambient Overlay** | Floating AI input overlay with glassmorphism UI. Real-time IPC streaming from devduck, auto-focus with blinking cursor, and ESC to hide / Enter to send. Perfect for desktop AI interactions. | [Watch Demo](https://redduck.dev/videos/floating-input.mp4) |
68
+
56
69
  ---
57
70
 
58
71
  ## Install & Run
@@ -101,7 +114,7 @@ devduck
101
114
  | 🧠 **Auto-RAG** | Remembers past conversations | "I prefer FastAPI" → later uses FastAPI automatically |
102
115
  | 🌊 **Multi-Protocol** | CLI, Python, TCP, WebSocket, MCP, IPC | `devduck "query"` or `nc localhost 9999` |
103
116
  | ☁️ **AWS Deploy** | One-command serverless deployment | `agentcore_config(auto_launch=True)` |
104
- | 🛠️ **30+ Tools** | Shell, GitHub, file editing, math, UI control | `devduck("create GitHub issue")` |
117
+ | 🛠️ **35+ Tools** | Shell, GitHub, file editing, math, UI control | `devduck("create GitHub issue")` |
105
118
  | 🎛️ **Flexible Config** | Load only tools you need | `DEVDUCK_TOOLS="strands_tools:shell,editor"` |
106
119
 
107
120
  ---
@@ -113,7 +126,7 @@ graph TB
113
126
  A[User Input] -->|CLI/TCP/WS/MCP/IPC| B[DevDuck Core]
114
127
  B -->|Auto RAG| C[Knowledge Base]
115
128
  C -.->|Context Retrieval| B
116
- B -->|Tool Calls| D[30+ Built-in Tools]
129
+ B -->|Tool Calls| D[35+ Built-in Tools]
117
130
  D --> E[shell/editor/calculator]
118
131
  D --> F[GitHub/AgentCore]
119
132
  D --> G[TCP/WebSocket/MCP/IPC]
@@ -165,7 +178,7 @@ devduck("refactor my code to use async/await")
165
178
 
166
179
  | Provider | Setup | When to Use |
167
180
  |----------|-------|-------------|
168
- | **Bedrock** (auto-detected) | [Get API key](https://console.aws.amazon.com/bedrock) → `export AWS_BEARER_TOKEN_BEDROCK=...` | Production (auto-selected if credentials found) |
181
+ | **Bedrock** (auto-detected) | [Get API key](https://console.aws.amazon.com/bedrock) → `export AWS_BEARER_TOKEN_BEDROCK=...` | Auto-selected if credentials found |
169
182
  | **MLX** (macOS auto-detected) | Auto-detected on Apple Silicon | Local, optimized for M-series Macs |
170
183
  | **Ollama** (fallback) | `ollama pull qwen3:1.7b` | Local, free, private (used if Bedrock/MLX unavailable) |
171
184
  | **Anthropic** | `export ANTHROPIC_API_KEY=...` | Claude API direct access |
@@ -187,8 +200,8 @@ devduck
187
200
  | **Dev** | `shell`, `editor`, `file_read`, `calculator` | Code, test, debug |
188
201
  | **GitHub** | `use_github`, `create_subagent` | Issues, PRs, CI/CD automation |
189
202
  | **Network** | `tcp`, `websocket`, `mcp_server`, `ipc` | Serve agents over protocols |
190
- | **AWS** | `agentcore_config`, `agentcore_invoke`, `agentcore_logs` | Deploy to serverless |
191
- | **AI** | `use_agent`, `retrieve`, `store_in_kb` | Multi-agent, memory |
203
+ | **AWS** | `agentcore_config`, `agentcore_invoke`, `agentcore_logs`, `agentcore_agents` | Deploy to serverless |
204
+ | **AI** | `use_agent`, `retrieve`, `store_in_kb`, `state_manager` | Multi-agent, memory, state |
192
205
  | **UI** (macOS) | `tray`, `ambient`, `cursor`, `clipboard` | Desktop automation |
193
206
 
194
207
  <details>
@@ -204,6 +217,7 @@ devduck
204
217
  - `create_subagent` - Spawn sub-agents via GitHub Actions
205
218
  - `store_in_kb` - Store content in Bedrock Knowledge Base
206
219
  - `system_prompt` - Manage agent system prompt
220
+ - `state_manager` - Agent state management with time-travel capabilities
207
221
  - `tray` - System tray app control (macOS)
208
222
  - `ambient` - Ambient AI input overlay (macOS)
209
223
 
@@ -225,6 +239,12 @@ devduck
225
239
  - `environment` - Environment variable management
226
240
  - `mcp_client` - Connect to external MCP servers
227
241
  - `retrieve` - Bedrock Knowledge Base retrieval
242
+ - `scraper` - HTML/XML parsing with BeautifulSoup4
243
+ - `fetch_github_tool` - Fetch and load tools from GitHub
244
+ - `gist` - Comprehensive GitHub Gist management
245
+ - `add_comment` - Add comments to GitHub issues/PRs
246
+ - `list_issues` - List GitHub issues
247
+ - `list_pull_requests` - List GitHub pull requests
228
248
 
229
249
  ### strands-fun-tools (macOS)
230
250
  - `listen` - Background speech transcription with Whisper
@@ -286,22 +306,75 @@ No restart. No configuration. Just works.
286
306
  |----------|---------|---------|
287
307
  | `MODEL_PROVIDER` | Auto-detect | `bedrock`, `anthropic`, `github`, `mlx`, `ollama` |
288
308
  | `STRANDS_MODEL_ID` | Auto | Model name (e.g., `qwen3:1.7b`, `claude-sonnet-4`) |
289
- | `DEVDUCK_TOOLS` | All | `pkg:tool1,tool2:pkg2:tool3` |
309
+ | `DEVDUCK_TOOLS` | 37 default tools | `package:tool1,tool2:package2:tool3` format |
310
+ | `DEVDUCK_LOAD_TOOLS_FROM_DIR` | `false` | `true`/`false` - Auto-load tools from `./tools/` directory |
290
311
  | `DEVDUCK_KNOWLEDGE_BASE_ID` | - | Bedrock KB ID for auto-RAG |
291
312
  | `DEVDUCK_TCP_PORT` | `9999` | TCP server port |
292
313
  | `DEVDUCK_ENABLE_TCP` | `true` | Enable/disable TCP |
293
314
 
294
- **Minimal config (shell + editor only):**
315
+ ### Tool Configuration Format
316
+
317
+ **Format:** `package:tool1,tool2:package2:tool3`
318
+
319
+ **Directory Auto-Loading:**
320
+
321
+ By default, DevDuck **does not** automatically load tools from the `./tools/` directory. This gives you explicit control over which tools are loaded. To enable automatic loading of tools from `./tools/`, set:
322
+
323
+ ```bash
324
+ export DEVDUCK_LOAD_TOOLS_FROM_DIR=true
325
+ devduck
326
+ ```
327
+
328
+ When enabled, any `.py` file in `./tools/` with a `@tool` decorator will be loaded automatically. When disabled (default), you control tool loading via `DEVDUCK_TOOLS` or runtime `manage_tools()` calls.
329
+
330
+ **Examples:**
295
331
  ```bash
332
+ # Minimal (shell + editor only)
296
333
  export DEVDUCK_TOOLS="strands_tools:shell,editor"
334
+
335
+ # Dev tools only
336
+ export DEVDUCK_TOOLS="strands_tools:shell,editor,file_read,file_write,calculator"
337
+
338
+ # Full DevDuck + Strands (no fun tools)
339
+ export DEVDUCK_TOOLS="devduck.tools:tcp,websocket,mcp_server,use_github:strands_tools:shell,editor,file_read"
340
+
341
+ # Custom package
342
+ export DEVDUCK_TOOLS="my_tools:custom_tool,another_tool:strands_tools:shell"
343
+
297
344
  devduck
298
345
  ```
299
346
 
347
+ **Runtime tool management:**
348
+ ```python
349
+ # List loaded tools
350
+ manage_tools(action="list")
351
+
352
+ # Add tools at runtime
353
+ manage_tools(action="add", package="strands_fun_tools", tool_names="cursor,clipboard")
354
+
355
+ # Remove tools
356
+ manage_tools(action="remove", tool_names="cursor,clipboard")
357
+
358
+ # Reload specific tools
359
+ manage_tools(action="reload", tool_names="shell,editor")
360
+
361
+ # Reload all (restart agent)
362
+ manage_tools(action="reload")
363
+ ```
364
+
365
+ **Discover tools before loading:**
366
+ ```python
367
+ # List available tools in a package
368
+ install_tools(action="list_available", package="strands-fun-tools", module="strands_fun_tools")
369
+ ```
370
+
300
371
  ---
301
372
 
302
373
 
303
374
  ## MCP Integration
304
375
 
376
+ ### Expose DevDuck as MCP Server
377
+
305
378
  **Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
306
379
  ```json
307
380
  {
@@ -316,6 +389,83 @@ devduck
316
389
 
317
390
  Restart Claude → DevDuck tools appear automatically.
318
391
 
392
+ ### Load External MCP Servers
393
+
394
+ DevDuck can act as an MCP client and load tools from external MCP servers automatically.
395
+
396
+ **Setup:**
397
+ ```bash
398
+ export MCP_SERVERS='{
399
+ "mcpServers": {
400
+ "strands": {
401
+ "command": "uvx",
402
+ "args": ["strands-agents-mcp-server"]
403
+ }
404
+ }
405
+ }'
406
+ devduck
407
+ ```
408
+
409
+ **Supported Transport Types:**
410
+
411
+ | Transport | Configuration | Example |
412
+ |-----------|--------------|---------|
413
+ | **stdio** | `command`, `args`, `env` | Executables via stdin/stdout |
414
+ | **HTTP** | `url`, `headers` | Remote servers via HTTP |
415
+ | **SSE** | `url` (with `/sse` path) | Server-Sent Events streaming |
416
+
417
+ **Examples:**
418
+
419
+ ```bash
420
+ # Stdio server
421
+ export MCP_SERVERS='{
422
+ "mcpServers": {
423
+ "myserver": {
424
+ "command": "python",
425
+ "args": ["server.py"],
426
+ "env": {"API_KEY": "secret"}
427
+ }
428
+ }
429
+ }'
430
+
431
+ # HTTP server
432
+ export MCP_SERVERS='{
433
+ "mcpServers": {
434
+ "remote": {
435
+ "url": "https://api.example.com/mcp",
436
+ "headers": {"Authorization": "Bearer token"}
437
+ }
438
+ }
439
+ }'
440
+
441
+ # SSE server
442
+ export MCP_SERVERS='{
443
+ "mcpServers": {
444
+ "events": {
445
+ "url": "https://api.example.com/sse"
446
+ }
447
+ }
448
+ }'
449
+
450
+ # Multiple servers
451
+ export MCP_SERVERS='{
452
+ "mcpServers": {
453
+ "strands": {
454
+ "command": "uvx",
455
+ "args": ["strands-agents-mcp-server"]
456
+ },
457
+ "remote": {
458
+ "url": "https://api.example.com/mcp"
459
+ }
460
+ }
461
+ }'
462
+
463
+ devduck
464
+ # Tools from all MCP servers automatically available
465
+ ```
466
+
467
+ **Tool Prefixing:** Each MCP server's tools are prefixed with the server name (e.g., `strands_tool_name`)
468
+
319
469
  ---
320
470
 
321
471
  ## Troubleshooting
@@ -1,29 +1,30 @@
1
- devduck/__init__.py,sha256=wtpaq3t6k1z0AT5RyW3-O9evSNV7Taaxw6xyiup022k,38867
1
+ devduck/__init__.py,sha256=okf01FoPFrPpiwuGdQcx9Y7kLndn22JuVkA117L6g-4,67753
2
2
  devduck/__main__.py,sha256=aeF2RR4k7lzSR2X1QKV9XQPCKhtsH0JYUv2etBBqmL0,145
3
- devduck/_version.py,sha256=OrfVZdCDQ-QC6dUnxdROooJjwvLfeDMedTBstpAdSBU,704
3
+ devduck/_version.py,sha256=uLbRjFSUZAgfl7V7O8zKV5Db36k7tz87ZIVq3l2SWs0,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=vmfaz6785obybPDzJhdgO1e0Ty-bBtk5jSb0MskyyWQ,1276
6
+ devduck/tools/__init__.py,sha256=AmIy8MInaClaZ71fqzy4EQJnBWsLkrv4QW9IIN7UQyw,1367
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
10
- devduck/tools/agentcore_config.py,sha256=pVJzhGtQQW7R_n4R8F0SKL8iHkoBNsHl4Ppir0WzZ0A,14779
11
- devduck/tools/agentcore_invoke.py,sha256=SMKqVAig_cZEBL-W5gfumUpPFIHC9CSRSY9BJbnx6wY,17449
10
+ devduck/tools/agentcore_config.py,sha256=sUD1SrLAqTHjgHctZtVRDz_BvLG_nRB3z6g3EcrcvTM,14780
11
+ devduck/tools/agentcore_invoke.py,sha256=iHOeV8mh1QeJ_dj06MRHbJ1VnvY4WIQxqruxIDw0mz0,17469
12
12
  devduck/tools/agentcore_logs.py,sha256=A3YQIoRErJtvzeaMSPNqOLX1BH-vYTbYKs1NXoCnC5E,10222
13
13
  devduck/tools/ambient.py,sha256=HB1ZhfeOdOaMU0xe4e44VNUT_-DQ5SY7sl3r4r-4X44,4806
14
14
  devduck/tools/create_subagent.py,sha256=UzRz9BmU4PbTveZROEpZ311aH-u-i6x89gttu-CniAE,24687
15
- devduck/tools/install_tools.py,sha256=wm_67b9IfY-2wRuWgxuEKhaSIV5vNfbGmZL3G9dGi2A,10348
16
- devduck/tools/ipc.py,sha256=4YARnIwAkvUwTKUG534hfiZjEL4Km63ykJ_6DnJ72Dc,18478
15
+ devduck/tools/install_tools.py,sha256=3uzRg5lEHX-L6gxnFn3mIKjGYDJ3h_AdwGnEwKA9qR0,14284
16
+ devduck/tools/ipc.py,sha256=e3KJeR2HmCKEtVLGNOtf6CeFi3pTDehwd7Fu4JJ19Ms,18607
17
17
  devduck/tools/mcp_server.py,sha256=Ybp0PcJKW2TOvghsRL-i8Guqc9WokPwOD2bhVgzoj6Q,21490
18
+ devduck/tools/state_manager.py,sha256=hrleqdVoCboNd8R3wDRUXVKYCZdGoe1j925i948LTHc,10563
18
19
  devduck/tools/store_in_kb.py,sha256=-JM-oRQKR3FBubKHFHmXRnZSvi9dVgHxG0lismMgG2k,6861
19
20
  devduck/tools/system_prompt.py,sha256=waAdmvRhyulorw_tLqpqUJN_AahuaeF2rXqjMqN7IRY,16905
20
- devduck/tools/tcp.py,sha256=f74xWa9pgBgQ3icr-KsRVM8GEEs6Wi9B4eP_ZYlKxhQ,21726
21
+ devduck/tools/tcp.py,sha256=w2m_Jf6vZ4NYu0AwgZd7C7eKs4No2EVHZ2WYIl_Bt0A,22017
21
22
  devduck/tools/tray.py,sha256=FgVhUtLdsdv5_ERK-RyAIpDE8Zb0IfoqhHQdwMxrHUQ,7547
22
23
  devduck/tools/use_github.py,sha256=nr3JSGk48mKUobpgW__2gu6lFyUj93a1XRs3I6vH8W4,13682
23
- devduck/tools/websocket.py,sha256=lRJZt813iHorVr5UI66Lq-lmaFuLYAfpodeV2gtda7k,16635
24
- devduck-0.5.4.dist-info/licenses/LICENSE,sha256=UANcoWwfVeuM9597WUkjEQbzqIUH0bJoE9Tpwgj_LvU,11345
25
- devduck-0.5.4.dist-info/METADATA,sha256=4cI4EZFU_ZIvrJoaWRsrQWuXZCYjPRBQTobMIPpUz0w,12412
26
- devduck-0.5.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- devduck-0.5.4.dist-info/entry_points.txt,sha256=BAMQaIg_BLZQOTk12bT7hy1dE9oGPLt-_dTbI4cnBnQ,40
28
- devduck-0.5.4.dist-info/top_level.txt,sha256=ySXWlVronp8xHYfQ_Hdfr463e0EnbWuqyuxs94EU7yk,8
29
- devduck-0.5.4.dist-info/RECORD,,
24
+ devduck/tools/websocket.py,sha256=A8bqgdDZs8hcf2HctkJzQOzMvb5mXUC7YZ-xqkOyn94,16959
25
+ devduck-0.7.0.dist-info/licenses/LICENSE,sha256=UANcoWwfVeuM9597WUkjEQbzqIUH0bJoE9Tpwgj_LvU,11345
26
+ devduck-0.7.0.dist-info/METADATA,sha256=I7la6VIQ76TqoZkaJ-GbY09Mt5duZ_rMGtW8D1lD-OM,17748
27
+ devduck-0.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
+ devduck-0.7.0.dist-info/entry_points.txt,sha256=BAMQaIg_BLZQOTk12bT7hy1dE9oGPLt-_dTbI4cnBnQ,40
29
+ devduck-0.7.0.dist-info/top_level.txt,sha256=ySXWlVronp8xHYfQ_Hdfr463e0EnbWuqyuxs94EU7yk,8
30
+ devduck-0.7.0.dist-info/RECORD,,