dulus 0.2.2__tar.gz → 0.2.4__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.
Files changed (156) hide show
  1. {dulus-0.2.2/dulus.egg-info → dulus-0.2.4}/PKG-INFO +4 -4
  2. {dulus-0.2.2 → dulus-0.2.4}/README.md +3 -3
  3. {dulus-0.2.2 → dulus-0.2.4}/claude_code_watcher.py +2 -1
  4. {dulus-0.2.2 → dulus-0.2.4}/docs/divider.svg +7 -7
  5. {dulus-0.2.2 → dulus-0.2.4}/docs/hero.svg +185 -186
  6. {dulus-0.2.2 → dulus-0.2.4}/docs/nvidia-models.svg +184 -184
  7. {dulus-0.2.2/docs/uploads → dulus-0.2.4/docs}/particle-playground.html +328 -328
  8. {dulus-0.2.2 → dulus-0.2.4}/docs/preview.html +75 -75
  9. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-agents.svg +26 -26
  10. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-brainstorm.svg +26 -26
  11. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-bridges.svg +25 -25
  12. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-features.svg +33 -33
  13. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-freetier.svg +73 -73
  14. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-memory.svg +24 -24
  15. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-models.svg +99 -99
  16. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-perms.svg +25 -25
  17. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-plugins.svg +26 -26
  18. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-quickstart.svg +26 -26
  19. {dulus-0.2.2 → dulus-0.2.4}/docs/sec-ssj.svg +28 -28
  20. {dulus-0.2.2 → dulus-0.2.4}/docs/spinners.svg +41 -41
  21. {dulus-0.2.2 → dulus-0.2.4}/docs/split-pane.svg +140 -140
  22. {dulus-0.2.2 → dulus-0.2.4}/docs/terminal-boot.svg +138 -138
  23. {dulus-0.2.2 → dulus-0.2.4/dulus.egg-info}/PKG-INFO +4 -4
  24. {dulus-0.2.2 → dulus-0.2.4}/providers.py +3 -2
  25. {dulus-0.2.2 → dulus-0.2.4}/pyproject.toml +1 -1
  26. {dulus-0.2.2 → dulus-0.2.4}/tmux_tools.py +5 -56
  27. {dulus-0.2.2 → dulus-0.2.4}/LICENSE +0 -0
  28. {dulus-0.2.2 → dulus-0.2.4}/MANIFEST.in +0 -0
  29. {dulus-0.2.2 → dulus-0.2.4}/agent.py +0 -0
  30. {dulus-0.2.2 → dulus-0.2.4}/backend/__init__.py +0 -0
  31. {dulus-0.2.2 → dulus-0.2.4}/backend/compressor.py +0 -0
  32. {dulus-0.2.2 → dulus-0.2.4}/backend/context.py +0 -0
  33. {dulus-0.2.2 → dulus-0.2.4}/backend/githook.py +0 -0
  34. {dulus-0.2.2 → dulus-0.2.4}/backend/marketplace.py +0 -0
  35. {dulus-0.2.2 → dulus-0.2.4}/backend/mempalace_bridge.py +0 -0
  36. {dulus-0.2.2 → dulus-0.2.4}/backend/personas.py +0 -0
  37. {dulus-0.2.2 → dulus-0.2.4}/backend/plugins.py +0 -0
  38. {dulus-0.2.2 → dulus-0.2.4}/backend/server.py +0 -0
  39. {dulus-0.2.2 → dulus-0.2.4}/backend/tasks.py +0 -0
  40. {dulus-0.2.2 → dulus-0.2.4}/batch_api.py +0 -0
  41. {dulus-0.2.2 → dulus-0.2.4}/checkpoint/__init__.py +0 -0
  42. {dulus-0.2.2 → dulus-0.2.4}/checkpoint/hooks.py +0 -0
  43. {dulus-0.2.2 → dulus-0.2.4}/checkpoint/store.py +0 -0
  44. {dulus-0.2.2 → dulus-0.2.4}/checkpoint/types.py +0 -0
  45. {dulus-0.2.2 → dulus-0.2.4}/clipboard_utils.py +0 -0
  46. {dulus-0.2.2 → dulus-0.2.4}/cloudsave.py +0 -0
  47. {dulus-0.2.2 → dulus-0.2.4}/common.py +0 -0
  48. {dulus-0.2.2 → dulus-0.2.4}/compaction.py +0 -0
  49. {dulus-0.2.2 → dulus-0.2.4}/config.py +0 -0
  50. {dulus-0.2.2 → dulus-0.2.4}/context.py +0 -0
  51. {dulus-0.2.2 → dulus-0.2.4}/data/__init__.py +0 -0
  52. {dulus-0.2.2 → dulus-0.2.4}/data/active_persona.json +0 -0
  53. {dulus-0.2.2 → dulus-0.2.4}/data/context.json +0 -0
  54. {dulus-0.2.2 → dulus-0.2.4}/data/marketplace.json +0 -0
  55. {dulus-0.2.2 → dulus-0.2.4}/data/personas.json +0 -0
  56. {dulus-0.2.2 → dulus-0.2.4}/data/tasks.json +0 -0
  57. {dulus-0.2.2 → dulus-0.2.4}/docs/README.md +0 -0
  58. {dulus-0.2.2 → dulus-0.2.4}/docs/__init__.py +0 -0
  59. {dulus-0.2.2 → dulus-0.2.4}/docs/api.html +0 -0
  60. {dulus-0.2.2 → dulus-0.2.4}/docs/architecture.md +0 -0
  61. {dulus-0.2.2 → dulus-0.2.4}/docs/azure-speech-template.json +0 -0
  62. {dulus-0.2.2 → dulus-0.2.4}/docs/dashboard/index.html +0 -0
  63. {dulus-0.2.2 → dulus-0.2.4}/docs/generate.py +0 -0
  64. {dulus-0.2.2 → dulus-0.2.4}/docs/index.html +0 -0
  65. {dulus-0.2.2 → dulus-0.2.4}/docs/news.md +0 -0
  66. {dulus-0.2.2 → dulus-0.2.4}/docs/personas/index.html +0 -0
  67. {dulus-0.2.2/docs → dulus-0.2.4/docs/uploads}/particle-playground.html +0 -0
  68. {dulus-0.2.2 → dulus-0.2.4}/dulus.egg-info/SOURCES.txt +0 -0
  69. {dulus-0.2.2 → dulus-0.2.4}/dulus.egg-info/dependency_links.txt +0 -0
  70. {dulus-0.2.2 → dulus-0.2.4}/dulus.egg-info/entry_points.txt +0 -0
  71. {dulus-0.2.2 → dulus-0.2.4}/dulus.egg-info/requires.txt +0 -0
  72. {dulus-0.2.2 → dulus-0.2.4}/dulus.egg-info/top_level.txt +0 -0
  73. {dulus-0.2.2 → dulus-0.2.4}/dulus.py +0 -0
  74. {dulus-0.2.2 → dulus-0.2.4}/dulus_gui.py +0 -0
  75. {dulus-0.2.2 → dulus-0.2.4}/dulus_mcp/__init__.py +0 -0
  76. {dulus-0.2.2 → dulus-0.2.4}/dulus_mcp/client.py +0 -0
  77. {dulus-0.2.2 → dulus-0.2.4}/dulus_mcp/config.py +0 -0
  78. {dulus-0.2.2 → dulus-0.2.4}/dulus_mcp/tools.py +0 -0
  79. {dulus-0.2.2 → dulus-0.2.4}/dulus_mcp/types.py +0 -0
  80. {dulus-0.2.2 → dulus-0.2.4}/gui/__init__.py +0 -0
  81. {dulus-0.2.2 → dulus-0.2.4}/gui/agent_bridge.py +0 -0
  82. {dulus-0.2.2 → dulus-0.2.4}/gui/chat_widget.py +0 -0
  83. {dulus-0.2.2 → dulus-0.2.4}/gui/main_window.py +0 -0
  84. {dulus-0.2.2 → dulus-0.2.4}/gui/personas.py +0 -0
  85. {dulus-0.2.2 → dulus-0.2.4}/gui/session_utils.py +0 -0
  86. {dulus-0.2.2 → dulus-0.2.4}/gui/settings_dialog.py +0 -0
  87. {dulus-0.2.2 → dulus-0.2.4}/gui/sidebar.py +0 -0
  88. {dulus-0.2.2 → dulus-0.2.4}/gui/tasks_view.py +0 -0
  89. {dulus-0.2.2 → dulus-0.2.4}/gui/themes.py +0 -0
  90. {dulus-0.2.2 → dulus-0.2.4}/gui/tool_panel.py +0 -0
  91. {dulus-0.2.2 → dulus-0.2.4}/input.py +0 -0
  92. {dulus-0.2.2 → dulus-0.2.4}/license_manager.py +0 -0
  93. {dulus-0.2.2 → dulus-0.2.4}/memory/__init__.py +0 -0
  94. {dulus-0.2.2 → dulus-0.2.4}/memory/audit.py +0 -0
  95. {dulus-0.2.2 → dulus-0.2.4}/memory/consolidator.py +0 -0
  96. {dulus-0.2.2 → dulus-0.2.4}/memory/context.py +0 -0
  97. {dulus-0.2.2 → dulus-0.2.4}/memory/offload.py +0 -0
  98. {dulus-0.2.2 → dulus-0.2.4}/memory/palace.py +0 -0
  99. {dulus-0.2.2 → dulus-0.2.4}/memory/scan.py +0 -0
  100. {dulus-0.2.2 → dulus-0.2.4}/memory/sessions.py +0 -0
  101. {dulus-0.2.2 → dulus-0.2.4}/memory/store.py +0 -0
  102. {dulus-0.2.2 → dulus-0.2.4}/memory/tools.py +0 -0
  103. {dulus-0.2.2 → dulus-0.2.4}/memory/types.py +0 -0
  104. {dulus-0.2.2 → dulus-0.2.4}/memory/vector_search.py +0 -0
  105. {dulus-0.2.2 → dulus-0.2.4}/multi_agent/__init__.py +0 -0
  106. {dulus-0.2.2 → dulus-0.2.4}/multi_agent/subagent.py +0 -0
  107. {dulus-0.2.2 → dulus-0.2.4}/multi_agent/tools.py +0 -0
  108. {dulus-0.2.2 → dulus-0.2.4}/offload_helper.py +0 -0
  109. {dulus-0.2.2 → dulus-0.2.4}/plugin/__init__.py +0 -0
  110. {dulus-0.2.2 → dulus-0.2.4}/plugin/autoadapter.py +0 -0
  111. {dulus-0.2.2 → dulus-0.2.4}/plugin/loader.py +0 -0
  112. {dulus-0.2.2 → dulus-0.2.4}/plugin/recommend.py +0 -0
  113. {dulus-0.2.2 → dulus-0.2.4}/plugin/store.py +0 -0
  114. {dulus-0.2.2 → dulus-0.2.4}/plugin/types.py +0 -0
  115. {dulus-0.2.2 → dulus-0.2.4}/setup.cfg +0 -0
  116. {dulus-0.2.2 → dulus-0.2.4}/skill/__init__.py +0 -0
  117. {dulus-0.2.2 → dulus-0.2.4}/skill/builtin.py +0 -0
  118. {dulus-0.2.2 → dulus-0.2.4}/skill/clawhub.py +0 -0
  119. {dulus-0.2.2 → dulus-0.2.4}/skill/executor.py +0 -0
  120. {dulus-0.2.2 → dulus-0.2.4}/skill/loader.py +0 -0
  121. {dulus-0.2.2 → dulus-0.2.4}/skill/tools.py +0 -0
  122. {dulus-0.2.2 → dulus-0.2.4}/skills.py +0 -0
  123. {dulus-0.2.2 → dulus-0.2.4}/spinner.py +0 -0
  124. {dulus-0.2.2 → dulus-0.2.4}/string_utils.py +0 -0
  125. {dulus-0.2.2 → dulus-0.2.4}/subagent.py +0 -0
  126. {dulus-0.2.2 → dulus-0.2.4}/task/__init__.py +0 -0
  127. {dulus-0.2.2 → dulus-0.2.4}/task/store.py +0 -0
  128. {dulus-0.2.2 → dulus-0.2.4}/task/tools.py +0 -0
  129. {dulus-0.2.2 → dulus-0.2.4}/task/types.py +0 -0
  130. {dulus-0.2.2 → dulus-0.2.4}/tests/test_checkpoint.py +0 -0
  131. {dulus-0.2.2 → dulus-0.2.4}/tests/test_compaction.py +0 -0
  132. {dulus-0.2.2 → dulus-0.2.4}/tests/test_diff_view.py +0 -0
  133. {dulus-0.2.2 → dulus-0.2.4}/tests/test_injection_fix.py +0 -0
  134. {dulus-0.2.2 → dulus-0.2.4}/tests/test_license.py +0 -0
  135. {dulus-0.2.2 → dulus-0.2.4}/tests/test_mcp.py +0 -0
  136. {dulus-0.2.2 → dulus-0.2.4}/tests/test_memory.py +0 -0
  137. {dulus-0.2.2 → dulus-0.2.4}/tests/test_plugin.py +0 -0
  138. {dulus-0.2.2 → dulus-0.2.4}/tests/test_skills.py +0 -0
  139. {dulus-0.2.2 → dulus-0.2.4}/tests/test_subagent.py +0 -0
  140. {dulus-0.2.2 → dulus-0.2.4}/tests/test_task.py +0 -0
  141. {dulus-0.2.2 → dulus-0.2.4}/tests/test_telegram_buffer.py +0 -0
  142. {dulus-0.2.2 → dulus-0.2.4}/tests/test_tool_registry.py +0 -0
  143. {dulus-0.2.2 → dulus-0.2.4}/tests/test_voice.py +0 -0
  144. {dulus-0.2.2 → dulus-0.2.4}/tmux_offloader.py +0 -0
  145. {dulus-0.2.2 → dulus-0.2.4}/tool_registry.py +0 -0
  146. {dulus-0.2.2 → dulus-0.2.4}/tools.py +0 -0
  147. {dulus-0.2.2 → dulus-0.2.4}/ui/__init__.py +0 -0
  148. {dulus-0.2.2 → dulus-0.2.4}/ui/input.py +0 -0
  149. {dulus-0.2.2 → dulus-0.2.4}/ui/render.py +0 -0
  150. {dulus-0.2.2 → dulus-0.2.4}/voice/__init__.py +0 -0
  151. {dulus-0.2.2 → dulus-0.2.4}/voice/keyterms.py +0 -0
  152. {dulus-0.2.2 → dulus-0.2.4}/voice/recorder.py +0 -0
  153. {dulus-0.2.2 → dulus-0.2.4}/voice/stt.py +0 -0
  154. {dulus-0.2.2 → dulus-0.2.4}/voice/tts.py +0 -0
  155. {dulus-0.2.2 → dulus-0.2.4}/webchat.py +0 -0
  156. {dulus-0.2.2 → dulus-0.2.4}/webchat_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace
