dulus 0.2.56__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 (426) hide show
  1. dulus-3.3.4/MANIFEST.in +7 -0
  2. {dulus-0.2.56 → dulus-3.3.4}/PKG-INFO +205 -97
  3. dulus-0.2.56/dulus.egg-info/PKG-INFO → dulus-3.3.4/README.md +185 -142
  4. {dulus-0.2.56 → dulus-3.3.4}/agent.py +61 -0
  5. {dulus-0.2.56 → dulus-3.3.4}/backend/agents_bridge.py +8 -3
  6. {dulus-0.2.56 → dulus-3.3.4}/backend/compressor.py +1 -1
  7. {dulus-0.2.56 → dulus-3.3.4}/batch_api.py +165 -0
  8. {dulus-0.2.56 → dulus-3.3.4}/compaction.py +280 -40
  9. {dulus-0.2.56 → dulus-3.3.4}/config.py +12 -3
  10. {dulus-0.2.56 → dulus-3.3.4}/context.py +101 -2
  11. {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/composio_plugin/tool_generator.py +2 -2
  12. {dulus-0.2.56 → 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-0.2.56 → dulus-3.3.4/docs}/README.md +223 -46
  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.56 → 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.56 → dulus-3.3.4}/docs/hero.svg +4 -3
  38. {dulus-0.2.56 → dulus-3.3.4}/docs/index.html +1686 -325
  39. {dulus-0.2.56 → dulus-3.3.4}/docs/news.md +40 -0
  40. {dulus-0.2.56 → dulus-3.3.4}/docs/preview.html +1 -1
  41. dulus-3.3.4/dulus.egg-info/PKG-INFO +817 -0
  42. dulus-3.3.4/dulus.egg-info/SOURCES.txt +258 -0
  43. {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/requires.txt +22 -0
  44. {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/top_level.txt +7 -1
  45. {dulus-0.2.56 → dulus-3.3.4}/dulus.py +2196 -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.56 → dulus-3.3.4}/gui/themes.py +31 -0
  67. {dulus-0.2.56 → dulus-3.3.4}/input.py +66 -9
  68. {dulus-0.2.56 → dulus-3.3.4}/license_manager.py +1 -1
  69. {dulus-0.2.56 → dulus-3.3.4}/offload_helper.py +58 -13
  70. dulus-3.3.4/personality_config.py +353 -0
  71. {dulus-0.2.56 → dulus-3.3.4}/plugin/autoadapter.py +84 -5
  72. {dulus-0.2.56 → dulus-3.3.4}/providers.py +1559 -272
  73. {dulus-0.2.56 → dulus-3.3.4}/pyproject.toml +47 -7
  74. {dulus-0.2.56 → 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.56 → dulus-3.3.4}/skill/clawhub.py +198 -0
  89. {dulus-0.2.56 → dulus-3.3.4}/skill/loader.py +36 -6
  90. dulus-3.3.4/soul.py +450 -0
  91. {dulus-0.2.56 → dulus-3.3.4}/tmux_offloader.py +23 -6
  92. {dulus-0.2.56 → dulus-3.3.4}/tools.py +226 -21
  93. {dulus-0.2.56 → dulus-3.3.4}/voice/audio_utils.py +25 -9
  94. {dulus-0.2.56 → dulus-3.3.4}/voice/recorder.py +8 -1
  95. {dulus-0.2.56 → dulus-3.3.4}/voice/stt.py +71 -23
  96. {dulus-0.2.56 → dulus-3.3.4}/voice/tts.py +93 -1
  97. dulus-3.3.4/voice/wake_word.py +429 -0
  98. dulus-3.3.4/webbridge/__init__.py +5 -0
  99. dulus-3.3.4/webbridge/core.py +694 -0
  100. dulus-3.3.4/webbridge/tools.py +453 -0
  101. {dulus-0.2.56 → dulus-3.3.4}/webchat_server.py +117 -23
  102. dulus-3.3.4/welcome.py +675 -0
  103. dulus-0.2.56/MANIFEST.in +0 -3
  104. dulus-0.2.56/data/context.json +0 -147
  105. dulus-0.2.56/docs/README.md +0 -510
  106. dulus-0.2.56/docs/api.html +0 -2894
  107. dulus-0.2.56/docs/architecture.md +0 -374
  108. dulus-0.2.56/docs/particle-playground.html +0 -328
  109. dulus-0.2.56/dulus.egg-info/SOURCES.txt +0 -359
  110. dulus-0.2.56/dulus_gui.py +0 -387
  111. dulus-0.2.56/gui/__init__.py +0 -18
  112. dulus-0.2.56/gui/main_window.py +0 -485
  113. dulus-0.2.56/sandbox/public/wallpaper-default.jpg +0 -0
  114. dulus-0.2.56/sandbox/public/wallpapers/default.jpeg +0 -0
  115. dulus-0.2.56/sandbox/public/wallpapers/light.jpeg +0 -0
  116. dulus-0.2.56/sandbox/public/wallpapers/nature.jpeg +0 -0
  117. dulus-0.2.56/sandbox/public/wallpapers/tech.jpeg +0 -0
  118. dulus-0.2.56/sandbox/src/App.tsx +0 -241
  119. dulus-0.2.56/sandbox/src/apps/AgentMonitor.tsx +0 -249
  120. dulus-0.2.56/sandbox/src/apps/ApiTester.tsx +0 -479
  121. dulus-0.2.56/sandbox/src/apps/AppRouter.tsx +0 -197
  122. dulus-0.2.56/sandbox/src/apps/ArchiveManager.tsx +0 -360
  123. dulus-0.2.56/sandbox/src/apps/AsciiArt.tsx +0 -393
  124. dulus-0.2.56/sandbox/src/apps/Base64Tool.tsx +0 -364
  125. dulus-0.2.56/sandbox/src/apps/Browser.tsx +0 -568
  126. dulus-0.2.56/sandbox/src/apps/Calculator.tsx +0 -358
  127. dulus-0.2.56/sandbox/src/apps/Calendar.tsx +0 -562
  128. dulus-0.2.56/sandbox/src/apps/Chat.tsx +0 -319
  129. dulus-0.2.56/sandbox/src/apps/Chess.tsx +0 -570
  130. dulus-0.2.56/sandbox/src/apps/Clock.tsx +0 -565
  131. dulus-0.2.56/sandbox/src/apps/CodeEditor.tsx +0 -467
  132. dulus-0.2.56/sandbox/src/apps/ColorPalette.tsx +0 -386
  133. dulus-0.2.56/sandbox/src/apps/ColorPicker.tsx +0 -359
  134. dulus-0.2.56/sandbox/src/apps/Contacts.tsx +0 -238
  135. dulus-0.2.56/sandbox/src/apps/DocumentViewer.tsx +0 -275
  136. dulus-0.2.56/sandbox/src/apps/Drawing.tsx +0 -413
  137. dulus-0.2.56/sandbox/src/apps/Email.tsx +0 -464
  138. dulus-0.2.56/sandbox/src/apps/FileManager.tsx +0 -413
  139. dulus-0.2.56/sandbox/src/apps/FlappyBird.tsx +0 -297
  140. dulus-0.2.56/sandbox/src/apps/FtpClient.tsx +0 -255
  141. dulus-0.2.56/sandbox/src/apps/Game2048.tsx +0 -280
  142. dulus-0.2.56/sandbox/src/apps/GitClient.tsx +0 -378
  143. dulus-0.2.56/sandbox/src/apps/ImageGallery.tsx +0 -276
  144. dulus-0.2.56/sandbox/src/apps/ImageViewer.tsx +0 -272
  145. dulus-0.2.56/sandbox/src/apps/JsonFormatter.tsx +0 -402
  146. dulus-0.2.56/sandbox/src/apps/MarkdownPreview.tsx +0 -293
  147. dulus-0.2.56/sandbox/src/apps/MatrixRain.tsx +0 -253
  148. dulus-0.2.56/sandbox/src/apps/MediaConverter.tsx +0 -253
  149. dulus-0.2.56/sandbox/src/apps/Memory.tsx +0 -269
  150. dulus-0.2.56/sandbox/src/apps/MemoryManager.tsx +0 -263
  151. dulus-0.2.56/sandbox/src/apps/Minesweeper.tsx +0 -346
  152. dulus-0.2.56/sandbox/src/apps/MusicPlayer.tsx +0 -306
  153. dulus-0.2.56/sandbox/src/apps/NetworkTools.tsx +0 -321
  154. dulus-0.2.56/sandbox/src/apps/Notes.tsx +0 -420
  155. dulus-0.2.56/sandbox/src/apps/PasswordManager.tsx +0 -212
  156. dulus-0.2.56/sandbox/src/apps/PhotoEditor.tsx +0 -342
  157. dulus-0.2.56/sandbox/src/apps/Pong.tsx +0 -349
  158. dulus-0.2.56/sandbox/src/apps/RegexTester.tsx +0 -432
  159. dulus-0.2.56/sandbox/src/apps/Reminders.tsx +0 -228
  160. dulus-0.2.56/sandbox/src/apps/RssReader.tsx +0 -245
  161. dulus-0.2.56/sandbox/src/apps/ScreenRecorder.tsx +0 -416
  162. dulus-0.2.56/sandbox/src/apps/Settings.tsx +0 -474
  163. dulus-0.2.56/sandbox/src/apps/SkillsLauncher.tsx +0 -316
  164. dulus-0.2.56/sandbox/src/apps/Snake.tsx +0 -274
  165. dulus-0.2.56/sandbox/src/apps/Solitaire.tsx +0 -445
  166. dulus-0.2.56/sandbox/src/apps/Spreadsheet.tsx +0 -441
  167. dulus-0.2.56/sandbox/src/apps/Sudoku.tsx +0 -386
  168. dulus-0.2.56/sandbox/src/apps/SystemMonitor.tsx +0 -360
  169. dulus-0.2.56/sandbox/src/apps/TaskManager.tsx +0 -392
  170. dulus-0.2.56/sandbox/src/apps/Terminal.tsx +0 -619
  171. dulus-0.2.56/sandbox/src/apps/Tetris.tsx +0 -441
  172. dulus-0.2.56/sandbox/src/apps/TextEditor.tsx +0 -446
  173. dulus-0.2.56/sandbox/src/apps/TicTacToe.tsx +0 -254
  174. dulus-0.2.56/sandbox/src/apps/Todo.tsx +0 -394
  175. dulus-0.2.56/sandbox/src/apps/VideoPlayer.tsx +0 -297
  176. dulus-0.2.56/sandbox/src/apps/VoiceRecorder.tsx +0 -382
  177. dulus-0.2.56/sandbox/src/apps/Weather.tsx +0 -462
  178. dulus-0.2.56/sandbox/src/apps/Whiteboard.tsx +0 -338
  179. dulus-0.2.56/sandbox/src/apps/registry.ts +0 -564
  180. dulus-0.2.56/sandbox/src/components/AppContainer.tsx +0 -26
  181. dulus-0.2.56/sandbox/src/components/AppLauncher.tsx +0 -241
  182. dulus-0.2.56/sandbox/src/components/BootSequence.tsx +0 -236
  183. dulus-0.2.56/sandbox/src/components/ContextMenu.tsx +0 -251
  184. dulus-0.2.56/sandbox/src/components/Desktop.tsx +0 -186
  185. dulus-0.2.56/sandbox/src/components/Dock.tsx +0 -199
  186. dulus-0.2.56/sandbox/src/components/LoginScreen.tsx +0 -302
  187. dulus-0.2.56/sandbox/src/components/NotImplemented.tsx +0 -55
  188. dulus-0.2.56/sandbox/src/components/NotificationCenter.tsx +0 -181
  189. dulus-0.2.56/sandbox/src/components/NotificationSystem.tsx +0 -136
  190. dulus-0.2.56/sandbox/src/components/TopPanel.tsx +0 -334
  191. dulus-0.2.56/sandbox/src/components/WindowFrame.tsx +0 -401
  192. dulus-0.2.56/sandbox/src/components/WindowManager.tsx +0 -25
  193. dulus-0.2.56/sandbox/src/components/ui/accordion.tsx +0 -64
  194. dulus-0.2.56/sandbox/src/components/ui/alert-dialog.tsx +0 -155
  195. dulus-0.2.56/sandbox/src/components/ui/alert.tsx +0 -66
  196. dulus-0.2.56/sandbox/src/components/ui/aspect-ratio.tsx +0 -11
  197. dulus-0.2.56/sandbox/src/components/ui/avatar.tsx +0 -51
  198. dulus-0.2.56/sandbox/src/components/ui/badge.tsx +0 -46
  199. dulus-0.2.56/sandbox/src/components/ui/breadcrumb.tsx +0 -109
  200. dulus-0.2.56/sandbox/src/components/ui/button-group.tsx +0 -83
  201. dulus-0.2.56/sandbox/src/components/ui/button.tsx +0 -62
  202. dulus-0.2.56/sandbox/src/components/ui/calendar.tsx +0 -220
  203. dulus-0.2.56/sandbox/src/components/ui/card.tsx +0 -92
  204. dulus-0.2.56/sandbox/src/components/ui/carousel.tsx +0 -239
  205. dulus-0.2.56/sandbox/src/components/ui/chart.tsx +0 -357
  206. dulus-0.2.56/sandbox/src/components/ui/checkbox.tsx +0 -32
  207. dulus-0.2.56/sandbox/src/components/ui/collapsible.tsx +0 -31
  208. dulus-0.2.56/sandbox/src/components/ui/command.tsx +0 -182
  209. dulus-0.2.56/sandbox/src/components/ui/context-menu.tsx +0 -252
  210. dulus-0.2.56/sandbox/src/components/ui/dialog.tsx +0 -141
  211. dulus-0.2.56/sandbox/src/components/ui/drawer.tsx +0 -135
  212. dulus-0.2.56/sandbox/src/components/ui/dropdown-menu.tsx +0 -255
  213. dulus-0.2.56/sandbox/src/components/ui/empty.tsx +0 -104
  214. dulus-0.2.56/sandbox/src/components/ui/field.tsx +0 -246
  215. dulus-0.2.56/sandbox/src/components/ui/form.tsx +0 -167
  216. dulus-0.2.56/sandbox/src/components/ui/hover-card.tsx +0 -44
  217. dulus-0.2.56/sandbox/src/components/ui/input-group.tsx +0 -170
  218. dulus-0.2.56/sandbox/src/components/ui/input-otp.tsx +0 -75
  219. dulus-0.2.56/sandbox/src/components/ui/input.tsx +0 -21
  220. dulus-0.2.56/sandbox/src/components/ui/item.tsx +0 -193
  221. dulus-0.2.56/sandbox/src/components/ui/kbd.tsx +0 -28
  222. dulus-0.2.56/sandbox/src/components/ui/label.tsx +0 -24
  223. dulus-0.2.56/sandbox/src/components/ui/menubar.tsx +0 -274
  224. dulus-0.2.56/sandbox/src/components/ui/navigation-menu.tsx +0 -168
  225. dulus-0.2.56/sandbox/src/components/ui/pagination.tsx +0 -127
  226. dulus-0.2.56/sandbox/src/components/ui/popover.tsx +0 -48
  227. dulus-0.2.56/sandbox/src/components/ui/progress.tsx +0 -29
  228. dulus-0.2.56/sandbox/src/components/ui/radio-group.tsx +0 -45
  229. dulus-0.2.56/sandbox/src/components/ui/resizable.tsx +0 -54
  230. dulus-0.2.56/sandbox/src/components/ui/scroll-area.tsx +0 -58
  231. dulus-0.2.56/sandbox/src/components/ui/select.tsx +0 -188
  232. dulus-0.2.56/sandbox/src/components/ui/separator.tsx +0 -28
  233. dulus-0.2.56/sandbox/src/components/ui/sheet.tsx +0 -137
  234. dulus-0.2.56/sandbox/src/components/ui/sidebar.tsx +0 -726
  235. dulus-0.2.56/sandbox/src/components/ui/skeleton.tsx +0 -13
  236. dulus-0.2.56/sandbox/src/components/ui/slider.tsx +0 -63
  237. dulus-0.2.56/sandbox/src/components/ui/sonner.tsx +0 -38
  238. dulus-0.2.56/sandbox/src/components/ui/spinner.tsx +0 -16
  239. dulus-0.2.56/sandbox/src/components/ui/switch.tsx +0 -31
  240. dulus-0.2.56/sandbox/src/components/ui/table.tsx +0 -114
  241. dulus-0.2.56/sandbox/src/components/ui/tabs.tsx +0 -66
  242. dulus-0.2.56/sandbox/src/components/ui/textarea.tsx +0 -18
  243. dulus-0.2.56/sandbox/src/components/ui/toggle-group.tsx +0 -81
  244. dulus-0.2.56/sandbox/src/components/ui/toggle.tsx +0 -45
  245. dulus-0.2.56/sandbox/src/components/ui/tooltip.tsx +0 -61
  246. dulus-0.2.56/sandbox/src/hooks/index.ts +0 -30
  247. dulus-0.2.56/sandbox/src/hooks/use-mobile.ts +0 -19
  248. dulus-0.2.56/sandbox/src/hooks/useAutoOpenChat.ts +0 -34
  249. dulus-0.2.56/sandbox/src/hooks/useDulusAgents.ts +0 -51
  250. dulus-0.2.56/sandbox/src/hooks/useDulusChat.ts +0 -73
  251. dulus-0.2.56/sandbox/src/hooks/useDulusEvents.ts +0 -116
  252. dulus-0.2.56/sandbox/src/hooks/useDulusHealth.ts +0 -52
  253. dulus-0.2.56/sandbox/src/hooks/useDulusMemory.ts +0 -78
  254. dulus-0.2.56/sandbox/src/hooks/useDulusSkills.ts +0 -60
  255. dulus-0.2.56/sandbox/src/hooks/useDulusTasks.ts +0 -90
  256. dulus-0.2.56/sandbox/src/hooks/useFileSystem.ts +0 -330
  257. dulus-0.2.56/sandbox/src/hooks/useOSStore.tsx +0 -553
  258. dulus-0.2.56/sandbox/src/hooks/useSkillBridge.ts +0 -72
  259. dulus-0.2.56/sandbox/src/hooks/useSystemBattery.ts +0 -77
  260. dulus-0.2.56/sandbox/src/hooks/useSystemNetwork.ts +0 -56
  261. dulus-0.2.56/sandbox/src/hooks/useSystemVolume.ts +0 -39
  262. dulus-0.2.56/sandbox/src/index.css +0 -169
  263. dulus-0.2.56/sandbox/src/lib/dulus-api.ts +0 -398
  264. dulus-0.2.56/sandbox/src/lib/utils.ts +0 -6
  265. dulus-0.2.56/sandbox/src/main.tsx +0 -5
  266. dulus-0.2.56/sandbox/src/types/index.ts +0 -252
  267. dulus-0.2.56/sandbox/src/utils/assets.ts +0 -15
  268. dulus-0.2.56/voice/wake_word.py +0 -374
  269. {dulus-0.2.56 → dulus-3.3.4}/LICENSE +0 -0
  270. {dulus-0.2.56 → dulus-3.3.4}/backend/__init__.py +0 -0
  271. {dulus-0.2.56 → dulus-3.3.4}/backend/context.py +0 -0
  272. {dulus-0.2.56 → dulus-3.3.4}/backend/githook.py +0 -0
  273. {dulus-0.2.56 → dulus-3.3.4}/backend/marketplace.py +0 -0
  274. {dulus-0.2.56 → dulus-3.3.4}/backend/mempalace_bridge.py +0 -0
  275. {dulus-0.2.56 → dulus-3.3.4}/backend/personas.py +0 -0
  276. {dulus-0.2.56 → dulus-3.3.4}/backend/plugins.py +0 -0
  277. {dulus-0.2.56 → dulus-3.3.4}/backend/server.py +0 -0
  278. {dulus-0.2.56 → dulus-3.3.4}/backend/tasks.py +0 -0
  279. {dulus-0.2.56 → dulus-3.3.4}/checkpoint/__init__.py +0 -0
  280. {dulus-0.2.56 → dulus-3.3.4}/checkpoint/hooks.py +0 -0
  281. {dulus-0.2.56 → dulus-3.3.4}/checkpoint/store.py +0 -0
  282. {dulus-0.2.56 → dulus-3.3.4}/checkpoint/types.py +0 -0
  283. {dulus-0.2.56 → dulus-3.3.4}/claude_code_watcher.py +0 -0
  284. {dulus-0.2.56 → dulus-3.3.4}/clipboard_utils.py +0 -0
  285. {dulus-0.2.56 → dulus-3.3.4}/cloudsave.py +0 -0
  286. {dulus-0.2.56 → dulus-3.3.4}/common.py +0 -0
  287. {dulus-0.2.56 → dulus-3.3.4}/data/__init__.py +0 -0
  288. {dulus-0.2.56 → dulus-3.3.4}/data/active_persona.json +0 -0
  289. {dulus-0.2.56 → dulus-3.3.4}/data/marketplace.json +0 -0
  290. {dulus-0.2.56 → dulus-3.3.4}/data/personas.json +0 -0
  291. {dulus-0.2.56 → dulus-3.3.4}/data/plugins/__init__.py +0 -0
  292. {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/__init__.py +0 -0
  293. {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  294. {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  295. {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/plugin.json +0 -0
  296. {dulus-0.2.56 → dulus-3.3.4}/data/tasks.json +0 -0
  297. {dulus-0.2.56 → dulus-3.3.4}/docs/__init__.py +0 -0
  298. {dulus-0.2.56 → dulus-3.3.4}/docs/azure-speech-template.json +0 -0
  299. {dulus-0.2.56 → dulus-3.3.4}/docs/divider.svg +0 -0
  300. {dulus-0.2.56 → dulus-3.3.4}/docs/generate.py +0 -0
  301. {dulus-0.2.56 → dulus-3.3.4}/docs/nvidia-models.svg +0 -0
  302. {dulus-0.2.56/docs/uploads → dulus-3.3.4/docs}/particle-playground.html +0 -0
  303. {dulus-0.2.56 → dulus-3.3.4}/docs/personas/index.html +0 -0
  304. {dulus-0.2.56 → dulus-3.3.4}/docs/poetry-banner.png +0 -0
  305. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-agents.svg +0 -0
  306. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-brainstorm.svg +0 -0
  307. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-bridges.svg +0 -0
  308. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-features.svg +0 -0
  309. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-freetier.svg +0 -0
  310. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-memory.svg +0 -0
  311. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-models.svg +0 -0
  312. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-perms.svg +0 -0
  313. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-plugins.svg +0 -0
  314. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-quickstart.svg +0 -0
  315. {dulus-0.2.56 → dulus-3.3.4}/docs/sec-ssj.svg +0 -0
  316. {dulus-0.2.56 → dulus-3.3.4}/docs/spinners.svg +0 -0
  317. {dulus-0.2.56 → dulus-3.3.4}/docs/split-pane.svg +0 -0
  318. {dulus-0.2.56 → dulus-3.3.4}/docs/terminal-boot.svg +0 -0
  319. {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/dependency_links.txt +0 -0
  320. {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/entry_points.txt +0 -0
  321. {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/__init__.py +0 -0
  322. {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/client.py +0 -0
  323. {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/config.py +0 -0
  324. {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/tools.py +0 -0
  325. {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/types.py +0 -0
  326. {dulus-0.2.56 → dulus-3.3.4}/gui/agent_bridge.py +0 -0
  327. {dulus-0.2.56 → dulus-3.3.4}/gui/chat_widget.py +0 -0
  328. {dulus-0.2.56 → dulus-3.3.4}/gui/personas.py +0 -0
  329. {dulus-0.2.56 → dulus-3.3.4}/gui/session_utils.py +0 -0
  330. {dulus-0.2.56 → dulus-3.3.4}/gui/settings_dialog.py +0 -0
  331. {dulus-0.2.56 → dulus-3.3.4}/gui/sidebar.py +0 -0
  332. {dulus-0.2.56 → dulus-3.3.4}/gui/tasks_view.py +0 -0
  333. {dulus-0.2.56 → dulus-3.3.4}/gui/tool_panel.py +0 -0
  334. {dulus-0.2.56 → dulus-3.3.4}/memory/__init__.py +0 -0
  335. {dulus-0.2.56 → dulus-3.3.4}/memory/audit.py +0 -0
  336. {dulus-0.2.56 → dulus-3.3.4}/memory/consolidator.py +0 -0
  337. {dulus-0.2.56 → dulus-3.3.4}/memory/context.py +0 -0
  338. {dulus-0.2.56 → dulus-3.3.4}/memory/offload.py +0 -0
  339. {dulus-0.2.56 → dulus-3.3.4}/memory/palace.py +0 -0
  340. {dulus-0.2.56 → dulus-3.3.4}/memory/scan.py +0 -0
  341. {dulus-0.2.56 → dulus-3.3.4}/memory/sessions.py +0 -0
  342. {dulus-0.2.56 → dulus-3.3.4}/memory/store.py +0 -0
  343. {dulus-0.2.56 → dulus-3.3.4}/memory/tools.py +0 -0
  344. {dulus-0.2.56 → dulus-3.3.4}/memory/types.py +0 -0
  345. {dulus-0.2.56 → dulus-3.3.4}/memory/vector_search.py +0 -0
  346. {dulus-0.2.56 → dulus-3.3.4}/multi_agent/__init__.py +0 -0
  347. {dulus-0.2.56 → dulus-3.3.4}/multi_agent/subagent.py +0 -0
  348. {dulus-0.2.56 → dulus-3.3.4}/multi_agent/tools.py +0 -0
  349. {dulus-0.2.56 → dulus-3.3.4}/plugin/__init__.py +0 -0
  350. {dulus-0.2.56 → dulus-3.3.4}/plugin/loader.py +0 -0
  351. {dulus-0.2.56 → dulus-3.3.4}/plugin/recommend.py +0 -0
  352. {dulus-0.2.56 → dulus-3.3.4}/plugin/store.py +0 -0
  353. {dulus-0.2.56 → dulus-3.3.4}/plugin/types.py +0 -0
  354. {dulus-0.2.56 → dulus-3.3.4}/sandbox/README.md +0 -0
  355. {dulus-0.2.56 → dulus-3.3.4}/sandbox/__init__.py +0 -0
  356. {dulus-0.2.56 → dulus-3.3.4}/sandbox/components.json +0 -0
  357. {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
  358. {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
  359. {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpaper-default.jpg +0 -0
  360. {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/default.jpeg +0 -0
  361. {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/light.jpeg +0 -0
  362. {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  363. {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  364. {dulus-0.2.56 → dulus-3.3.4}/sandbox/eslint.config.js +0 -0
  365. {dulus-0.2.56 → dulus-3.3.4}/sandbox/index.html +0 -0
  366. {dulus-0.2.56 → dulus-3.3.4}/sandbox/info.md +0 -0
  367. {dulus-0.2.56 → dulus-3.3.4}/sandbox/package-lock.json +0 -0
  368. {dulus-0.2.56 → dulus-3.3.4}/sandbox/package.json +0 -0
  369. {dulus-0.2.56 → dulus-3.3.4}/sandbox/postcss.config.js +0 -0
  370. {dulus-0.2.56 → dulus-3.3.4}/sandbox/tailwind.config.js +0 -0
  371. {dulus-0.2.56 → dulus-3.3.4}/sandbox/tsconfig.app.json +0 -0
  372. {dulus-0.2.56 → dulus-3.3.4}/sandbox/tsconfig.json +0 -0
  373. {dulus-0.2.56 → dulus-3.3.4}/sandbox/tsconfig.node.json +0 -0
  374. {dulus-0.2.56 → dulus-3.3.4}/sandbox/vite.config.ts +0 -0
  375. {dulus-0.2.56 → dulus-3.3.4}/setup.cfg +0 -0
  376. {dulus-0.2.56 → dulus-3.3.4}/skill/__init__.py +0 -0
  377. {dulus-0.2.56 → dulus-3.3.4}/skill/builtin.py +0 -0
  378. {dulus-0.2.56 → dulus-3.3.4}/skill/executor.py +0 -0
  379. {dulus-0.2.56 → dulus-3.3.4}/skill/tools.py +0 -0
  380. {dulus-0.2.56 → dulus-3.3.4}/skills.py +0 -0
  381. {dulus-0.2.56 → dulus-3.3.4}/spinner.py +0 -0
  382. {dulus-0.2.56 → dulus-3.3.4}/string_utils.py +0 -0
  383. {dulus-0.2.56 → dulus-3.3.4}/subagent.py +0 -0
  384. {dulus-0.2.56 → dulus-3.3.4}/task/__init__.py +0 -0
  385. {dulus-0.2.56 → dulus-3.3.4}/task/store.py +0 -0
  386. {dulus-0.2.56 → dulus-3.3.4}/task/tools.py +0 -0
  387. {dulus-0.2.56 → dulus-3.3.4}/task/types.py +0 -0
  388. {dulus-0.2.56 → dulus-3.3.4}/tests/test_afk_yolo.py +0 -0
  389. {dulus-0.2.56 → dulus-3.3.4}/tests/test_approval_runtime.py +0 -0
  390. {dulus-0.2.56 → dulus-3.3.4}/tests/test_background_task_tools.py +0 -0
  391. {dulus-0.2.56 → dulus-3.3.4}/tests/test_background_tasks.py +0 -0
  392. {dulus-0.2.56 → dulus-3.3.4}/tests/test_checkpoint.py +0 -0
  393. {dulus-0.2.56 → dulus-3.3.4}/tests/test_clipboard_utils.py +0 -0
  394. {dulus-0.2.56 → dulus-3.3.4}/tests/test_compaction.py +0 -0
  395. {dulus-0.2.56 → dulus-3.3.4}/tests/test_diff_view.py +0 -0
  396. {dulus-0.2.56 → dulus-3.3.4}/tests/test_diff_visualization.py +0 -0
  397. {dulus-0.2.56 → dulus-3.3.4}/tests/test_display_blocks.py +0 -0
  398. {dulus-0.2.56 → dulus-3.3.4}/tests/test_export_import.py +0 -0
  399. {dulus-0.2.56 → dulus-3.3.4}/tests/test_hook_engine.py +0 -0
  400. {dulus-0.2.56 → dulus-3.3.4}/tests/test_injection_fix.py +0 -0
  401. {dulus-0.2.56 → dulus-3.3.4}/tests/test_license.py +0 -0
  402. {dulus-0.2.56 → dulus-3.3.4}/tests/test_mcp.py +0 -0
  403. {dulus-0.2.56 → dulus-3.3.4}/tests/test_memory.py +0 -0
  404. {dulus-0.2.56 → dulus-3.3.4}/tests/test_notification_manager.py +0 -0
  405. {dulus-0.2.56 → dulus-3.3.4}/tests/test_plugin.py +0 -0
  406. {dulus-0.2.56 → dulus-3.3.4}/tests/test_session_fork.py +0 -0
  407. {dulus-0.2.56 → dulus-3.3.4}/tests/test_shell_mode.py +0 -0
  408. {dulus-0.2.56 → dulus-3.3.4}/tests/test_skills.py +0 -0
  409. {dulus-0.2.56 → dulus-3.3.4}/tests/test_steer_input.py +0 -0
  410. {dulus-0.2.56 → dulus-3.3.4}/tests/test_subagent.py +0 -0
  411. {dulus-0.2.56 → dulus-3.3.4}/tests/test_task.py +0 -0
  412. {dulus-0.2.56 → dulus-3.3.4}/tests/test_telegram_buffer.py +0 -0
  413. {dulus-0.2.56 → dulus-3.3.4}/tests/test_think_tool.py +0 -0
  414. {dulus-0.2.56 → dulus-3.3.4}/tests/test_todo_tool.py +0 -0
  415. {dulus-0.2.56 → dulus-3.3.4}/tests/test_todo_visualization.py +0 -0
  416. {dulus-0.2.56 → dulus-3.3.4}/tests/test_tool_registry.py +0 -0
  417. {dulus-0.2.56 → dulus-3.3.4}/tests/test_voice.py +0 -0
  418. {dulus-0.2.56 → dulus-3.3.4}/tests/test_wire_events.py +0 -0
  419. {dulus-0.2.56 → dulus-3.3.4}/tmux_tools.py +0 -0
  420. {dulus-0.2.56 → dulus-3.3.4}/tool_registry.py +0 -0
  421. {dulus-0.2.56 → dulus-3.3.4}/ui/__init__.py +0 -0
  422. {dulus-0.2.56 → dulus-3.3.4}/ui/input.py +0 -0
  423. {dulus-0.2.56 → dulus-3.3.4}/ui/render.py +0 -0
  424. {dulus-0.2.56 → dulus-3.3.4}/voice/__init__.py +0 -0
  425. {dulus-0.2.56 → dulus-3.3.4}/voice/keyterms.py +0 -0
  426. {dulus-0.2.56 → dulus-3.3.4}/webchat.py +0 -0
@@ -0,0 +1,7 @@
1
+ include pyproject.toml
2
+ recursive-include docs *
3
+ recursive-include data *
4
+ recursive-include sandbox/dist *
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.56
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,25 +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"
46
+ Provides-Extra: webbridge
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"
43
57
  Provides-Extra: full
44
58
  Requires-Dist: mempalace>=3.3.4; extra == "full"
45
59
  Requires-Dist: sounddevice; extra == "full"
60
+ Requires-Dist: elevenlabs>=1.0.0; extra == "full"
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"
46
64
  Dynamic: license-file
47
65
 
48
66
  # ▲ DULUS
49
-
50
- > **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.
51
69
 
52
70
  SET /sticky_input ON since the first run for the best experience!
53
71
 
54
72
  <p align="center">
55
- <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
+
56
76
  </p>
57
77
 
78
+ <p align="center"><i>The Dulus (Cigua Palmera) — Dominican national bird. Named after the bird, not the rocket.</i></p>
79
+
58
80
  <p align="center">
59
81
  <a href="#quick-start"><b>Quick Start</b></a> ·
60
82
  <a href="#models"><b>Models</b></a> ·
@@ -69,12 +91,31 @@ SET /sticky_input ON since the first run for the best experience!
69
91
  <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
70
92
  <img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
71
93
  <img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
72
- <img src="https://img.shields.io/badge/version-v0.2.52-ff6b1f?style=flat-square&labelColor=07070a" alt="version"/>
73
- <img src="https://img.shields.io/badge/providers-11-ff6b1f?style=flat-square&labelColor=07070a" alt="providers"/>
74
- <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"/>
75
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>
76
99
  </p>
77
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
+ -----
78
119
  <p align="center">
79
120
  <code>pip install dulus</code>
80
121
  </p>
@@ -82,26 +123,33 @@ SET /sticky_input ON since the first run for the best experience!
82
123
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
83
124
 
84
125
  <p align="center">
85
- <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>
86
127
  <sub>The site covers features, demos, and details not documented in this README.</sub>
87
128
  </p>
88
129
 
89
130
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
90
131
 
91
- ## What is this
92
- Talent cant be copied.
132
+ ## 🔥 What's new
93
133
 
94
- Dulus Reduce your IA costs by 60% parsing webchats and claude-code directly. Write poetry while Anthropic only see text.
95
- 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`
96
135
 
97
- <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. 🦅🇩🇴
98
137
 
99
- <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.
100
146
 
147
+ <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
101
148
 
102
- <p align="center">
103
- <sub>⚡ <b>Saves you Claude tokens?</b> Throw a sat — BTC: <code>1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN</code></sub>
104
- </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
105
153
 
106
154
 
107
155
  Another reminder of a Dulus magic spell:
@@ -114,53 +162,79 @@ them:
114
162
 
115
163
  dulus get the prices of NVDA, TSLA, SP500:
116
164
 
117
- <img width="2094" height="1365" alt="image" src="https://github.com/user-attachments/assets/1551d651-9d69-4607-bac0-4adbde645783" />
118
-
119
165
  Be creative!!!
120
166
 
121
167
  Dulus adapt any python repository <3
168
+ ---
122
169
 
123
- <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>
124
171
 
172
+ ## Quick Start
125
173
 
126
- 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)
127
175
 
128
- > **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.
129
- > **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`).
130
- > **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.
131
- > **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.
132
- > **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.
133
- > **v0.2.18 — May 9, 2026** — `beautifulsoup4` added as default dep for web scraping flows.
134
- > **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.
135
- > **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.
136
- > **v0.2.15 — May 9, 2026** — Banner image hosted locally so PyPI renders it correctly.
137
- > **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.
138
- > **v0.2.13 — May 8, 2026** — Internal robustness fixes for Ollama streaming.
139
- > Type `/news` to see the full changelog.
176
+ **Linux / macOS / WSL / Termux:**
140
177
 
141
- ---
178
+ ```bash
179
+ curl -fsSL https://raw.githubusercontent.com/KevRojo/Dulus/main/install.sh | bash
180
+ ```
142
181
 
143
- <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):**
144
183
 
145
- ## Quick Start
184
+ ```powershell
185
+ irm https://raw.githubusercontent.com/KevRojo/Dulus/main/install.ps1 | iex
186
+ ```
146
187
 
147
- <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:
148
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.
149
199
 
150
- <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.
151
202
 
152
- <img alt="image" src="https://github.com/user-attachments/assets/eb11cb86-2f53-4979-b7bf-5bd1f97ed5fc" />
203
+ Power-user flags:
153
204
 
154
- <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
155
208
 
209
+ # Non-interactive install (CI / scripts)
210
+ curl -fsSL .../install.sh | bash -s -- --profile=full --pipx
156
211
 
157
- ROUND TABLE (DULUS UNIQUE FEATURE)
212
+ # Latest pre-release
213
+ curl -fsSL .../install.sh | bash -s -- --pre
214
+ ```
158
215
 
159
- <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
+ ```
160
222
 
161
- 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)
162
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
163
234
 
235
+ # 3. Or jump into the REPL inside the container
236
+ docker compose exec dulus dulus
237
+ ```
164
238
 
165
239
  ### One-liner
166
240
 
@@ -171,12 +245,7 @@ pip install "dulus[memory]" && dulus # +MemPalace per-turn memory (pulls chro
171
245
 
172
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.
173
247
 
174
- Thanks for all the love on PyPi, the launch on PyPi was on 05-05-2026
175
- -----
176
-
177
- <img width="2593" height="1044" alt="image" src="https://github.com/user-attachments/assets/114b9ab1-e49f-490a-97b8-872f70b859bd" />
178
-
179
- -----
248
+ ---
180
249
 
181
250
  ### From source (hacking on Dulus itself)
182
251
 
@@ -224,8 +293,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
224
293
 
225
294
  ---
226
295
 
227
- <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/terminal-boot.svg" alt="Dulus booting into session" width="100%"></p>
228
-
229
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>
230
297
 
231
298
  ### 💻 Dulus OS (Sandbox)
@@ -234,12 +301,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
234
301
 
235
302
  <img width="1309" height="778" alt="image" src="https://github.com/user-attachments/assets/1c627990-7f87-489b-a0a2-14ad62fe2bb8" />
236
303
 
237
- ---
238
- <img width="1608" height="1903" alt="image" src="https://github.com/user-attachments/assets/450defa2-437b-470d-891a-9285d9e5e312" />
239
-
240
- ---
241
- <img width="3763" height="1975" alt="image" src="https://github.com/user-attachments/assets/10752aa2-6837-4097-a9a8-e02938992174" />
242
-
243
304
  ---
244
305
  The dulus sandbox is an early feature, expect bugs
245
306
 
@@ -327,31 +388,33 @@ dulus --model nvidia-web/deepseek-r1
327
388
 
328
389
  | Model | Type | ID |
329
390
  |---|---|---|
330
- | **DeepSeek R1** | Reasoning | `nvidia-web/deepseek-r1` |
331
- | **DeepSeek V3** | Instruct | `nvidia-web/deepseek-v3` |
332
- | **Kimi K2.5** | Long context | `nvidia-web/kimi-k2.5` |
333
- | **GLM-4** | Zhipu AI | `nvidia-web/glm-4` |
334
- | **MiniMax Text-01** | Text + Vision | `nvidia-web/minimax-text-01` |
335
- | **Mistral Nemotron** | NVIDIA-tuned | `nvidia-web/mistral-nemotron` |
336
- | **Mistral Large** | Instruct | `nvidia-web/mistral-large` |
337
- | **Llama 3.3 70B** | Meta | `nvidia-web/llama-3.3-70b` |
338
- | **Llama 3.1 405B** | Meta · flagship | `nvidia-web/llama-3.1-405b` |
339
- | **Llama Nemotron** | NVIDIA reasoning | `nvidia-web/llama-nemotron` |
340
- | **Qwen2.5 Coder** | Alibaba | `nvidia-web/qwen2.5-coder` |
341
- | **Qwen3 235B A22B** | MoE · Alibaba | `nvidia-web/qwen3-235b-a22b` |
342
- | **Phi-4** | Microsoft | `nvidia-web/phi-4` |
343
- | **Gemma 3 27B** | Google | `nvidia-web/gemma-3-27b` |
344
-
345
- **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`:
346
407
 
347
408
  ```json
348
409
  {
349
- "nvidia_fallback_chain": [
350
- "deepseek-r1",
351
- "kimi-k2.5",
352
- "llama-3.3-70b",
353
- "mistral-nemotron",
354
- "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"
355
418
  ]
356
419
  }
357
420
  ```
@@ -378,23 +441,6 @@ Dulus's **Auto-Adapter** reads a random Python repo and figures out its tools on
378
441
 
379
442
  Adapt-and-install runs in under a second. New tools register **live**, no restart.
380
443
 
381
- Example adapting Sherlock repo:
382
-
383
- <img width="1765" height="166" alt="image" src="https://github.com/user-attachments/assets/c67dc15e-a2e3-4575-be34-8c9b54045510" />
384
-
385
- -----
386
-
387
- <img width="1327" height="751" alt="image" src="https://github.com/user-attachments/assets/676a0ef5-3699-4960-98a4-14a55fbef081" />
388
-
389
- -----
390
-
391
- <img width="885" height="301" alt="image" src="https://github.com/user-attachments/assets/52c02444-2606-41dc-bc33-ebe26ac41e5e" />
392
-
393
- ----
394
-
395
- <img width="1006" height="271" alt="image" src="https://github.com/user-attachments/assets/d823428e-6344-4414-bf42-14ed3128f763" />
396
-
397
-
398
444
  ## MCP
399
445
 
400
446
  Drop a `.mcp.json` in your project root (or `~/.dulus/mcp.json` for user-wide):
@@ -460,6 +506,32 @@ pip install sounddevice faster-whisper numpy
460
506
 
461
507
  Then `/voice` in the REPL. Offline. Supports `/voice lang zh` and `/voice device` for mic selection.
462
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
+
463
535
  ## Telegram bridge
464
536
 
465
537
  ```
@@ -660,6 +732,8 @@ dulus/
660
732
  └── tests/ # 263+ unit tests
661
733
  ```
662
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
+
663
737
  ---
664
738
 
665
739
  ## FAQ
@@ -689,6 +763,39 @@ git diff | dulus -p "write a commit message"
689
763
 
690
764
  ---
691
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
+
692
799
  ## License
693
800
 
694
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.
@@ -701,6 +808,7 @@ If Dulus saved you tokens, time, or sanity — throw some sats:
701
808
  ```
702
809
  BTC: 1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN
703
810
  ```
811
+ On x: @KevRojo
704
812
 
705
813
  <p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
706
814