dulus 0.2.60__tar.gz → 3.3.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 (428) hide show
  1. {dulus-0.2.60 → dulus-3.3.4}/MANIFEST.in +3 -0
  2. {dulus-0.2.60/dulus.egg-info → dulus-3.3.4}/PKG-INFO +202 -97
  3. {dulus-0.2.60 → dulus-3.3.4}/README.md +185 -95
  4. {dulus-0.2.60 → dulus-3.3.4}/agent.py +61 -0
  5. {dulus-0.2.60 → dulus-3.3.4}/backend/agents_bridge.py +8 -3
  6. {dulus-0.2.60 → dulus-3.3.4}/backend/compressor.py +1 -1
  7. {dulus-0.2.60 → dulus-3.3.4}/batch_api.py +165 -0
  8. {dulus-0.2.60 → dulus-3.3.4}/compaction.py +280 -40
  9. {dulus-0.2.60 → dulus-3.3.4}/config.py +12 -3
  10. {dulus-0.2.60 → dulus-3.3.4}/context.py +101 -2
  11. {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/composio_plugin/tool_generator.py +2 -2
  12. {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/plugin_tool.py +15 -15
  13. dulus-3.3.4/docs/API.md +343 -0
  14. dulus-3.3.4/docs/BRAND_GUIDE.md +289 -0
  15. dulus-3.3.4/docs/CHANGELOG.md +117 -0
  16. dulus-3.3.4/docs/CONTRIBUTING.md +375 -0
  17. dulus-3.3.4/docs/DEPLOYMENT.md +293 -0
  18. dulus-3.3.4/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
  19. dulus-3.3.4/docs/FAQ.md +230 -0
  20. dulus-3.3.4/docs/GETTING_STARTED.md +397 -0
  21. dulus-3.3.4/docs/INVESTOR_BRIEF.md +324 -0
  22. dulus-3.3.4/docs/README.md +839 -0
  23. dulus-3.3.4/docs/README_AR.md +240 -0
  24. dulus-3.3.4/docs/README_EN.md +318 -0
  25. dulus-3.3.4/docs/README_ES.md +251 -0
  26. dulus-3.3.4/docs/README_FR.md +240 -0
  27. dulus-3.3.4/docs/README_JA.md +240 -0
  28. dulus-3.3.4/docs/README_KO.md +240 -0
  29. dulus-3.3.4/docs/README_PT.md +240 -0
  30. dulus-3.3.4/docs/README_RU.md +240 -0
  31. dulus-3.3.4/docs/README_ZH.md +240 -0
  32. dulus-3.3.4/docs/SECURITY.md +162 -0
  33. dulus-3.3.4/docs/api.html +2499 -0
  34. dulus-3.3.4/docs/architecture.md +428 -0
  35. {dulus-0.2.60 → dulus-3.3.4}/docs/dashboard/index.html +5 -8
  36. dulus-3.3.4/docs/dulus-bird.png +0 -0
  37. {dulus-0.2.60 → dulus-3.3.4}/docs/hero.svg +4 -3
  38. {dulus-0.2.60 → dulus-3.3.4}/docs/index.html +1686 -325
  39. {dulus-0.2.60 → dulus-3.3.4}/docs/news.md +40 -0
  40. {dulus-0.2.60 → dulus-3.3.4}/docs/preview.html +1 -1
  41. {dulus-0.2.60 → dulus-3.3.4/dulus.egg-info}/PKG-INFO +202 -97
  42. dulus-3.3.4/dulus.egg-info/SOURCES.txt +258 -0
  43. {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/requires.txt +18 -0
  44. {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/top_level.txt +6 -1
  45. {dulus-0.2.60 → dulus-3.3.4}/dulus.py +2060 -182
  46. dulus-3.3.4/dulus_gui.py +818 -0
  47. dulus-3.3.4/dulus_tools/__init__.py +1 -0
  48. dulus-3.3.4/dulus_tools/add_dir_manager.py +109 -0
  49. dulus-3.3.4/dulus_tools/afk_mode.py +34 -0
  50. dulus-3.3.4/dulus_tools/approval_runtime.py +285 -0
  51. dulus-3.3.4/dulus_tools/background_tasks.py +847 -0
  52. dulus-3.3.4/dulus_tools/clipboard_utils.py +166 -0
  53. dulus-3.3.4/dulus_tools/diff_visualizer.py +147 -0
  54. dulus-3.3.4/dulus_tools/export_import.py +206 -0
  55. dulus-3.3.4/dulus_tools/hook_engine.py +379 -0
  56. dulus-3.3.4/dulus_tools/notification_manager.py +344 -0
  57. dulus-3.3.4/dulus_tools/session_fork.py +230 -0
  58. dulus-3.3.4/dulus_tools/shell_mode.py +130 -0
  59. dulus-3.3.4/dulus_tools/todo_visualizer.py +131 -0
  60. dulus-3.3.4/dulus_tools/wire_events.py +208 -0
  61. dulus-3.3.4/dulus_tools/yolo_mode.py +35 -0
  62. dulus-3.3.4/governance.py +277 -0
  63. dulus-3.3.4/gui/__init__.py +45 -0
  64. dulus-3.3.4/gui/main_window.py +1529 -0
  65. dulus-3.3.4/gui/sandbox_server.py +152 -0
  66. {dulus-0.2.60 → dulus-3.3.4}/gui/themes.py +31 -0
  67. {dulus-0.2.60 → dulus-3.3.4}/input.py +66 -9
  68. {dulus-0.2.60 → dulus-3.3.4}/license_manager.py +1 -1
  69. {dulus-0.2.60 → dulus-3.3.4}/offload_helper.py +58 -13
  70. dulus-3.3.4/personality_config.py +353 -0
  71. {dulus-0.2.60 → dulus-3.3.4}/plugin/autoadapter.py +84 -5
  72. {dulus-0.2.60 → dulus-3.3.4}/providers.py +1559 -272
  73. {dulus-0.2.60 → dulus-3.3.4}/pyproject.toml +45 -7
  74. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/index.html +1 -0
  75. dulus-3.3.4/sandbox_bootstrap.py +54 -0
  76. dulus-3.3.4/skill/bundled/LICENSE-obsidian-skills +21 -0
  77. dulus-3.3.4/skill/bundled/README.md +40 -0
  78. dulus-3.3.4/skill/bundled/defuddle/SKILL.md +41 -0
  79. dulus-3.3.4/skill/bundled/json-canvas/SKILL.md +244 -0
  80. dulus-3.3.4/skill/bundled/json-canvas/references/EXAMPLES.md +329 -0
  81. dulus-3.3.4/skill/bundled/obsidian-bases/SKILL.md +497 -0
  82. dulus-3.3.4/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
  83. dulus-3.3.4/skill/bundled/obsidian-cli/SKILL.md +106 -0
  84. dulus-3.3.4/skill/bundled/obsidian-markdown/SKILL.md +198 -0
  85. dulus-3.3.4/skill/bundled/obsidian-markdown/references/CALLOUTS.md +58 -0
  86. dulus-3.3.4/skill/bundled/obsidian-markdown/references/EMBEDS.md +63 -0
  87. dulus-3.3.4/skill/bundled/obsidian-markdown/references/PROPERTIES.md +61 -0
  88. {dulus-0.2.60 → dulus-3.3.4}/skill/clawhub.py +198 -0
  89. {dulus-0.2.60 → dulus-3.3.4}/skill/loader.py +36 -6
  90. dulus-3.3.4/soul.py +450 -0
  91. {dulus-0.2.60 → dulus-3.3.4}/tmux_offloader.py +23 -6
  92. {dulus-0.2.60 → dulus-3.3.4}/tools.py +212 -21
  93. {dulus-0.2.60 → dulus-3.3.4}/voice/audio_utils.py +25 -9
  94. {dulus-0.2.60 → dulus-3.3.4}/voice/recorder.py +8 -1
  95. {dulus-0.2.60 → dulus-3.3.4}/voice/stt.py +56 -25
  96. {dulus-0.2.60 → dulus-3.3.4}/voice/tts.py +93 -1
  97. {dulus-0.2.60 → dulus-3.3.4}/voice/wake_word.py +171 -136
  98. {dulus-0.2.60 → dulus-3.3.4}/webbridge/__init__.py +5 -5
  99. {dulus-0.2.60 → dulus-3.3.4}/webbridge/core.py +694 -538
  100. dulus-3.3.4/webbridge/tools.py +453 -0
  101. {dulus-0.2.60 → dulus-3.3.4}/webchat_server.py +117 -23
  102. dulus-3.3.4/welcome.py +675 -0
  103. dulus-0.2.60/data/context.json +0 -143
  104. dulus-0.2.60/docs/README.md +0 -510
  105. dulus-0.2.60/docs/api.html +0 -2894
  106. dulus-0.2.60/docs/architecture.md +0 -374
  107. dulus-0.2.60/docs/particle-playground.html +0 -328
  108. dulus-0.2.60/dulus.egg-info/SOURCES.txt +0 -365
  109. dulus-0.2.60/dulus_gui.py +0 -387
  110. dulus-0.2.60/gui/__init__.py +0 -18
  111. dulus-0.2.60/gui/main_window.py +0 -485
  112. dulus-0.2.60/sandbox/public/wallpaper-default.jpg +0 -0
  113. dulus-0.2.60/sandbox/public/wallpapers/default.jpeg +0 -0
  114. dulus-0.2.60/sandbox/public/wallpapers/light.jpeg +0 -0
  115. dulus-0.2.60/sandbox/public/wallpapers/nature.jpeg +0 -0
  116. dulus-0.2.60/sandbox/public/wallpapers/tech.jpeg +0 -0
  117. dulus-0.2.60/sandbox/src/App.tsx +0 -241
  118. dulus-0.2.60/sandbox/src/apps/AgentMonitor.tsx +0 -249
  119. dulus-0.2.60/sandbox/src/apps/ApiTester.tsx +0 -479
  120. dulus-0.2.60/sandbox/src/apps/AppRouter.tsx +0 -197
  121. dulus-0.2.60/sandbox/src/apps/ArchiveManager.tsx +0 -360
  122. dulus-0.2.60/sandbox/src/apps/AsciiArt.tsx +0 -393
  123. dulus-0.2.60/sandbox/src/apps/Base64Tool.tsx +0 -364
  124. dulus-0.2.60/sandbox/src/apps/Browser.tsx +0 -568
  125. dulus-0.2.60/sandbox/src/apps/Calculator.tsx +0 -358
  126. dulus-0.2.60/sandbox/src/apps/Calendar.tsx +0 -562
  127. dulus-0.2.60/sandbox/src/apps/Chat.tsx +0 -319
  128. dulus-0.2.60/sandbox/src/apps/Chess.tsx +0 -570
  129. dulus-0.2.60/sandbox/src/apps/Clock.tsx +0 -565
  130. dulus-0.2.60/sandbox/src/apps/CodeEditor.tsx +0 -467
  131. dulus-0.2.60/sandbox/src/apps/ColorPalette.tsx +0 -386
  132. dulus-0.2.60/sandbox/src/apps/ColorPicker.tsx +0 -359
  133. dulus-0.2.60/sandbox/src/apps/Contacts.tsx +0 -238
  134. dulus-0.2.60/sandbox/src/apps/DocumentViewer.tsx +0 -275
  135. dulus-0.2.60/sandbox/src/apps/Drawing.tsx +0 -413
  136. dulus-0.2.60/sandbox/src/apps/Email.tsx +0 -464
  137. dulus-0.2.60/sandbox/src/apps/FileManager.tsx +0 -413
  138. dulus-0.2.60/sandbox/src/apps/FlappyBird.tsx +0 -297
  139. dulus-0.2.60/sandbox/src/apps/FtpClient.tsx +0 -255
  140. dulus-0.2.60/sandbox/src/apps/Game2048.tsx +0 -280
  141. dulus-0.2.60/sandbox/src/apps/GitClient.tsx +0 -378
  142. dulus-0.2.60/sandbox/src/apps/ImageGallery.tsx +0 -276
  143. dulus-0.2.60/sandbox/src/apps/ImageViewer.tsx +0 -272
  144. dulus-0.2.60/sandbox/src/apps/JsonFormatter.tsx +0 -402
  145. dulus-0.2.60/sandbox/src/apps/MarkdownPreview.tsx +0 -293
  146. dulus-0.2.60/sandbox/src/apps/MatrixRain.tsx +0 -253
  147. dulus-0.2.60/sandbox/src/apps/MediaConverter.tsx +0 -253
  148. dulus-0.2.60/sandbox/src/apps/Memory.tsx +0 -269
  149. dulus-0.2.60/sandbox/src/apps/MemoryManager.tsx +0 -263
  150. dulus-0.2.60/sandbox/src/apps/Minesweeper.tsx +0 -346
  151. dulus-0.2.60/sandbox/src/apps/MusicPlayer.tsx +0 -306
  152. dulus-0.2.60/sandbox/src/apps/NetworkTools.tsx +0 -321
  153. dulus-0.2.60/sandbox/src/apps/Notes.tsx +0 -420
  154. dulus-0.2.60/sandbox/src/apps/PasswordManager.tsx +0 -212
  155. dulus-0.2.60/sandbox/src/apps/PhotoEditor.tsx +0 -342
  156. dulus-0.2.60/sandbox/src/apps/Pong.tsx +0 -349
  157. dulus-0.2.60/sandbox/src/apps/RegexTester.tsx +0 -432
  158. dulus-0.2.60/sandbox/src/apps/Reminders.tsx +0 -228
  159. dulus-0.2.60/sandbox/src/apps/RssReader.tsx +0 -245
  160. dulus-0.2.60/sandbox/src/apps/ScreenRecorder.tsx +0 -416
  161. dulus-0.2.60/sandbox/src/apps/Settings.tsx +0 -474
  162. dulus-0.2.60/sandbox/src/apps/SkillsLauncher.tsx +0 -316
  163. dulus-0.2.60/sandbox/src/apps/Snake.tsx +0 -274
  164. dulus-0.2.60/sandbox/src/apps/Solitaire.tsx +0 -445
  165. dulus-0.2.60/sandbox/src/apps/Spreadsheet.tsx +0 -441
  166. dulus-0.2.60/sandbox/src/apps/Sudoku.tsx +0 -386
  167. dulus-0.2.60/sandbox/src/apps/SystemMonitor.tsx +0 -360
  168. dulus-0.2.60/sandbox/src/apps/TaskManager.tsx +0 -392
  169. dulus-0.2.60/sandbox/src/apps/Terminal.tsx +0 -619
  170. dulus-0.2.60/sandbox/src/apps/Tetris.tsx +0 -441
  171. dulus-0.2.60/sandbox/src/apps/TextEditor.tsx +0 -446
  172. dulus-0.2.60/sandbox/src/apps/TicTacToe.tsx +0 -254
  173. dulus-0.2.60/sandbox/src/apps/Todo.tsx +0 -394
  174. dulus-0.2.60/sandbox/src/apps/VideoPlayer.tsx +0 -297
  175. dulus-0.2.60/sandbox/src/apps/VoiceRecorder.tsx +0 -382
  176. dulus-0.2.60/sandbox/src/apps/Weather.tsx +0 -462
  177. dulus-0.2.60/sandbox/src/apps/Whiteboard.tsx +0 -338
  178. dulus-0.2.60/sandbox/src/apps/registry.ts +0 -564
  179. dulus-0.2.60/sandbox/src/components/AppContainer.tsx +0 -26
  180. dulus-0.2.60/sandbox/src/components/AppLauncher.tsx +0 -241
  181. dulus-0.2.60/sandbox/src/components/BootSequence.tsx +0 -236
  182. dulus-0.2.60/sandbox/src/components/ContextMenu.tsx +0 -251
  183. dulus-0.2.60/sandbox/src/components/Desktop.tsx +0 -186
  184. dulus-0.2.60/sandbox/src/components/Dock.tsx +0 -199
  185. dulus-0.2.60/sandbox/src/components/LoginScreen.tsx +0 -302
  186. dulus-0.2.60/sandbox/src/components/NotImplemented.tsx +0 -55
  187. dulus-0.2.60/sandbox/src/components/NotificationCenter.tsx +0 -181
  188. dulus-0.2.60/sandbox/src/components/NotificationSystem.tsx +0 -136
  189. dulus-0.2.60/sandbox/src/components/TopPanel.tsx +0 -334
  190. dulus-0.2.60/sandbox/src/components/WindowFrame.tsx +0 -401
  191. dulus-0.2.60/sandbox/src/components/WindowManager.tsx +0 -25
  192. dulus-0.2.60/sandbox/src/components/ui/accordion.tsx +0 -64
  193. dulus-0.2.60/sandbox/src/components/ui/alert-dialog.tsx +0 -155
  194. dulus-0.2.60/sandbox/src/components/ui/alert.tsx +0 -66
  195. dulus-0.2.60/sandbox/src/components/ui/aspect-ratio.tsx +0 -11
  196. dulus-0.2.60/sandbox/src/components/ui/avatar.tsx +0 -51
  197. dulus-0.2.60/sandbox/src/components/ui/badge.tsx +0 -46
  198. dulus-0.2.60/sandbox/src/components/ui/breadcrumb.tsx +0 -109
  199. dulus-0.2.60/sandbox/src/components/ui/button-group.tsx +0 -83
  200. dulus-0.2.60/sandbox/src/components/ui/button.tsx +0 -62
  201. dulus-0.2.60/sandbox/src/components/ui/calendar.tsx +0 -220
  202. dulus-0.2.60/sandbox/src/components/ui/card.tsx +0 -92
  203. dulus-0.2.60/sandbox/src/components/ui/carousel.tsx +0 -239
  204. dulus-0.2.60/sandbox/src/components/ui/chart.tsx +0 -357
  205. dulus-0.2.60/sandbox/src/components/ui/checkbox.tsx +0 -32
  206. dulus-0.2.60/sandbox/src/components/ui/collapsible.tsx +0 -31
  207. dulus-0.2.60/sandbox/src/components/ui/command.tsx +0 -182
  208. dulus-0.2.60/sandbox/src/components/ui/context-menu.tsx +0 -252
  209. dulus-0.2.60/sandbox/src/components/ui/dialog.tsx +0 -141
  210. dulus-0.2.60/sandbox/src/components/ui/drawer.tsx +0 -135
  211. dulus-0.2.60/sandbox/src/components/ui/dropdown-menu.tsx +0 -255
  212. dulus-0.2.60/sandbox/src/components/ui/empty.tsx +0 -104
  213. dulus-0.2.60/sandbox/src/components/ui/field.tsx +0 -246
  214. dulus-0.2.60/sandbox/src/components/ui/form.tsx +0 -167
  215. dulus-0.2.60/sandbox/src/components/ui/hover-card.tsx +0 -44
  216. dulus-0.2.60/sandbox/src/components/ui/input-group.tsx +0 -170
  217. dulus-0.2.60/sandbox/src/components/ui/input-otp.tsx +0 -75
  218. dulus-0.2.60/sandbox/src/components/ui/input.tsx +0 -21
  219. dulus-0.2.60/sandbox/src/components/ui/item.tsx +0 -193
  220. dulus-0.2.60/sandbox/src/components/ui/kbd.tsx +0 -28
  221. dulus-0.2.60/sandbox/src/components/ui/label.tsx +0 -24
  222. dulus-0.2.60/sandbox/src/components/ui/menubar.tsx +0 -274
  223. dulus-0.2.60/sandbox/src/components/ui/navigation-menu.tsx +0 -168
  224. dulus-0.2.60/sandbox/src/components/ui/pagination.tsx +0 -127
  225. dulus-0.2.60/sandbox/src/components/ui/popover.tsx +0 -48
  226. dulus-0.2.60/sandbox/src/components/ui/progress.tsx +0 -29
  227. dulus-0.2.60/sandbox/src/components/ui/radio-group.tsx +0 -45
  228. dulus-0.2.60/sandbox/src/components/ui/resizable.tsx +0 -54
  229. dulus-0.2.60/sandbox/src/components/ui/scroll-area.tsx +0 -58
  230. dulus-0.2.60/sandbox/src/components/ui/select.tsx +0 -188
  231. dulus-0.2.60/sandbox/src/components/ui/separator.tsx +0 -28
  232. dulus-0.2.60/sandbox/src/components/ui/sheet.tsx +0 -137
  233. dulus-0.2.60/sandbox/src/components/ui/sidebar.tsx +0 -726
  234. dulus-0.2.60/sandbox/src/components/ui/skeleton.tsx +0 -13
  235. dulus-0.2.60/sandbox/src/components/ui/slider.tsx +0 -63
  236. dulus-0.2.60/sandbox/src/components/ui/sonner.tsx +0 -38
  237. dulus-0.2.60/sandbox/src/components/ui/spinner.tsx +0 -16
  238. dulus-0.2.60/sandbox/src/components/ui/switch.tsx +0 -31
  239. dulus-0.2.60/sandbox/src/components/ui/table.tsx +0 -114
  240. dulus-0.2.60/sandbox/src/components/ui/tabs.tsx +0 -66
  241. dulus-0.2.60/sandbox/src/components/ui/textarea.tsx +0 -18
  242. dulus-0.2.60/sandbox/src/components/ui/toggle-group.tsx +0 -81
  243. dulus-0.2.60/sandbox/src/components/ui/toggle.tsx +0 -45
  244. dulus-0.2.60/sandbox/src/components/ui/tooltip.tsx +0 -61
  245. dulus-0.2.60/sandbox/src/hooks/index.ts +0 -30
  246. dulus-0.2.60/sandbox/src/hooks/use-mobile.ts +0 -19
  247. dulus-0.2.60/sandbox/src/hooks/useAutoOpenChat.ts +0 -34
  248. dulus-0.2.60/sandbox/src/hooks/useDulusAgents.ts +0 -51
  249. dulus-0.2.60/sandbox/src/hooks/useDulusChat.ts +0 -73
  250. dulus-0.2.60/sandbox/src/hooks/useDulusEvents.ts +0 -116
  251. dulus-0.2.60/sandbox/src/hooks/useDulusHealth.ts +0 -52
  252. dulus-0.2.60/sandbox/src/hooks/useDulusMemory.ts +0 -78
  253. dulus-0.2.60/sandbox/src/hooks/useDulusSkills.ts +0 -60
  254. dulus-0.2.60/sandbox/src/hooks/useDulusTasks.ts +0 -90
  255. dulus-0.2.60/sandbox/src/hooks/useFileSystem.ts +0 -330
  256. dulus-0.2.60/sandbox/src/hooks/useOSStore.tsx +0 -553
  257. dulus-0.2.60/sandbox/src/hooks/useSkillBridge.ts +0 -72
  258. dulus-0.2.60/sandbox/src/hooks/useSystemBattery.ts +0 -77
  259. dulus-0.2.60/sandbox/src/hooks/useSystemNetwork.ts +0 -56
  260. dulus-0.2.60/sandbox/src/hooks/useSystemVolume.ts +0 -39
  261. dulus-0.2.60/sandbox/src/index.css +0 -169
  262. dulus-0.2.60/sandbox/src/lib/dulus-api.ts +0 -398
  263. dulus-0.2.60/sandbox/src/lib/utils.ts +0 -6
  264. dulus-0.2.60/sandbox/src/main.tsx +0 -5
  265. dulus-0.2.60/sandbox/src/types/index.ts +0 -252
  266. dulus-0.2.60/sandbox/src/utils/assets.ts +0 -15
  267. dulus-0.2.60/webbridge/__pycache__/__init__.cpython-314.pyc +0 -0
  268. dulus-0.2.60/webbridge/__pycache__/core.cpython-314.pyc +0 -0
  269. dulus-0.2.60/webbridge/__pycache__/tools.cpython-314.pyc +0 -0
  270. dulus-0.2.60/webbridge/tools.py +0 -261
  271. {dulus-0.2.60 → dulus-3.3.4}/LICENSE +0 -0
  272. {dulus-0.2.60 → dulus-3.3.4}/backend/__init__.py +0 -0
  273. {dulus-0.2.60 → dulus-3.3.4}/backend/context.py +0 -0
  274. {dulus-0.2.60 → dulus-3.3.4}/backend/githook.py +0 -0
  275. {dulus-0.2.60 → dulus-3.3.4}/backend/marketplace.py +0 -0
  276. {dulus-0.2.60 → dulus-3.3.4}/backend/mempalace_bridge.py +0 -0
  277. {dulus-0.2.60 → dulus-3.3.4}/backend/personas.py +0 -0
  278. {dulus-0.2.60 → dulus-3.3.4}/backend/plugins.py +0 -0
  279. {dulus-0.2.60 → dulus-3.3.4}/backend/server.py +0 -0
  280. {dulus-0.2.60 → dulus-3.3.4}/backend/tasks.py +0 -0
  281. {dulus-0.2.60 → dulus-3.3.4}/checkpoint/__init__.py +0 -0
  282. {dulus-0.2.60 → dulus-3.3.4}/checkpoint/hooks.py +0 -0
  283. {dulus-0.2.60 → dulus-3.3.4}/checkpoint/store.py +0 -0
  284. {dulus-0.2.60 → dulus-3.3.4}/checkpoint/types.py +0 -0
  285. {dulus-0.2.60 → dulus-3.3.4}/claude_code_watcher.py +0 -0
  286. {dulus-0.2.60 → dulus-3.3.4}/clipboard_utils.py +0 -0
  287. {dulus-0.2.60 → dulus-3.3.4}/cloudsave.py +0 -0
  288. {dulus-0.2.60 → dulus-3.3.4}/common.py +0 -0
  289. {dulus-0.2.60 → dulus-3.3.4}/data/__init__.py +0 -0
  290. {dulus-0.2.60 → dulus-3.3.4}/data/active_persona.json +0 -0
  291. {dulus-0.2.60 → dulus-3.3.4}/data/marketplace.json +0 -0
  292. {dulus-0.2.60 → dulus-3.3.4}/data/personas.json +0 -0
  293. {dulus-0.2.60 → dulus-3.3.4}/data/plugins/__init__.py +0 -0
  294. {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/__init__.py +0 -0
  295. {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  296. {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  297. {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/plugin.json +0 -0
  298. {dulus-0.2.60 → dulus-3.3.4}/data/tasks.json +0 -0
  299. {dulus-0.2.60 → dulus-3.3.4}/docs/__init__.py +0 -0
  300. {dulus-0.2.60 → dulus-3.3.4}/docs/azure-speech-template.json +0 -0
  301. {dulus-0.2.60 → dulus-3.3.4}/docs/divider.svg +0 -0
  302. {dulus-0.2.60 → dulus-3.3.4}/docs/generate.py +0 -0
  303. {dulus-0.2.60 → dulus-3.3.4}/docs/nvidia-models.svg +0 -0
  304. {dulus-0.2.60/docs/uploads → dulus-3.3.4/docs}/particle-playground.html +0 -0
  305. {dulus-0.2.60 → dulus-3.3.4}/docs/personas/index.html +0 -0
  306. {dulus-0.2.60 → dulus-3.3.4}/docs/poetry-banner.png +0 -0
  307. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-agents.svg +0 -0
  308. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-brainstorm.svg +0 -0
  309. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-bridges.svg +0 -0
  310. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-features.svg +0 -0
  311. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-freetier.svg +0 -0
  312. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-memory.svg +0 -0
  313. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-models.svg +0 -0
  314. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-perms.svg +0 -0
  315. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-plugins.svg +0 -0
  316. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-quickstart.svg +0 -0
  317. {dulus-0.2.60 → dulus-3.3.4}/docs/sec-ssj.svg +0 -0
  318. {dulus-0.2.60 → dulus-3.3.4}/docs/spinners.svg +0 -0
  319. {dulus-0.2.60 → dulus-3.3.4}/docs/split-pane.svg +0 -0
  320. {dulus-0.2.60 → dulus-3.3.4}/docs/terminal-boot.svg +0 -0
  321. {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/dependency_links.txt +0 -0
  322. {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/entry_points.txt +0 -0
  323. {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/__init__.py +0 -0
  324. {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/client.py +0 -0
  325. {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/config.py +0 -0
  326. {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/tools.py +0 -0
  327. {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/types.py +0 -0
  328. {dulus-0.2.60 → dulus-3.3.4}/gui/agent_bridge.py +0 -0
  329. {dulus-0.2.60 → dulus-3.3.4}/gui/chat_widget.py +0 -0
  330. {dulus-0.2.60 → dulus-3.3.4}/gui/personas.py +0 -0
  331. {dulus-0.2.60 → dulus-3.3.4}/gui/session_utils.py +0 -0
  332. {dulus-0.2.60 → dulus-3.3.4}/gui/settings_dialog.py +0 -0
  333. {dulus-0.2.60 → dulus-3.3.4}/gui/sidebar.py +0 -0
  334. {dulus-0.2.60 → dulus-3.3.4}/gui/tasks_view.py +0 -0
  335. {dulus-0.2.60 → dulus-3.3.4}/gui/tool_panel.py +0 -0
  336. {dulus-0.2.60 → dulus-3.3.4}/memory/__init__.py +0 -0
  337. {dulus-0.2.60 → dulus-3.3.4}/memory/audit.py +0 -0
  338. {dulus-0.2.60 → dulus-3.3.4}/memory/consolidator.py +0 -0
  339. {dulus-0.2.60 → dulus-3.3.4}/memory/context.py +0 -0
  340. {dulus-0.2.60 → dulus-3.3.4}/memory/offload.py +0 -0
  341. {dulus-0.2.60 → dulus-3.3.4}/memory/palace.py +0 -0
  342. {dulus-0.2.60 → dulus-3.3.4}/memory/scan.py +0 -0
  343. {dulus-0.2.60 → dulus-3.3.4}/memory/sessions.py +0 -0
  344. {dulus-0.2.60 → dulus-3.3.4}/memory/store.py +0 -0
  345. {dulus-0.2.60 → dulus-3.3.4}/memory/tools.py +0 -0
  346. {dulus-0.2.60 → dulus-3.3.4}/memory/types.py +0 -0
  347. {dulus-0.2.60 → dulus-3.3.4}/memory/vector_search.py +0 -0
  348. {dulus-0.2.60 → dulus-3.3.4}/multi_agent/__init__.py +0 -0
  349. {dulus-0.2.60 → dulus-3.3.4}/multi_agent/subagent.py +0 -0
  350. {dulus-0.2.60 → dulus-3.3.4}/multi_agent/tools.py +0 -0
  351. {dulus-0.2.60 → dulus-3.3.4}/plugin/__init__.py +0 -0
  352. {dulus-0.2.60 → dulus-3.3.4}/plugin/loader.py +0 -0
  353. {dulus-0.2.60 → dulus-3.3.4}/plugin/recommend.py +0 -0
  354. {dulus-0.2.60 → dulus-3.3.4}/plugin/store.py +0 -0
  355. {dulus-0.2.60 → dulus-3.3.4}/plugin/types.py +0 -0
  356. {dulus-0.2.60 → dulus-3.3.4}/sandbox/README.md +0 -0
  357. {dulus-0.2.60 → dulus-3.3.4}/sandbox/__init__.py +0 -0
  358. {dulus-0.2.60 → dulus-3.3.4}/sandbox/components.json +0 -0
  359. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
  360. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
  361. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpaper-default.jpg +0 -0
  362. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/default.jpeg +0 -0
  363. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/light.jpeg +0 -0
  364. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  365. {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  366. {dulus-0.2.60 → dulus-3.3.4}/sandbox/eslint.config.js +0 -0
  367. {dulus-0.2.60 → dulus-3.3.4}/sandbox/index.html +0 -0
  368. {dulus-0.2.60 → dulus-3.3.4}/sandbox/info.md +0 -0
  369. {dulus-0.2.60 → dulus-3.3.4}/sandbox/package-lock.json +0 -0
  370. {dulus-0.2.60 → dulus-3.3.4}/sandbox/package.json +0 -0
  371. {dulus-0.2.60 → dulus-3.3.4}/sandbox/postcss.config.js +0 -0
  372. {dulus-0.2.60 → dulus-3.3.4}/sandbox/tailwind.config.js +0 -0
  373. {dulus-0.2.60 → dulus-3.3.4}/sandbox/tsconfig.app.json +0 -0
  374. {dulus-0.2.60 → dulus-3.3.4}/sandbox/tsconfig.json +0 -0
  375. {dulus-0.2.60 → dulus-3.3.4}/sandbox/tsconfig.node.json +0 -0
  376. {dulus-0.2.60 → dulus-3.3.4}/sandbox/vite.config.ts +0 -0
  377. {dulus-0.2.60 → dulus-3.3.4}/setup.cfg +0 -0
  378. {dulus-0.2.60 → dulus-3.3.4}/skill/__init__.py +0 -0
  379. {dulus-0.2.60 → dulus-3.3.4}/skill/builtin.py +0 -0
  380. {dulus-0.2.60 → dulus-3.3.4}/skill/executor.py +0 -0
  381. {dulus-0.2.60 → dulus-3.3.4}/skill/tools.py +0 -0
  382. {dulus-0.2.60 → dulus-3.3.4}/skills.py +0 -0
  383. {dulus-0.2.60 → dulus-3.3.4}/spinner.py +0 -0
  384. {dulus-0.2.60 → dulus-3.3.4}/string_utils.py +0 -0
  385. {dulus-0.2.60 → dulus-3.3.4}/subagent.py +0 -0
  386. {dulus-0.2.60 → dulus-3.3.4}/task/__init__.py +0 -0
  387. {dulus-0.2.60 → dulus-3.3.4}/task/store.py +0 -0
  388. {dulus-0.2.60 → dulus-3.3.4}/task/tools.py +0 -0
  389. {dulus-0.2.60 → dulus-3.3.4}/task/types.py +0 -0
  390. {dulus-0.2.60 → dulus-3.3.4}/tests/test_afk_yolo.py +0 -0
  391. {dulus-0.2.60 → dulus-3.3.4}/tests/test_approval_runtime.py +0 -0
  392. {dulus-0.2.60 → dulus-3.3.4}/tests/test_background_task_tools.py +0 -0
  393. {dulus-0.2.60 → dulus-3.3.4}/tests/test_background_tasks.py +0 -0
  394. {dulus-0.2.60 → dulus-3.3.4}/tests/test_checkpoint.py +0 -0
  395. {dulus-0.2.60 → dulus-3.3.4}/tests/test_clipboard_utils.py +0 -0
  396. {dulus-0.2.60 → dulus-3.3.4}/tests/test_compaction.py +0 -0
  397. {dulus-0.2.60 → dulus-3.3.4}/tests/test_diff_view.py +0 -0
  398. {dulus-0.2.60 → dulus-3.3.4}/tests/test_diff_visualization.py +0 -0
  399. {dulus-0.2.60 → dulus-3.3.4}/tests/test_display_blocks.py +0 -0
  400. {dulus-0.2.60 → dulus-3.3.4}/tests/test_export_import.py +0 -0
  401. {dulus-0.2.60 → dulus-3.3.4}/tests/test_hook_engine.py +0 -0
  402. {dulus-0.2.60 → dulus-3.3.4}/tests/test_injection_fix.py +0 -0
  403. {dulus-0.2.60 → dulus-3.3.4}/tests/test_license.py +0 -0
  404. {dulus-0.2.60 → dulus-3.3.4}/tests/test_mcp.py +0 -0
  405. {dulus-0.2.60 → dulus-3.3.4}/tests/test_memory.py +0 -0
  406. {dulus-0.2.60 → dulus-3.3.4}/tests/test_notification_manager.py +0 -0
  407. {dulus-0.2.60 → dulus-3.3.4}/tests/test_plugin.py +0 -0
  408. {dulus-0.2.60 → dulus-3.3.4}/tests/test_session_fork.py +0 -0
  409. {dulus-0.2.60 → dulus-3.3.4}/tests/test_shell_mode.py +0 -0
  410. {dulus-0.2.60 → dulus-3.3.4}/tests/test_skills.py +0 -0
  411. {dulus-0.2.60 → dulus-3.3.4}/tests/test_steer_input.py +0 -0
  412. {dulus-0.2.60 → dulus-3.3.4}/tests/test_subagent.py +0 -0
  413. {dulus-0.2.60 → dulus-3.3.4}/tests/test_task.py +0 -0
  414. {dulus-0.2.60 → dulus-3.3.4}/tests/test_telegram_buffer.py +0 -0
  415. {dulus-0.2.60 → dulus-3.3.4}/tests/test_think_tool.py +0 -0
  416. {dulus-0.2.60 → dulus-3.3.4}/tests/test_todo_tool.py +0 -0
  417. {dulus-0.2.60 → dulus-3.3.4}/tests/test_todo_visualization.py +0 -0
  418. {dulus-0.2.60 → dulus-3.3.4}/tests/test_tool_registry.py +0 -0
  419. {dulus-0.2.60 → dulus-3.3.4}/tests/test_voice.py +0 -0
  420. {dulus-0.2.60 → dulus-3.3.4}/tests/test_wire_events.py +0 -0
  421. {dulus-0.2.60 → dulus-3.3.4}/tmux_tools.py +0 -0
  422. {dulus-0.2.60 → dulus-3.3.4}/tool_registry.py +0 -0
  423. {dulus-0.2.60 → dulus-3.3.4}/ui/__init__.py +0 -0
  424. {dulus-0.2.60 → dulus-3.3.4}/ui/input.py +0 -0
  425. {dulus-0.2.60 → dulus-3.3.4}/ui/render.py +0 -0
  426. {dulus-0.2.60 → dulus-3.3.4}/voice/__init__.py +0 -0
  427. {dulus-0.2.60 → dulus-3.3.4}/voice/keyterms.py +0 -0
  428. {dulus-0.2.60 → dulus-3.3.4}/webchat.py +0 -0
@@ -1,4 +1,7 @@
1
+ include pyproject.toml
1
2
  recursive-include docs *
2
3
  recursive-include data *
3
4
  recursive-include sandbox/dist *
4
5
  recursive-include webbridge *
6
+ global-exclude __pycache__/*
7
+ global-exclude *.pyc
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 0.2.60
4
- Summary: Spanish-first multi-provider AI CLI14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace
3
+ Version: 3.3.4
4
+ Summary: Use IA as an agent without an API key. $0. Harvest your browser session for Gemini (guest, no login), Claude.ai, Claude Code, Kimi.com, Qwen, DeepSeek drive them like an API, no per-token billing. Plus LiteLLM (100+ paid providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, voice, OCR, MemPalace, embedded sandbox OS.
5
5
  Author: KevRojo
6
6
  License: GPL-3.0
7
7
  Project-URL: Homepage, https://github.com/KevRojo/Dulus
@@ -36,28 +36,47 @@ Requires-Dist: Pillow>=10.0.0
36
36
  Requires-Dist: typing-extensions>=4.10.0
37
37
  Requires-Dist: composio>=1.0.0rc2
38
38
  Requires-Dist: beautifulsoup4>=4.12.0
39
+ Requires-Dist: sentry-sdk>=2.0.0
40
+ Requires-Dist: pytesseract>=0.3.10
39
41
  Provides-Extra: memory
40
42
  Requires-Dist: mempalace>=3.3.4; extra == "memory"
41
43
  Provides-Extra: voice
42
44
  Requires-Dist: sounddevice; extra == "voice"
45
+ Requires-Dist: elevenlabs>=1.0.0; extra == "voice"
43
46
  Provides-Extra: webbridge
44
47
  Requires-Dist: playwright>=1.40.0; extra == "webbridge"
48
+ Provides-Extra: litellm
49
+ Requires-Dist: litellm>=1.50.0; extra == "litellm"
50
+ Provides-Extra: ocr
51
+ Requires-Dist: pytesseract>=0.3.10; extra == "ocr"
52
+ Requires-Dist: Pillow>=10.0.0; extra == "ocr"
53
+ Provides-Extra: ocr-deep
54
+ Requires-Dist: pytesseract>=0.3.10; extra == "ocr-deep"
55
+ Requires-Dist: Pillow>=10.0.0; extra == "ocr-deep"
56
+ Requires-Dist: easyocr>=1.7.0; extra == "ocr-deep"
45
57
  Provides-Extra: full
46
58
  Requires-Dist: mempalace>=3.3.4; extra == "full"
47
59
  Requires-Dist: sounddevice; extra == "full"
60
+ Requires-Dist: elevenlabs>=1.0.0; extra == "full"
48
61
  Requires-Dist: playwright>=1.40.0; extra == "full"
62
+ Requires-Dist: litellm>=1.50.0; extra == "full"
63
+ Requires-Dist: pytesseract>=0.3.10; extra == "full"
49
64
  Dynamic: license-file
50
65
 
51
66
  # ▲ DULUS
52
-
53
- > **Hunt. Patch. Ship.** A Python autonomous agent that flies on any model — Claude, GPT, Gemini, DeepSeek, Qwen, Kimi, Zhipu, MiniMax, and local models via Ollama. ~12K lines of readable Python. No build step. No gatekeeping. Just talons.
67
+ >
68
+ > `pip install dulus` press Enter working IA in 30 seconds. Try it.
54
69
 
55
70
  SET /sticky_input ON since the first run for the best experience!
56
71
 
57
72
  <p align="center">
58
- <img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/hero.svg" alt="Dulus" width="100%">
73
+
74
+ <img width="700" height="665" alt="mascot-hero" src="https://github.com/user-attachments/assets/8b122834-552c-4bd4-b46d-3e17deb74ab5" />
75
+
59
76
  </p>
60
77
 
78
+ <p align="center"><i>The Dulus (Cigua Palmera) — Dominican national bird. Named after the bird, not the rocket.</i></p>
79
+
61
80
  <p align="center">
62
81
  <a href="#quick-start"><b>Quick Start</b></a> ·
63
82
  <a href="#models"><b>Models</b></a> ·
@@ -72,12 +91,31 @@ SET /sticky_input ON since the first run for the best experience!
72
91
  <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
73
92
  <img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
74
93
  <img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
75
- <img src="https://img.shields.io/badge/version-v0.2.52-ff6b1f?style=flat-square&labelColor=07070a" alt="version"/>
76
- <img src="https://img.shields.io/badge/providers-11-ff6b1f?style=flat-square&labelColor=07070a" alt="providers"/>
77
- <img src="https://img.shields.io/badge/tools-27-ff6b1f?style=flat-square&labelColor=07070a" alt="tools"/>
94
+ <img src="https://img.shields.io/badge/version-v3.3.3-ff6b1f?style=flat-square&labelColor=07070a" alt="version"/>
95
+ <img src="https://img.shields.io/badge/providers-100%2B%20via%20LiteLLM-ff6b1f?style=flat-square&labelColor=07070a" alt="providers"/>
96
+ <img src="https://img.shields.io/badge/tools-30%2B-ff6b1f?style=flat-square&labelColor=07070a" alt="tools"/>
78
97
  <img src="https://img.shields.io/badge/tests-263+-ff6b1f?style=flat-square&labelColor=07070a" alt="tests"/>
98
+ <a href="https://x.com/KevRojo"><img src="https://img.shields.io/badge/x-%40KevRojo-ff6b1f?style=flat-square&labelColor=07070a&logo=x" alt="x"/></a>
79
99
  </p>
80
100
 
101
+ <p align="center">
102
+ 🌐 <b>Multilingual</b> ·
103
+ <a href="docs/README_EN.md">English</a> ·
104
+ <a href="docs/README_ES.md">Español</a> ·
105
+ <a href="docs/README_FR.md">Français</a> ·
106
+ <a href="docs/README_ZH.md">中文</a> ·
107
+ <a href="docs/README_JA.md">日本語</a> ·
108
+ <a href="docs/README_KO.md">한국어</a> ·
109
+ <a href="docs/README_PT.md">Português</a> ·
110
+ <a href="docs/README_RU.md">Русский</a> ·
111
+ <a href="docs/README_AR.md">العربية</a>
112
+ </p>
113
+
114
+ > **Official X / creator handle:** [@KevRojo](https://x.com/KevRojo) — that's me, the only contributor to this repo. Any other account claiming to be Dulus is a copycat.
115
+ >
116
+ > **$DULUS AI token Solana):** [`9R8rrjXxcfQPmLTCLhmVpjr2uesjjkcgkinE6Lwdpump`](https://dexscreener.com/solana/9R8rrjXxcfQPmLTCLhmVpjr2uesjjkcgkinE6Lwdpump)
117
+
118
+ -----
81
119
  <p align="center">
82
120
  <code>pip install dulus</code>
83
121
  </p>
@@ -85,26 +123,33 @@ SET /sticky_input ON since the first run for the best experience!
85
123
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
86
124
 
87
125
  <p align="center">
88
- <a href="https://kevrojo.github.io/Dulus/"><b>🌐 Visit the Dulus website →</b></a><br>
126
+ <a href="https://dulus.ai/"><b>🌐 Visit the Dulus website →</b></a><br>
89
127
  <sub>The site covers features, demos, and details not documented in this README.</sub>
90
128
  </p>
91
129
 
92
130
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
93
131
 
94
- ## What is this
95
- Talent cant be copied.
132
+ ## 🔥 What's new
96
133
 
97
- Dulus Reduce your IA costs by 60% parsing webchats and claude-code directly. Write poetry while Anthropic only see text.
98
- Use claude-code as an API without the new 'extra-usage' wall <3
134
+ > Full changelog: [`docs/news.md`](docs/news.md) · Inside the REPL: `/news`
99
135
 
100
- <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/poetry-banner.png" alt="Anthropic only sees text while you and Claude are writing poetry" width="100%"></p>
136
+ - **Dulus Agent — Telegram communities.** Dulus evolved from a CLI tool into a live AI agent inside Telegram groups. The first fully autonomous AI moderating and conversing in real communities — not a bot, not a filter, a real agent. Groups pay in $DULUS to activate him. We host Dulus for them — that's the business model. The CLI stays free forever. This is the paid layer. 🦅🇩🇴
101
137
 
102
- <img width="1240" height="882" alt="image" src="https://github.com/user-attachments/assets/27dd76bc-8919-4bb9-b3c3-38ae7d92e482" />
138
+ - **v0.2.93 IA WITHOUT AN API KEY, FIRST-RUN.** 🦅 The welcome wizard now offers, by default, to open Gemini in a browser and capture its **guest session** — no Google login, no API key, no credit card. From `pip install` to working IA in 30 seconds. Same flow works for Claude.ai / Kimi.com / Qwen / DeepSeek if you have those accounts. This was Dulus's ace under the sleeve. Now it's the front door.
139
+ - **v0.2.92** — **`/lang` command.** 34 ISO codes + free-form descriptors. `/lang zh`, `/lang ja`, `/lang pt-br`, `/lang "speak as my gym tutor"`, `/lang "tigre de calle dominicano"`, `/lang "Yoda"`. The model role-plays the voice across the whole session. Triggered after Doubao (China's biggest IA assistant) started referring traffic to the repo.
140
+ - **v0.2.91** — **CORS on the daemon.** The Android Sandbox APK now connects every app live — same daemon, finally cross-origin reachable.
141
+ - **v0.2.89** — **Sandbox embedded INSIDE the desktop GUI.** Click `🦅 Sandbox` in the GUI Web tab → the Dulus OS renders inside the content frame via pywebview subprocess + Win32 `SetParent` reparent. Not a popup. Inside the frame.
142
+ - **v0.2.89** — **Local OCR shipped first-class.** `/ocr` + `ExtractTextFromImage` tool, `WebBridgeScreenshot` auto-OCRs, `/img` sends image + verbatim OCR text together. Zero vision-model tokens for receipts / code screenshots / error stacks.
143
+ - **v0.2.89** — **`kepano/obsidian-skills` bundled.** Dulus writes Obsidian-flavored markdown by default. Open `~/.dulus/memory/` as an Obsidian vault → instant graph view.
144
+ - **v0.2.88** — **LiteLLM gateway: one provider entry, 100+ backends.** OpenRouter, Groq, Together, Bedrock, Vertex, Cohere, Perplexity, xAI, Mistral, Fireworks, Anyscale, Replicate, Azure, DeepInfra — the welcome wizard auto-installs the package and asks for the right per-backend key.
145
+ - **v0.2.85** — **Slim wheel 11.4 MB → 2.5 MB.** Smaller than the original baseline.
103
146
 
147
+ <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
104
148
 
105
- <p align="center">
106
- <sub>⚡ <b>Saves you Claude tokens?</b> Throw a sat — BTC: <code>1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN</code></sub>
107
- </p>
149
+ ## What is this
150
+
151
+ Dulus Reduce your IA costs by 60% parsing webchats and claude-code directly. Write poetry while Anthropic only see text.
152
+ Use claude-code as an API without the new 'extra-usage' wall <3
108
153
 
109
154
 
110
155
  Another reminder of a Dulus magic spell:
@@ -117,53 +162,79 @@ them:
117
162
 
118
163
  dulus get the prices of NVDA, TSLA, SP500:
119
164
 
120
- <img width="2094" height="1365" alt="image" src="https://github.com/user-attachments/assets/1551d651-9d69-4607-bac0-4adbde645783" />
121
-
122
165
  Be creative!!!
123
166
 
124
167
  Dulus adapt any python repository <3
168
+ ---
125
169
 
126
- <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
170
+ <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/sec-quickstart.svg" alt="Quick Start" width="100%"></p>
127
171
 
172
+ ## Quick Start
128
173
 
129
- Dulus is a **lightweight Python reimplementation of Claude Code** that isn't locked to Claude. It ships the whole loop REPL, tool dispatch, streaming, context compaction, checkpoints, sub-agents, voice, Telegram bridge, MCP, plugins — in roughly **12K lines you can actually read**. Fork it. Bend it. Run it offline against Qwen on your M2.
174
+ ### Option AOne-liner installer (recommended)
130
175
 
131
- > **v0.2.52 May 12, 2026** Session system overhaul: removed 50-session scan limit, metadata now includes message counts, eliminated daily prune from save path. **Recommendation:** wipe old sessions and start clean — only sessions, your memories stay intact.
132
- > **v0.2.22 — May 9, 2026** — `/bg start` spawns one detached Dulus daemon that serves CLI (IPC), Web (browser at `127.0.0.1:5000`), and Telegram simultaneously — all sharing the same session. WebChat now defaults to **loopback-only** (opt-in to LAN exposure with `/webchat lan on`).
133
- > **v0.2.21 — May 9, 2026** — Console-freeze fix: system prompt now tells the model SleepTimer is for user reminders only — pauses inside command pipelines must use `sleep N` inside the Bash command itself.
134
- > **v0.2.20 — May 9, 2026** — Windows IPC port-collision fix: switched to `SO_EXCLUSIVEADDRUSE` so a second Dulus instance correctly cedes the port and acts as client. End-to-end tested.
135
- > **v0.2.19 — May 9, 2026** — Shared sessions via tiny TCP socket on `127.0.0.1:5151`. `dulus "do X"` from any shell forwards into the running REPL/daemon — same history, memory, plugins. 80 lines of plain socket code instead of a daemon manager + IPC framework.
136
- > **v0.2.18 — May 9, 2026** — `beautifulsoup4` added as default dep for web scraping flows.
137
- > **v0.2.17 — May 9, 2026** — Mega-release: Composio plugin bundled (1000+ apps, no MCP), `/skill list` interactive picker (awesome / composio / local), awesome skills live from GitHub (no Claude Code needed), lite mode finally functional, system prompt rewritten in English, `VERSION` auto-syncs from pyproject.
138
- > **v0.2.16 — May 9, 2026** — MemPalace per-session dedup. No more re-injecting the same memory every turn — content-hash cache saves ~8K tokens in a 20-turn conversation. `/mem_palace reset` clears it on demand.
139
- > **v0.2.15 — May 9, 2026** — Banner image hosted locally so PyPI renders it correctly.
140
- > **v0.2.14 — May 9, 2026** — Multi-user Telegram bridge: `telegram_chat_ids: "123,456,,"` supported. Replies route to the user who sent each message.
141
- > **v0.2.13 — May 8, 2026** — Internal robustness fixes for Ollama streaming.
142
- > Type `/news` to see the full changelog.
176
+ **Linux / macOS / WSL / Termux:**
143
177
 
144
- ---
178
+ ```bash
179
+ curl -fsSL https://raw.githubusercontent.com/KevRojo/Dulus/main/install.sh | bash
180
+ ```
145
181
 
146
- <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/sec-quickstart.svg" alt="Quick Start" width="100%"></p>
182
+ **Windows (PowerShell):**
147
183
 
148
- ## Quick Start
184
+ ```powershell
185
+ irm https://raw.githubusercontent.com/KevRojo/Dulus/main/install.ps1 | iex
186
+ ```
149
187
 
150
- <img alt="image" src="https://github.com/user-attachments/assets/a5a447c6-2cce-42a5-87f8-7c3bc8367987" />
188
+ The installer detects your OS, package manager, Python version, and WSLg
189
+ audio bridge, then asks which profile you want:
151
190
 
191
+ - **`full`** — everything: voice (Whisper + PortAudio), browser tools
192
+ (Playwright), MemPalace semantic memory, tmux, WSL audio bridge
193
+ (~1.5 GB).
194
+ - **`standard`** — REPL + webchat + tmux daemon + Telegram bridge
195
+ (~300 MB).
196
+ - **`basic`** — bare `pip install dulus` for servers / minimal sandboxes
197
+ (~150 MB).
198
+ - **`custom`** — toggle each feature one by one.
152
199
 
153
- <img alt="image" src="https://github.com/user-attachments/assets/72526ae1-b69f-4529-adc7-eef1cd3876c8" />
200
+ It installs only what's missing and never silently runs `sudo` — you
201
+ choose between auto-install, "show me the command", or skip.
154
202
 
155
- <img alt="image" src="https://github.com/user-attachments/assets/eb11cb86-2f53-4979-b7bf-5bd1f97ed5fc" />
203
+ Power-user flags:
156
204
 
157
- <img alt="image" src="https://github.com/user-attachments/assets/986ae7b5-5400-48aa-80eb-cdfd7dbb706e" />
205
+ ```bash
206
+ # Preview without changing anything
207
+ curl -fsSL .../install.sh | bash -s -- --dry-run
158
208
 
209
+ # Non-interactive install (CI / scripts)
210
+ curl -fsSL .../install.sh | bash -s -- --profile=full --pipx
159
211
 
160
- ROUND TABLE (DULUS UNIQUE FEATURE)
212
+ # Latest pre-release
213
+ curl -fsSL .../install.sh | bash -s -- --pre
214
+ ```
161
215
 
162
- <img alt="image" src="https://github.com/user-attachments/assets/9e8f17ed-6ca2-4ae0-b8c3-146ae5fef491" />
216
+ ```powershell
217
+ # PowerShell equivalents
218
+ irm .../install.ps1 | iex
219
+ $env:DULUS_PROFILE='standard'; irm .../install.ps1 | iex # preset via env
220
+ .\install.ps1 -DryRun -Profile full # local run
221
+ ```
163
222
 
164
- Dulus is the first one meeting multiple models at the same time working for the same objective and sharing their ideas.
223
+ ### Option B Docker (zero local Python setup)
165
224
 
225
+ ```bash
226
+ # 1. Grab the compose file + env template
227
+ curl -fsSLO https://raw.githubusercontent.com/KevRojo/Dulus/main/docker-compose.yml
228
+ curl -fsSLO https://raw.githubusercontent.com/KevRojo/Dulus/main/.env.example
229
+ mv .env.example .env # then add your API keys
230
+
231
+ # 2. Pull and run (WebChat at http://localhost:5050 — shifted off 5000
232
+ # so it doesn't collide with a native Dulus install on the same host)
233
+ docker compose up -d
166
234
 
235
+ # 3. Or jump into the REPL inside the container
236
+ docker compose exec dulus dulus
237
+ ```
167
238
 
168
239
  ### One-liner
169
240
 
@@ -174,12 +245,7 @@ pip install "dulus[memory]" && dulus # +MemPalace per-turn memory (pulls chro
174
245
 
175
246
  That's it. Dulus prompts you for a key on first run. The `[memory]` extra pulls in `mempalace` and its `chromadb` chain — skip it on Android/termux or anywhere wheels for `numpy`/`onnxruntime` aren't available; the CLI still boots and chats fine without it.
176
247
 
177
- Thanks for all the love on PyPi, the launch on PyPi was on 05-05-2026
178
- -----
179
-
180
- <img width="2593" height="1044" alt="image" src="https://github.com/user-attachments/assets/114b9ab1-e49f-490a-97b8-872f70b859bd" />
181
-
182
- -----
248
+ ---
183
249
 
184
250
  ### From source (hacking on Dulus itself)
185
251
 
@@ -227,8 +293,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
227
293
 
228
294
  ---
229
295
 
230
- <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/terminal-boot.svg" alt="Dulus booting into session" width="100%"></p>
231
-
232
296
  <p align="center"><sub>↑ session boot. soul loaded, gold memory warm, shell sniffed. the little circles are real buttons on your Mac.</sub></p>
233
297
 
234
298
  ### 💻 Dulus OS (Sandbox)
@@ -237,12 +301,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
237
301
 
238
302
  <img width="1309" height="778" alt="image" src="https://github.com/user-attachments/assets/1c627990-7f87-489b-a0a2-14ad62fe2bb8" />
239
303
 
240
- ---
241
- <img width="1608" height="1903" alt="image" src="https://github.com/user-attachments/assets/450defa2-437b-470d-891a-9285d9e5e312" />
242
-
243
- ---
244
- <img width="3763" height="1975" alt="image" src="https://github.com/user-attachments/assets/10752aa2-6837-4097-a9a8-e02938992174" />
245
-
246
304
  ---
247
305
  The dulus sandbox is an early feature, expect bugs
248
306
 
@@ -330,31 +388,33 @@ dulus --model nvidia-web/deepseek-r1
330
388
 
331
389
  | Model | Type | ID |
332
390
  |---|---|---|
333
- | **DeepSeek R1** | Reasoning | `nvidia-web/deepseek-r1` |
334
- | **DeepSeek V3** | Instruct | `nvidia-web/deepseek-v3` |
335
- | **Kimi K2.5** | Long context | `nvidia-web/kimi-k2.5` |
336
- | **GLM-4** | Zhipu AI | `nvidia-web/glm-4` |
337
- | **MiniMax Text-01** | Text + Vision | `nvidia-web/minimax-text-01` |
338
- | **Mistral Nemotron** | NVIDIA-tuned | `nvidia-web/mistral-nemotron` |
339
- | **Mistral Large** | Instruct | `nvidia-web/mistral-large` |
340
- | **Llama 3.3 70B** | Meta | `nvidia-web/llama-3.3-70b` |
341
- | **Llama 3.1 405B** | Meta · flagship | `nvidia-web/llama-3.1-405b` |
342
- | **Llama Nemotron** | NVIDIA reasoning | `nvidia-web/llama-nemotron` |
343
- | **Qwen2.5 Coder** | Alibaba | `nvidia-web/qwen2.5-coder` |
344
- | **Qwen3 235B A22B** | MoE · Alibaba | `nvidia-web/qwen3-235b-a22b` |
345
- | **Phi-4** | Microsoft | `nvidia-web/phi-4` |
346
- | **Gemma 3 27B** | Google | `nvidia-web/gemma-3-27b` |
347
-
348
- **Automatic fallback.** Configure the chain in `~/.dulus/config.json`:
391
+ | **DeepSeek V4 Flash** | Instruct | `nvidia-web/deepseek-ai/deepseek-v4-flash` |
392
+ | **GLM-4.7** | Zhipu AI | `nvidia-web/z-ai/glm-4.7` |
393
+ | **GLM-5.1** | Zhipu AI | `nvidia-web/z-ai/glm-5.1` |
394
+ | **MiniMax M2.7** | Text + Vision | `nvidia-web/minimaxai/minimax-m2.7` |
395
+ | **Kimi K2 Instruct** | Long context | `nvidia-web/moonshotai/kimi-k2-instruct` |
396
+ | **Mistral Nemotron** | NVIDIA-tuned | `nvidia-web/mistralai/mistral-nemotron` |
397
+ | **Seed OSS 36B** | ByteDance | `nvidia-web/bytedance/seed-oss-36b-instruct` |
398
+ | **Solar 10.7B** | Upstage | `nvidia-web/upstage/solar-10.7b-instruct` |
399
+ | **Step 3.5 Flash** | StepFun | `nvidia-web/stepfun-ai/step-3.5-flash` |
400
+ | **Llama 3.3 70B** | Meta | `nvidia-web/meta/llama-3.3-70b-instruct` |
401
+ | **Kimi K2.5** | Long context | `nvidia-web/moonshotai/kimi-k2.5` |
402
+ | **DeepSeek R1** | Reasoning | `nvidia-web/deepseek-ai/deepseek-r1` |
403
+ | **Llama Nemotron 70B** | NVIDIA reasoning | `nvidia-web/nvidia/llama-3.1-nemotron-70b-instruct` |
404
+ | **Qwen2.5 72B** | Alibaba | `nvidia-web/qwen/qwen2.5-72b-instruct` |
405
+
406
+ **Automatic fallback** when a model hits its rate limit Dulus switches to the next one automatically. The default chain is built-in; override it in `~/.dulus/nvidia-providers.json`:
349
407
 
350
408
  ```json
351
409
  {
352
- "nvidia_fallback_chain": [
353
- "deepseek-r1",
354
- "kimi-k2.5",
355
- "llama-3.3-70b",
356
- "mistral-nemotron",
357
- "phi-4"
410
+ "fallback_models": [
411
+ "deepseek-ai/deepseek-v4-flash",
412
+ "moonshotai/kimi-k2-instruct",
413
+ "mistralai/mistral-nemotron",
414
+ "meta/llama-3.3-70b-instruct",
415
+ "deepseek-ai/deepseek-r1",
416
+ "nvidia/llama-3.1-nemotron-70b-instruct",
417
+ "qwen/qwen2.5-72b-instruct"
358
418
  ]
359
419
  }
360
420
  ```
@@ -381,23 +441,6 @@ Dulus's **Auto-Adapter** reads a random Python repo and figures out its tools on
381
441
 
382
442
  Adapt-and-install runs in under a second. New tools register **live**, no restart.
383
443
 
384
- Example adapting Sherlock repo:
385
-
386
- <img width="1765" height="166" alt="image" src="https://github.com/user-attachments/assets/c67dc15e-a2e3-4575-be34-8c9b54045510" />
387
-
388
- -----
389
-
390
- <img width="1327" height="751" alt="image" src="https://github.com/user-attachments/assets/676a0ef5-3699-4960-98a4-14a55fbef081" />
391
-
392
- -----
393
-
394
- <img width="885" height="301" alt="image" src="https://github.com/user-attachments/assets/52c02444-2606-41dc-bc33-ebe26ac41e5e" />
395
-
396
- ----
397
-
398
- <img width="1006" height="271" alt="image" src="https://github.com/user-attachments/assets/d823428e-6344-4414-bf42-14ed3128f763" />
399
-
400
-
401
444
  ## MCP
402
445
 
403
446
  Drop a `.mcp.json` in your project root (or `~/.dulus/mcp.json` for user-wide):
@@ -463,6 +506,32 @@ pip install sounddevice faster-whisper numpy
463
506
 
464
507
  Then `/voice` in the REPL. Offline. Supports `/voice lang zh` and `/voice device` for mic selection.
465
508
 
509
+ **Linux / WSL extra step:** `sounddevice` is a Python binding for the
510
+ PortAudio C library, which isn't bundled with the wheel. If you see
511
+ `PortAudio library not found` — install the system lib first:
512
+
513
+ ```bash
514
+ sudo apt install libportaudio2 portaudio19-dev libasound2-dev
515
+ pip install sounddevice --upgrade --force-reinstall
516
+ ```
517
+
518
+ Note: `pip install portaudio` will always fail — there is no PyPI
519
+ package by that name, only the apt one above.
520
+
521
+ ### Linux / WSL — tkinter for the GUI / webchat
522
+
523
+ The desktop GUI (`dulus-gui`) needs **tkinter**, which is bundled with
524
+ Python on Windows/macOS but ships as a separate apt package on Debian/
525
+ Ubuntu/WSL. If you see `No module named 'tkinter'`:
526
+
527
+ ```bash
528
+ sudo apt install python3-tk
529
+ ```
530
+
531
+ Headless WSL/server users can skip this — `dulus[full]` works without
532
+ tkinter for the REPL and webchat HTTP server thanks to lazy GUI imports
533
+ (0.2.76+).
534
+
466
535
  ## Telegram bridge
467
536
 
468
537
  ```
@@ -663,6 +732,8 @@ dulus/
663
732
  └── tests/ # 263+ unit tests
664
733
  ```
665
734
 
735
+ > **Interactive dependency graph & API docs:** [`docs/api.html`](docs/api.html) — open it in a browser to explore the full module graph (D3.js, zoom/pan, clusters by package).
736
+
666
737
  ---
667
738
 
668
739
  ## FAQ
@@ -692,6 +763,39 @@ git diff | dulus -p "write a commit message"
692
763
 
693
764
  ---
694
765
 
766
+ ## $DULUS — Token Utility
767
+
768
+ The token isn't decoration. It's the fuel layer for everything Dulus is building.
769
+
770
+ | Phase | Utility |
771
+ |---|---|
772
+ | **Now** | Community ownership. Creator-fee rewards locked on-chain to the builder. Alignment over extraction. |
773
+ | **Business v1** | $DULUS holders get early access + discounted seats on the Dulus Business tier (multi-user workspaces, cloud-hosted instances, shared MemPalace). |
774
+ | **Credits** | Pay for Dulus Business API credits with $DULUS — provider costs, inference minutes, premium model usage. |
775
+ | **Deployments** | Spin up a cloud Dulus instance and pay the hosting with $DULUS. No fiat friction, no middleman. |
776
+ | **Subscriptions** | Monthly Dulus Pro subscription payable in $DULUS. Hold enough → automatic fee discount tier. |
777
+ | **Governance** | Top holders vote on feature priority and plugin marketplace policies. The flock decides. |
778
+
779
+ > The open-source REPL stays free forever. $DULUS is the key to the business layer — not a gate on what already exists.
780
+
781
+ **A message to the community —**
782
+
783
+ I want to talk about the token. Honestly. No hype.
784
+
785
+ I didn't launch it to get rich. The community launched it first, and when I saw early believers exposed without the actual builder behind it, I stepped in. I bought my position using the contract's own creator rewards. Zero personal capital deployed. I haven't sold a single token.
786
+
787
+ The open-source project isn't going anywhere. The REPL, the tools, the free model tier — that stays free forever. But Dulus is growing into a business layer: cloud-hosted instances, multi-user workspaces, model credits, managed deployments. And that business layer is going to run on $DULUS.
788
+
789
+ The token will be how you pay for Pro subscriptions. How you buy inference credits. How you spin up a cloud instance without fiat friction. Holders with enough weight get automatic tier discounts. And eventually — the flock votes: top holders decide feature priority and plugin marketplace policies.
790
+
791
+ This isn't a promise. It's the architecture. That's how I've designed it.
792
+
793
+ We keep flying. 🦅🇩🇴
794
+
795
+ — KevRojo / [@KevRojo](https://x.com/KevRojo)
796
+
797
+ ---
798
+
695
799
  ## License
696
800
 
697
801
  GPLv3. Fork it, modify it, redistribute it — but keep it open. Derivative works must stay under GPLv3. Just don't ship `--accept-all` as the default.
@@ -704,6 +808,7 @@ If Dulus saved you tokens, time, or sanity — throw some sats:
704
808
  ```
705
809
  BTC: 1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN
706
810
  ```
811
+ On x: @KevRojo
707
812
 
708
813
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
709
814