5
5
  Author: KevRojo
6
6
  License: MIT
@@ -57,8 +57,8 @@ SET /sticky_input ON since the first run for the best experience!
57
57
  </p>
58
58
 
59
59
  <p align="center">
60
- <a href="https://pypi.org/project/dulus-agent/"><img src="https://img.shields.io/pypi/v/dulus-agent.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="pypi"/></a>
61
- <a href="https://pypi.org/project/dulus-agent/"><img src="https://static.pepy.tech/badge/dulus-agent?style=flat-square" alt="downloads"/></a>
60
+ <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="pypi"/></a>
61
+ <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
62
62
  <img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
63
63
  <img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
64
64
  <img src="https://img.shields.io/badge/version-v1.01.20-ff6b1f?style=flat-square&labelColor=07070a" alt="version"/>
@@ -68,7 +68,7 @@ SET /sticky_input ON since the first run for the best experience!
68
68
  </p>
69
69
 
70
70
  <p align="center">
71
- <code>pip install dulus-agent</code>
71
+ <code>pip install dulus</code>
72
72
  </p>
73
73
 
74
74
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
@@ -18,8 +18,8 @@ SET /sticky_input ON since the first run for the best experience!
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="https://pypi.org/project/dulus-agent/"><img src="https://img.shields.io/pypi/v/dulus-agent.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="pypi"/></a>
22
- <a href="https://pypi.org/project/dulus-agent/"><img src="https://static.pepy.tech/badge/dulus-agent?style=flat-square" alt="downloads"/></a>
21
+ <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="pypi"/></a>
22
+ <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
23
23
  <img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
24
24
  <img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
25
25
  <img src="https://img.shields.io/badge/version-v1.01.20-ff6b1f?style=flat-square&labelColor=07070a" alt="version"/>
@@ -29,7 +29,7 @@ SET /sticky_input ON since the first run for the best experience!
29
29
  </p>
30
30
 
31
31
  <p align="center">
32
- <code>pip install dulus-agent</code>
32
+ <code>pip install dulus</code>
33
33
  </p>
34
34
 
35
35
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
@@ -23,7 +23,8 @@ import argparse
23
23
  from pathlib import Path
24
24
 
25
25
 
26
- SESSION_DIR = Path.home() / ".claude" / "projects" / "C--Users-Admin-Desktop-DULUSV2"
26
+ _CWD_SLUG = str(Path.cwd()).replace(":", "-").replace("\\", "-").replace("/", "-")
27
+ SESSION_DIR = Path.home() / ".claude" / "projects" / _CWD_SLUG
27
28
 
28
29
  # How long to wait (seconds) with no new assistant entries before flushing
29
30
  # the accumulated turn as complete.
@@ -1,8 +1,8 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 80" width="1600" height="80" font-family="&#39;JetBrains Mono&#39;,monospace">
2
- <rect width="1600" height="80" fill="#07070a"></rect>
3
- <g font-size="14" letter-spacing="5" fill="#ff6b1f">
4
- <text x="40" y="48">◉ MULTI-PROVIDER · ◉ MCP · ◉ PLUGINS · ◉ SUB-AGENTS · ◉ VOICE · ◉ TELEGRAM · ◉ CHECKPOINTS · ◉ BRAINSTORM · ◉ SSJ MODE · ◉ MEMORY</text>
5
- </g>
6
- <line x1="0" y1="1" x2="1600" y2="1" stroke="#ff6b1f" stroke-opacity="0.3"></line>
7
- <line x1="0" y1="79" x2="1600" y2="79" stroke="#ff6b1f" stroke-opacity="0.3"></line>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 80" width="1600" height="80" font-family="&#39;JetBrains Mono&#39;,monospace">
2
+ <rect width="1600" height="80" fill="#07070a"></rect>
3
+ <g font-size="14" letter-spacing="5" fill="#ff6b1f">
4
+ <text x="40" y="48">◉ MULTI-PROVIDER · ◉ MCP · ◉ PLUGINS · ◉ SUB-AGENTS · ◉ VOICE · ◉ TELEGRAM · ◉ CHECKPOINTS · ◉ BRAINSTORM · ◉ SSJ MODE · ◉ MEMORY</text>
5
+ </g>
6
+ <line x1="0" y1="1" x2="1600" y2="1" stroke="#ff6b1f" stroke-opacity="0.3"></line>
7
+ <line x1="0" y1="79" x2="1600" y2="79" stroke="#ff6b1f" stroke-opacity="0.3"></line>
8
8
  </svg>
@@ -1,187 +1,186 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 640" width="1600" height="640" font-family="&#39;JetBrains Mono&#39;,&#39;Menlo&#39;,monospace">
2
- <defs>
3
- <linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
4
- <stop offset="0%" stop-color="#0a0a0f"></stop>
5
- <stop offset="100%" stop-color="#05050a"></stop>
6
- </linearGradient>
7
- <radialGradient id="glow" cx="78%" cy="50%" r="50%">
8
- <stop offset="0%" stop-color="#ff6b1f" stop-opacity="0.28"></stop>
9
- <stop offset="100%" stop-color="#ff6b1f" stop-opacity="0"></stop>
10
- </radialGradient>
11
- <linearGradient id="typeFill" x1="0" y1="0" x2="0" y2="1">
12
- <stop offset="0%" stop-color="#f4ede4"></stop>
13
- <stop offset="58%" stop-color="#f4ede4"></stop>
14
- <stop offset="58%" stop-color="#ff6b1f"></stop>
15
- <stop offset="100%" stop-color="#ff6b1f"></stop>
16
- </linearGradient>
17
- <linearGradient id="fgrad" x1="0" y1="0" x2="1" y2="1">
18
- <stop offset="0%" stop-color="#ffcb7a"></stop>
19
- <stop offset="45%" stop-color="#ff7a2a"></stop>
20
- <stop offset="100%" stop-color="#b8340a"></stop>
21
- </linearGradient>
22
- <pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
23
- <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#ff6b1f" stroke-opacity="0.08"></path>
24
- </pattern>
25
- <pattern id="scan" width="1" height="4" patternUnits="userSpaceOnUse">
26
- <rect width="1" height="1" fill="#fff" fill-opacity="0.025"></rect>
27
- </pattern>
28
- </defs>
29
-
30
- <rect width="1600" height="640" fill="url(#sky)"></rect>
31
- <rect width="1600" height="640" fill="url(#grid)"></rect>
32
- <rect width="1600" height="640" fill="url(#glow)"></rect>
33
- <rect width="1600" height="640" fill="url(#scan)"></rect>
34
-
35
- <g stroke="#ff6b1f" stroke-width="2" fill="none">
36
- <path d="M 14 42 L 14 14 L 42 14"></path>
37
- <path d="M 1558 14 L 1586 14 L 1586 42"></path>
38
- <path d="M 14 598 L 14 626 L 42 626"></path>
39
- <path d="M 1558 626 L 1586 626 L 1586 598"></path>
40
- </g>
41
-
42
- <g font-size="11" letter-spacing="2.2" fill="#8a8275">
43
- <text x="30" y="34">SYS://DULUS.CORE</text>
44
- <text x="1570" y="34" text-anchor="end">BUILD v1.01.20 · STABLE</text>
45
- <text x="30" y="622">MULTIPROVIDER · MCP · PLUGINS · AGENTS · VOICE</text>
46
- <text x="1570" y="622" text-anchor="end" fill="#ff6b1f">◉ ONLINE</text>
47
- </g>
48
-
49
- <g transform="translate(80,86)">
50
- <circle cx="0" cy="-4" r="5" fill="#ff6b1f"></circle>
51
- <circle cx="0" cy="-4" r="9" fill="none" stroke="#ff6b1f" stroke-opacity="0.4"></circle>
52
- <text x="18" y="0" font-size="12" letter-spacing="2.4" fill="#8a8275">PYTHON AUTONOMOUS AGENT · OPEN SOURCE</text>
53
- </g>
54
-
55
- <g font-family="&#39;Archivo Black&#39;,&#39;Impact&#39;,&#39;Helvetica&#39;,sans-serif" font-weight="900" letter-spacing="-6">
56
- <text x="80" y="300" font-size="200" fill="url(#typeFill)">FAL</text>
57
- <text x="80" y="470" font-size="200" fill="url(#typeFill)">CON</text>
58
- </g>
59
- <text x="82" y="510" font-size="16" letter-spacing="4.5" fill="#ff6b1f">// HUNT. PATCH. SHIP.</text>
60
-
61
- <g font-size="15" fill="#9a9286">
62
- <text x="82" y="542">~12K lines of readable Python. Any model. Any repo.</text>
63
- <text x="82" y="564">No build step, no gatekeeping, no fluff.</text>
64
- <text x="82" y="586" fill="#f4ede4">Just talons.</text>
65
- </g>
66
-
67
- <g transform="translate(450,555)">
68
- <rect x="0" y="-22" width="340" height="34" fill="#ff6b1f" fill-opacity="0.06" stroke="#ff6b1f" stroke-opacity="0.45"></rect>
69
- <text x="14" y="0" font-size="14" fill="#ff6b1f">$</text>
70
- <text x="30" y="0" font-size="14" fill="#f4ede4">pip install dulus &amp;&amp; dulus</text>
71
- <rect x="308" y="-14" width="9" height="16" fill="#ff6b1f"></rect>
72
- </g>
73
-
74
-
75
- <g transform="translate(1200,320)">
76
-
77
- <g stroke="#ff6b1f" fill="none" opacity="0.4">
78
- <circle r="280" stroke-width="1"></circle>
79
- <circle r="220" stroke-width="1" stroke-dasharray="4 8"></circle>
80
- <circle r="150" stroke-width="1" stroke-dasharray="2 14"></circle>
81
- <line x1="-300" y1="0" x2="-260" y2="0"></line>
82
- <line x1="260" y1="0" x2="300" y2="0"></line>
83
- <line x1="0" y1="-300" x2="0" y2="-260"></line>
84
- <line x1="0" y1="260" x2="0" y2="300"></line>
85
- </g>
86
- <g font-size="9" fill="#ff6b1f" opacity="0.65" letter-spacing="1.5">
87
- <text x="-258" y="-265">N 00°</text>
88
- <text x="258" y="-265" text-anchor="end">E 90°</text>
89
- <text x="-258" y="275">W 270°</text>
90
- <text x="258" y="275" text-anchor="end">S 180°</text>
91
- </g>
92
-
93
-
94
- <g>
95
-
96
- <path d="M -15 120 L -50 250 L -30 240 L -20 260 L -5 235 L 5 260 L 20 235 L 30 260 L 50 250 L 15 120 Z" fill="url(#fgrad)"></path>
97
- <g stroke="#07070a" stroke-width="1" opacity="0.35" fill="none">
98
- <path d="M -20 150 L -20 240"></path>
99
- <path d="M 0 150 L 0 240"></path>
100
- <path d="M 20 150 L 20 240"></path>
101
- </g>
102
-
103
-
104
- <path d="M -70 -30&#xA; Q -90 40 -60 100&#xA; Q -40 140 0 145&#xA; Q 40 140 60 100&#xA; Q 90 40 70 -30&#xA; Q 50 -70 0 -75&#xA; Q -50 -70 -70 -30 Z" fill="url(#fgrad)"></path>
105
-
106
-
107
- <g fill="#07070a" opacity="0.55">
108
- <path d="M -30 20 l 3 0 l -1.5 2.5 z"></path>
109
- <path d="M 0 15 l 3 0 l -1.5 2.5 z"></path>
110
- <path d="M 30 25 l 3 0 l -1.5 2.5 z"></path>
111
- <path d="M -15 45 l 3 0 l -1.5 2.5 z"></path>
112
- <path d="M 15 50 l 3 0 l -1.5 2.5 z"></path>
113
- <path d="M -35 70 l 3 0 l -1.5 2.5 z"></path>
114
- <path d="M 0 80 l 3 0 l -1.5 2.5 z"></path>
115
- <path d="M 30 75 l 3 0 l -1.5 2.5 z"></path>
116
- <path d="M -20 100 l 3 0 l -1.5 2.5 z"></path>
117
- <path d="M 20 105 l 3 0 l -1.5 2.5 z"></path>
118
- </g>
119
-
120
-
121
- <path d="M -70 -20&#xA; Q -95 30 -80 90&#xA; Q -70 120 -45 130&#xA; L -30 125&#xA; L -25 90&#xA; L -30 40&#xA; L -50 0&#xA; Z" fill="#8f2a08" opacity="0.95"></path>
122
-
123
- <g stroke="#07070a" stroke-width="1.2" fill="none" opacity="0.6">
124
- <path d="M -80 20 Q -65 60 -40 110"></path>
125
- <path d="M -85 40 Q -70 75 -45 120"></path>
126
- <path d="M -78 0 Q -58 45 -35 100"></path>
127
- </g>
128
-
129
- <path d="M -45 130 L -55 155 L -40 145 L -35 160 L -25 140 Z" fill="#5c1a04"></path>
130
-
131
-
132
- <g>
133
-
134
- <path d="M -35 -50 Q 0 -55 35 -50 Q 40 -30 20 -20 Q -20 -20 -40 -30 Z" fill="#8f2a08" opacity="0.6"></path>
135
-
136
- <path d="M -40 -60&#xA; Q -45 -110 -5 -125&#xA; Q 35 -130 55 -110&#xA; Q 65 -90 60 -65&#xA; Q 50 -45 20 -45&#xA; Q -20 -48 -40 -60 Z" fill="url(#fgrad)"></path>
137
-
138
- <path d="M -35 -80&#xA; Q -30 -120 0 -125&#xA; Q 35 -125 50 -100&#xA; Q 40 -90 20 -85&#xA; Q -15 -85 -35 -80 Z" fill="#1a1a1e"></path>
139
-
140
- <path d="M 28 -72 Q 32 -55 26 -48 Q 20 -55 22 -70 Z" fill="#1a1a1e"></path>
141
-
142
- <circle cx="32" cy="-80" r="4.5" fill="#ffd166"></circle>
143
- <circle cx="33" cy="-80" r="2.2" fill="#07070a"></circle>
144
-
145
- <path d="M 55 -75 L 78 -68 L 82 -62 L 72 -60 L 58 -62 Z" fill="#f4ede4"></path>
146
- <path d="M 68 -62 L 78 -58 L 70 -55 Z" fill="#1a1a1e"></path>
147
-
148
- <path d="M 50 -70 Q 58 -73 62 -68 Q 55 -65 50 -70 Z" fill="#ffb347"></path>
149
- </g>
150
-
151
-
152
- <g>
153
- <path d="M -80 150 L 80 150 L 75 165 L -75 165 Z" fill="#1a1a1e"></path>
154
- <path d="M -80 150 L -120 155 L -75 160 Z" fill="#1a1a1e"></path>
155
- <g stroke="#ff6b1f" stroke-width="0.8" opacity="0.6" fill="none">
156
- <path d="M -70 157 L 70 157"></path>
157
- </g>
158
-
159
- <path d="M -35 145 L -38 175 L -30 170 L -28 180 L -22 170 L -20 180 L -15 168 L -20 145 Z" fill="#0a0a0a"></path>
160
- <path d="M 35 145 L 38 175 L 30 170 L 28 180 L 22 170 L 20 180 L 15 168 L 20 145 Z" fill="#0a0a0a"></path>
161
- </g>
162
- </g>
163
-
164
-
165
- <g font-size="9" fill="#ff6b1f" letter-spacing="1.5" opacity="0.9">
166
- <line x1="80" y1="-65" x2="200" y2="-140" stroke="#ff6b1f" stroke-width="0.8"></line>
167
- <circle cx="80" cy="-65" r="2" fill="#ff6b1f"></circle>
168
- <text x="204" y="-142">BEAK · TOOL_CALL()</text>
169
-
170
- <line x1="33" y1="-80" x2="220" y2="-60" stroke="#ff6b1f" stroke-width="0.8"></line>
171
- <circle cx="33" cy="-80" r="2" fill="#ff6b1f"></circle>
172
- <text x="224" y="-58">OPTIC · CONTEXT</text>
173
-
174
- <line x1="-75" y1="80" x2="-230" y2="140" stroke="#ff6b1f" stroke-width="0.8"></line>
175
- <circle cx="-75" cy="80" r="2" fill="#ff6b1f"></circle>
176
- <text x="-234" y="142" text-anchor="end">WING · MULTI-AGENT</text>
177
-
178
- <line x1="-30" y1="175" x2="-200" y2="230" stroke="#ff6b1f" stroke-width="0.8"></line>
179
- <circle cx="-30" cy="175" r="2" fill="#ff6b1f"></circle>
180
- <text x="-204" y="232" text-anchor="end">TALON · EDIT()</text>
181
-
182
- <line x1="35" y1="130" x2="220" y2="180" stroke="#ff6b1f" stroke-width="0.8"></line>
183
- <circle cx="35" cy="130" r="2" fill="#ff6b1f"></circle>
184
- <text x="224" y="182">PLUMAGE · PLUGINS</text>
185
- </g>
186
- </g>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 640" width="1600" height="640" font-family="&#39;JetBrains Mono&#39;,&#39;Menlo&#39;,monospace">
2
+ <defs>
3
+ <linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
4
+ <stop offset="0%" stop-color="#0a0a0f"></stop>
5
+ <stop offset="100%" stop-color="#05050a"></stop>
6
+ </linearGradient>
7
+ <radialGradient id="glow" cx="78%" cy="50%" r="50%">
8
+ <stop offset="0%" stop-color="#ff6b1f" stop-opacity="0.28"></stop>
9
+ <stop offset="100%" stop-color="#ff6b1f" stop-opacity="0"></stop>
10
+ </radialGradient>
11
+ <linearGradient id="typeFill" x1="0" y1="0" x2="0" y2="1">
12
+ <stop offset="0%" stop-color="#f4ede4"></stop>
13
+ <stop offset="58%" stop-color="#f4ede4"></stop>
14
+ <stop offset="58%" stop-color="#ff6b1f"></stop>
15
+ <stop offset="100%" stop-color="#ff6b1f"></stop>
16
+ </linearGradient>
17
+ <linearGradient id="fgrad" x1="0" y1="0" x2="1" y2="1">
18
+ <stop offset="0%" stop-color="#ffcb7a"></stop>
19
+ <stop offset="45%" stop-color="#ff7a2a"></stop>
20
+ <stop offset="100%" stop-color="#b8340a"></stop>
21
+ </linearGradient>
22
+ <pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
23
+ <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#ff6b1f" stroke-opacity="0.08"></path>
24
+ </pattern>
25
+ <pattern id="scan" width="1" height="4" patternUnits="userSpaceOnUse">
26
+ <rect width="1" height="1" fill="#fff" fill-opacity="0.025"></rect>
27
+ </pattern>
28
+ </defs>
29
+
30
+ <rect width="1600" height="640" fill="url(#sky)"></rect>
31
+ <rect width="1600" height="640" fill="url(#grid)"></rect>
32
+ <rect width="1600" height="640" fill="url(#glow)"></rect>
33
+ <rect width="1600" height="640" fill="url(#scan)"></rect>
34
+
35
+ <g stroke="#ff6b1f" stroke-width="2" fill="none">
36
+ <path d="M 14 42 L 14 14 L 42 14"></path>
37
+ <path d="M 1558 14 L 1586 14 L 1586 42"></path>
38
+ <path d="M 14 598 L 14 626 L 42 626"></path>
39
+ <path d="M 1558 626 L 1586 626 L 1586 598"></path>
40
+ </g>
41
+
42
+ <g font-size="11" letter-spacing="2.2" fill="#8a8275">
43
+ <text x="30" y="34">SYS://DULUS.CORE</text>
44
+ <text x="1570" y="34" text-anchor="end">BUILD v1.01.20 · STABLE</text>
45
+ <text x="30" y="622">MULTIPROVIDER · MCP · PLUGINS · AGENTS · VOICE</text>
46
+ <text x="1570" y="622" text-anchor="end" fill="#ff6b1f">◉ ONLINE</text>
47
+ </g>
48
+
49
+ <g transform="translate(80,86)">
50
+ <circle cx="0" cy="-4" r="5" fill="#ff6b1f"></circle>
51
+ <circle cx="0" cy="-4" r="9" fill="none" stroke="#ff6b1f" stroke-opacity="0.4"></circle>
52
+ <text x="18" y="0" font-size="12" letter-spacing="2.4" fill="#8a8275">PYTHON AUTONOMOUS AGENT · OPEN SOURCE</text>
53
+ </g>
54
+
55
+ <g font-family="&#39;Archivo Black&#39;,&#39;Impact&#39;,&#39;Helvetica&#39;,sans-serif" font-weight="900" letter-spacing="-6">
56
+ <text x="80" y="380" font-size="230" fill="url(#typeFill)">DULUS</text>
57
+ </g>
58
+ <text x="82" y="510" font-size="16" letter-spacing="4.5" fill="#ff6b1f">// HUNT. PATCH. SHIP.</text>
59
+
60
+ <g font-size="15" fill="#9a9286">
61
+ <text x="82" y="542">~12K lines of readable Python. Any model. Any repo.</text>
62
+ <text x="82" y="564">No build step, no gatekeeping, no fluff.</text>
63
+ <text x="82" y="586" fill="#f4ede4">Just talons.</text>
64
+ </g>
65
+
66
+ <g transform="translate(450,555)">
67
+ <rect x="0" y="-22" width="340" height="34" fill="#ff6b1f" fill-opacity="0.06" stroke="#ff6b1f" stroke-opacity="0.45"></rect>
68
+ <text x="14" y="0" font-size="14" fill="#ff6b1f">$</text>
69
+ <text x="30" y="0" font-size="14" fill="#f4ede4">pip install dulus &amp;&amp; dulus</text>
70
+ <rect x="308" y="-14" width="9" height="16" fill="#ff6b1f"></rect>
71
+ </g>
72
+
73
+
74
+ <g transform="translate(1200,320)">
75
+
76
+ <g stroke="#ff6b1f" fill="none" opacity="0.4">
77
+ <circle r="280" stroke-width="1"></circle>
78
+ <circle r="220" stroke-width="1" stroke-dasharray="4 8"></circle>
79
+ <circle r="150" stroke-width="1" stroke-dasharray="2 14"></circle>
80
+ <line x1="-300" y1="0" x2="-260" y2="0"></line>
81
+ <line x1="260" y1="0" x2="300" y2="0"></line>
82
+ <line x1="0" y1="-300" x2="0" y2="-260"></line>
83
+ <line x1="0" y1="260" x2="0" y2="300"></line>
84
+ </g>
85
+ <g font-size="9" fill="#ff6b1f" opacity="0.65" letter-spacing="1.5">
86
+ <text x="-258" y="-265">N 00°</text>
87
+ <text x="258" y="-265" text-anchor="end">E 90°</text>
88
+ <text x="-258" y="275">W 270°</text>
89
+ <text x="258" y="275" text-anchor="end">S 180°</text>
90
+ </g>
91
+
92
+
93
+ <g>
94
+
95
+ <path d="M -15 120 L -50 250 L -30 240 L -20 260 L -5 235 L 5 260 L 20 235 L 30 260 L 50 250 L 15 120 Z" fill="url(#fgrad)"></path>
96
+ <g stroke="#07070a" stroke-width="1" opacity="0.35" fill="none">
97
+ <path d="M -20 150 L -20 240"></path>
98
+ <path d="M 0 150 L 0 240"></path>
99
+ <path d="M 20 150 L 20 240"></path>
100
+ </g>
101
+
102
+
103
+ <path d="M -70 -30&#xA; Q -90 40 -60 100&#xA; Q -40 140 0 145&#xA; Q 40 140 60 100&#xA; Q 90 40 70 -30&#xA; Q 50 -70 0 -75&#xA; Q -50 -70 -70 -30 Z" fill="url(#fgrad)"></path>
104
+
105
+
106
+ <g fill="#07070a" opacity="0.55">
107
+ <path d="M -30 20 l 3 0 l -1.5 2.5 z"></path>
108
+ <path d="M 0 15 l 3 0 l -1.5 2.5 z"></path>
109
+ <path d="M 30 25 l 3 0 l -1.5 2.5 z"></path>
110
+ <path d="M -15 45 l 3 0 l -1.5 2.5 z"></path>
111
+ <path d="M 15 50 l 3 0 l -1.5 2.5 z"></path>
112
+ <path d="M -35 70 l 3 0 l -1.5 2.5 z"></path>
113
+ <path d="M 0 80 l 3 0 l -1.5 2.5 z"></path>
114
+ <path d="M 30 75 l 3 0 l -1.5 2.5 z"></path>
115
+ <path d="M -20 100 l 3 0 l -1.5 2.5 z"></path>
116
+ <path d="M 20 105 l 3 0 l -1.5 2.5 z"></path>
117
+ </g>
118
+
119
+
120
+ <path d="M -70 -20&#xA; Q -95 30 -80 90&#xA; Q -70 120 -45 130&#xA; L -30 125&#xA; L -25 90&#xA; L -30 40&#xA; L -50 0&#xA; Z" fill="#8f2a08" opacity="0.95"></path>
121
+
122
+ <g stroke="#07070a" stroke-width="1.2" fill="none" opacity="0.6">
123
+ <path d="M -80 20 Q -65 60 -40 110"></path>
124
+ <path d="M -85 40 Q -70 75 -45 120"></path>
125
+ <path d="M -78 0 Q -58 45 -35 100"></path>
126
+ </g>
127
+
128
+ <path d="M -45 130 L -55 155 L -40 145 L -35 160 L -25 140 Z" fill="#5c1a04"></path>
129
+
130
+
131
+ <g>
132
+
133
+ <path d="M -35 -50 Q 0 -55 35 -50 Q 40 -30 20 -20 Q -20 -20 -40 -30 Z" fill="#8f2a08" opacity="0.6"></path>
134
+
135
+ <path d="M -40 -60&#xA; Q -45 -110 -5 -125&#xA; Q 35 -130 55 -110&#xA; Q 65 -90 60 -65&#xA; Q 50 -45 20 -45&#xA; Q -20 -48 -40 -60 Z" fill="url(#fgrad)"></path>
136
+
137
+ <path d="M -35 -80&#xA; Q -30 -120 0 -125&#xA; Q 35 -125 50 -100&#xA; Q 40 -90 20 -85&#xA; Q -15 -85 -35 -80 Z" fill="#1a1a1e"></path>
138
+
139
+ <path d="M 28 -72 Q 32 -55 26 -48 Q 20 -55 22 -70 Z" fill="#1a1a1e"></path>
140
+
141
+ <circle cx="32" cy="-80" r="4.5" fill="#ffd166"></circle>
142
+ <circle cx="33" cy="-80" r="2.2" fill="#07070a"></circle>
143
+
144
+ <path d="M 55 -75 L 78 -68 L 82 -62 L 72 -60 L 58 -62 Z" fill="#f4ede4"></path>
145
+ <path d="M 68 -62 L 78 -58 L 70 -55 Z" fill="#1a1a1e"></path>
146
+
147
+ <path d="M 50 -70 Q 58 -73 62 -68 Q 55 -65 50 -70 Z" fill="#ffb347"></path>
148
+ </g>
149
+
150
+
151
+ <g>
152
+ <path d="M -80 150 L 80 150 L 75 165 L -75 165 Z" fill="#1a1a1e"></path>
153
+ <path d="M -80 150 L -120 155 L -75 160 Z" fill="#1a1a1e"></path>
154
+ <g stroke="#ff6b1f" stroke-width="0.8" opacity="0.6" fill="none">
155
+ <path d="M -70 157 L 70 157"></path>
156
+ </g>
157
+
158
+ <path d="M -35 145 L -38 175 L -30 170 L -28 180 L -22 170 L -20 180 L -15 168 L -20 145 Z" fill="#0a0a0a"></path>
159
+ <path d="M 35 145 L 38 175 L 30 170 L 28 180 L 22 170 L 20 180 L 15 168 L 20 145 Z" fill="#0a0a0a"></path>
160
+ </g>
161
+ </g>
162
+
163
+
164
+ <g font-size="9" fill="#ff6b1f" letter-spacing="1.5" opacity="0.9">
165
+ <line x1="80" y1="-65" x2="200" y2="-140" stroke="#ff6b1f" stroke-width="0.8"></line>
166
+ <circle cx="80" cy="-65" r="2" fill="#ff6b1f"></circle>
167
+ <text x="204" y="-142">BEAK · TOOL_CALL()</text>
168
+
169
+ <line x1="33" y1="-80" x2="220" y2="-60" stroke="#ff6b1f" stroke-width="0.8"></line>
170
+ <circle cx="33" cy="-80" r="2" fill="#ff6b1f"></circle>
171
+ <text x="224" y="-58">OPTIC · CONTEXT</text>
172
+
173
+ <line x1="-75" y1="80" x2="-230" y2="140" stroke="#ff6b1f" stroke-width="0.8"></line>
174
+ <circle cx="-75" cy="80" r="2" fill="#ff6b1f"></circle>
175
+ <text x="-234" y="142" text-anchor="end">WING · MULTI-AGENT</text>
176
+
177
+ <line x1="-30" y1="175" x2="-200" y2="230" stroke="#ff6b1f" stroke-width="0.8"></line>
178
+ <circle cx="-30" cy="175" r="2" fill="#ff6b1f"></circle>
179
+ <text x="-204" y="232" text-anchor="end">TALON · EDIT()</text>
180
+
181
+ <line x1="35" y1="130" x2="220" y2="180" stroke="#ff6b1f" stroke-width="0.8"></line>
182
+ <circle cx="35" cy="130" r="2" fill="#ff6b1f"></circle>
183
+ <text x="224" y="182">PLUMAGE · PLUGINS</text>
184
+ </g>
185
+ </g>
187
186
  </svg>