dulus 3.13.7__tar.gz → 3.13.9__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 (388) hide show
  1. {dulus-3.13.7/dulus.egg-info → dulus-3.13.9}/PKG-INFO +48 -47
  2. {dulus-3.13.7 → dulus-3.13.9}/README.md +47 -46
  3. {dulus-3.13.7 → dulus-3.13.9}/config.py +5 -0
  4. {dulus-3.13.7 → dulus-3.13.9}/context.py +11 -1
  5. {dulus-3.13.7 → dulus-3.13.9}/docs/CHANGELOG.md +15 -0
  6. {dulus-3.13.7 → dulus-3.13.9}/docs/news.md +5 -1
  7. {dulus-3.13.7 → dulus-3.13.9/dulus.egg-info}/PKG-INFO +48 -47
  8. {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/SOURCES.txt +1 -0
  9. {dulus-3.13.7 → dulus-3.13.9}/dulus.py +80 -245
  10. dulus-3.13.9/dulus_tools/isolate.py +273 -0
  11. {dulus-3.13.7 → dulus-3.13.9}/pyproject.toml +1 -1
  12. {dulus-3.13.7 → dulus-3.13.9}/tools.py +27 -0
  13. {dulus-3.13.7 → dulus-3.13.9}/LICENSE +0 -0
  14. {dulus-3.13.7 → dulus-3.13.9}/MANIFEST.in +0 -0
  15. {dulus-3.13.7 → dulus-3.13.9}/agent.py +0 -0
  16. {dulus-3.13.7 → dulus-3.13.9}/algolia_search.py +0 -0
  17. {dulus-3.13.7 → dulus-3.13.9}/analytics.py +0 -0
  18. {dulus-3.13.7 → dulus-3.13.9}/backend/__init__.py +0 -0
  19. {dulus-3.13.7 → dulus-3.13.9}/backend/agents_bridge.py +0 -0
  20. {dulus-3.13.7 → dulus-3.13.9}/backend/compressor.py +0 -0
  21. {dulus-3.13.7 → dulus-3.13.9}/backend/context.py +0 -0
  22. {dulus-3.13.7 → dulus-3.13.9}/backend/githook.py +0 -0
  23. {dulus-3.13.7 → dulus-3.13.9}/backend/marketplace.py +0 -0
  24. {dulus-3.13.7 → dulus-3.13.9}/backend/mempalace_bridge.py +0 -0
  25. {dulus-3.13.7 → dulus-3.13.9}/backend/paths.py +0 -0
  26. {dulus-3.13.7 → dulus-3.13.9}/backend/personas.py +0 -0
  27. {dulus-3.13.7 → dulus-3.13.9}/backend/plugins.py +0 -0
  28. {dulus-3.13.7 → dulus-3.13.9}/backend/server.py +0 -0
  29. {dulus-3.13.7 → dulus-3.13.9}/backend/tasks.py +0 -0
  30. {dulus-3.13.7 → dulus-3.13.9}/banners/__init__.py +0 -0
  31. {dulus-3.13.7 → dulus-3.13.9}/banners/banner_rotator.py +0 -0
  32. {dulus-3.13.7 → dulus-3.13.9}/banners/banners_dulus_ai.txt +0 -0
  33. {dulus-3.13.7 → dulus-3.13.9}/batch_api.py +0 -0
  34. {dulus-3.13.7 → dulus-3.13.9}/checkpoint/__init__.py +0 -0
  35. {dulus-3.13.7 → dulus-3.13.9}/checkpoint/hooks.py +0 -0
  36. {dulus-3.13.7 → dulus-3.13.9}/checkpoint/store.py +0 -0
  37. {dulus-3.13.7 → dulus-3.13.9}/checkpoint/types.py +0 -0
  38. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/__init__.py +0 -0
  39. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/__main__.py +0 -0
  40. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/ansi.py +0 -0
  41. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/assets/ascii/dulus_logo.txt +0 -0
  42. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/assets/ascii/eagle.txt +0 -0
  43. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/assets/ascii/terminal_art.txt +0 -0
  44. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/banners.py +0 -0
  45. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/demo.py +0 -0
  46. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/effects.py +0 -0
  47. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/effort_slider.py +0 -0
  48. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/progress.py +0 -0
  49. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/py.typed +0 -0
  50. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/spinners.py +0 -0
  51. {dulus-3.13.7 → dulus-3.13.9}/cli_animations/status.py +0 -0
  52. {dulus-3.13.7 → dulus-3.13.9}/clipboard_utils.py +0 -0
  53. {dulus-3.13.7 → dulus-3.13.9}/cloudsave.py +0 -0
  54. {dulus-3.13.7 → dulus-3.13.9}/common.py +0 -0
  55. {dulus-3.13.7 → dulus-3.13.9}/compaction.py +0 -0
  56. {dulus-3.13.7 → dulus-3.13.9}/data/__init__.py +0 -0
  57. {dulus-3.13.7 → dulus-3.13.9}/data/active_persona.json +0 -0
  58. {dulus-3.13.7 → dulus-3.13.9}/data/marketplace.json +0 -0
  59. {dulus-3.13.7 → dulus-3.13.9}/data/personas.json +0 -0
  60. {dulus-3.13.7 → dulus-3.13.9}/data/plugins/__init__.py +0 -0
  61. {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/__init__.py +0 -0
  62. {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  63. {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  64. {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
  65. {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/plugin.json +0 -0
  66. {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/plugin_tool.py +0 -0
  67. {dulus-3.13.7 → dulus-3.13.9}/data/tasks.json +0 -0
  68. {dulus-3.13.7 → dulus-3.13.9}/display_blocks.py +0 -0
  69. {dulus-3.13.7 → dulus-3.13.9}/docs/API.md +0 -0
  70. {dulus-3.13.7 → dulus-3.13.9}/docs/BRAND_GUIDE.md +0 -0
  71. {dulus-3.13.7 → dulus-3.13.9}/docs/CONTRIBUTING.md +0 -0
  72. {dulus-3.13.7 → dulus-3.13.9}/docs/DEPLOYMENT.md +0 -0
  73. {dulus-3.13.7 → dulus-3.13.9}/docs/FAQ.md +0 -0
  74. {dulus-3.13.7 → dulus-3.13.9}/docs/GETTING_STARTED.md +0 -0
  75. {dulus-3.13.7 → dulus-3.13.9}/docs/README.md +0 -0
  76. {dulus-3.13.7 → dulus-3.13.9}/docs/README_AR.md +0 -0
  77. {dulus-3.13.7 → dulus-3.13.9}/docs/README_EN.md +0 -0
  78. {dulus-3.13.7 → dulus-3.13.9}/docs/README_ES.md +0 -0
  79. {dulus-3.13.7 → dulus-3.13.9}/docs/README_FR.md +0 -0
  80. {dulus-3.13.7 → dulus-3.13.9}/docs/README_JA.md +0 -0
  81. {dulus-3.13.7 → dulus-3.13.9}/docs/README_KO.md +0 -0
  82. {dulus-3.13.7 → dulus-3.13.9}/docs/README_PT.md +0 -0
  83. {dulus-3.13.7 → dulus-3.13.9}/docs/README_RU.md +0 -0
  84. {dulus-3.13.7 → dulus-3.13.9}/docs/README_ZH.md +0 -0
  85. {dulus-3.13.7 → dulus-3.13.9}/docs/SECURITY.md +0 -0
  86. {dulus-3.13.7 → dulus-3.13.9}/docs/__init__.py +0 -0
  87. {dulus-3.13.7 → dulus-3.13.9}/docs/api.html +0 -0
  88. {dulus-3.13.7 → dulus-3.13.9}/docs/architecture.md +0 -0
  89. {dulus-3.13.7 → dulus-3.13.9}/docs/azure-speech-template.json +0 -0
  90. {dulus-3.13.7 → dulus-3.13.9}/docs/dashboard/index.html +0 -0
  91. {dulus-3.13.7 → dulus-3.13.9}/docs/divider.svg +0 -0
  92. {dulus-3.13.7 → dulus-3.13.9}/docs/dulus-bird.png +0 -0
  93. {dulus-3.13.7 → dulus-3.13.9}/docs/generate.py +0 -0
  94. {dulus-3.13.7 → dulus-3.13.9}/docs/index.html +0 -0
  95. {dulus-3.13.7 → dulus-3.13.9}/docs/nvidia-models.svg +0 -0
  96. {dulus-3.13.7 → dulus-3.13.9}/docs/particle-playground.html +0 -0
  97. {dulus-3.13.7 → dulus-3.13.9}/docs/personas/index.html +0 -0
  98. {dulus-3.13.7 → dulus-3.13.9}/docs/poetry-banner.png +0 -0
  99. {dulus-3.13.7 → dulus-3.13.9}/docs/preview.html +0 -0
  100. {dulus-3.13.7 → dulus-3.13.9}/docs/python-console.md +0 -0
  101. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/auto-adapter.png +0 -0
  102. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/dulus-os.png +0 -0
  103. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/hero.png +0 -0
  104. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/lookback_two_windows.png +0 -0
  105. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/pyc_heap.svg +0 -0
  106. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/pyc_receipts.svg +0 -0
  107. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/pyc_trap.svg +0 -0
  108. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/roundtable.png +0 -0
  109. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/task-board.png +0 -0
  110. {dulus-3.13.7 → dulus-3.13.9}/docs/readme/webchat.png +0 -0
  111. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-agents.svg +0 -0
  112. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-brainstorm.svg +0 -0
  113. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-bridges.svg +0 -0
  114. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-features.svg +0 -0
  115. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-freetier.svg +0 -0
  116. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-memory.svg +0 -0
  117. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-models.svg +0 -0
  118. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-perms.svg +0 -0
  119. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-plugins.svg +0 -0
  120. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-quickstart.svg +0 -0
  121. {dulus-3.13.7 → dulus-3.13.9}/docs/sec-ssj.svg +0 -0
  122. {dulus-3.13.7 → dulus-3.13.9}/docs/spinners.svg +0 -0
  123. {dulus-3.13.7 → dulus-3.13.9}/docs/split-pane.svg +0 -0
  124. {dulus-3.13.7 → dulus-3.13.9}/docs/terminal-boot.svg +0 -0
  125. {dulus-3.13.7 → dulus-3.13.9}/docs/termux-edge.md +0 -0
  126. {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/dependency_links.txt +0 -0
  127. {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/entry_points.txt +0 -0
  128. {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/requires.txt +0 -0
  129. {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/top_level.txt +0 -0
  130. {dulus-3.13.7 → dulus-3.13.9}/dulus_account.py +0 -0
  131. {dulus-3.13.7 → dulus-3.13.9}/dulus_bar_client.py +0 -0
  132. {dulus-3.13.7 → dulus-3.13.9}/dulus_gui.py +0 -0
  133. {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/__init__.py +0 -0
  134. {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/client.py +0 -0
  135. {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/commands.py +0 -0
  136. {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/config.py +0 -0
  137. {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/hub.py +0 -0
  138. {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/tools.py +0 -0
  139. {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/types.py +0 -0
  140. {dulus-3.13.7 → dulus-3.13.9}/dulus_quick_menu.py +0 -0
  141. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/__init__.py +0 -0
  142. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/add_dir_manager.py +0 -0
  143. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/afk_mode.py +0 -0
  144. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/approval_runtime.py +0 -0
  145. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/background_tasks.py +0 -0
  146. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/clipboard_utils.py +0 -0
  147. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/diff_visualizer.py +0 -0
  148. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/export_import.py +0 -0
  149. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/hook_engine.py +0 -0
  150. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/notification_manager.py +0 -0
  151. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/session_fork.py +0 -0
  152. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/shell_mode.py +0 -0
  153. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/todo_visualizer.py +0 -0
  154. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/tree_ls.py +0 -0
  155. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/wire_events.py +0 -0
  156. {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/yolo_mode.py +0 -0
  157. {dulus-3.13.7 → dulus-3.13.9}/file_filter.py +0 -0
  158. {dulus-3.13.7 → dulus-3.13.9}/fs_compass.py +0 -0
  159. {dulus-3.13.7 → dulus-3.13.9}/governance.py +0 -0
  160. {dulus-3.13.7 → dulus-3.13.9}/gui/__init__.py +0 -0
  161. {dulus-3.13.7 → dulus-3.13.9}/gui/agent_bridge.py +0 -0
  162. {dulus-3.13.7 → dulus-3.13.9}/gui/chat_widget.py +0 -0
  163. {dulus-3.13.7 → dulus-3.13.9}/gui/main_window.py +0 -0
  164. {dulus-3.13.7 → dulus-3.13.9}/gui/personas.py +0 -0
  165. {dulus-3.13.7 → dulus-3.13.9}/gui/sandbox_server.py +0 -0
  166. {dulus-3.13.7 → dulus-3.13.9}/gui/session_utils.py +0 -0
  167. {dulus-3.13.7 → dulus-3.13.9}/gui/settings_dialog.py +0 -0
  168. {dulus-3.13.7 → dulus-3.13.9}/gui/sidebar.py +0 -0
  169. {dulus-3.13.7 → dulus-3.13.9}/gui/tasks_view.py +0 -0
  170. {dulus-3.13.7 → dulus-3.13.9}/gui/themes.py +0 -0
  171. {dulus-3.13.7 → dulus-3.13.9}/gui/tool_panel.py +0 -0
  172. {dulus-3.13.7 → dulus-3.13.9}/input.py +0 -0
  173. {dulus-3.13.7 → dulus-3.13.9}/license_manager.py +0 -0
  174. {dulus-3.13.7 → dulus-3.13.9}/lookback.py +0 -0
  175. {dulus-3.13.7 → dulus-3.13.9}/memory/__init__.py +0 -0
  176. {dulus-3.13.7 → dulus-3.13.9}/memory/audit.py +0 -0
  177. {dulus-3.13.7 → dulus-3.13.9}/memory/consolidator.py +0 -0
  178. {dulus-3.13.7 → dulus-3.13.9}/memory/context.py +0 -0
  179. {dulus-3.13.7 → dulus-3.13.9}/memory/mempalace_bridge.py +0 -0
  180. {dulus-3.13.7 → dulus-3.13.9}/memory/offload.py +0 -0
  181. {dulus-3.13.7 → dulus-3.13.9}/memory/palace.py +0 -0
  182. {dulus-3.13.7 → dulus-3.13.9}/memory/scan.py +0 -0
  183. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/adaptation_guides.md +0 -0
  184. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/askuserquestion_after_numbered_list.md +0 -0
  185. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/background_jobs_no_extra_timers.md +0 -0
  186. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/cleverness_over_resources.md +0 -0
  187. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/corporate_tls_breaks_curl_cffi.md +0 -0
  188. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/hardened_rules.md +0 -0
  189. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/investigator_workflow_heuristic.md +0 -0
  190. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/native_code_over_sketchy_plugins.md +0 -0
  191. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/no_personal_info_in_code.md +0 -0
  192. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/searches_include_modified_date.md +0 -0
  193. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/tmux_send_keys_power_patterns.md +0 -0
  194. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/token_optimization_technique.md +0 -0
  195. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/tool_chaining_capability.md +0 -0
  196. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/webbridge_evaluate_first_pattern.md +0 -0
  197. {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/short_memory.md +0 -0
  198. {dulus-3.13.7 → dulus-3.13.9}/memory/sessions.py +0 -0
  199. {dulus-3.13.7 → dulus-3.13.9}/memory/store.py +0 -0
  200. {dulus-3.13.7 → dulus-3.13.9}/memory/tools.py +0 -0
  201. {dulus-3.13.7 → dulus-3.13.9}/memory/types.py +0 -0
  202. {dulus-3.13.7 → dulus-3.13.9}/memory/vector_search.py +0 -0
  203. {dulus-3.13.7 → dulus-3.13.9}/model_params.py +0 -0
  204. {dulus-3.13.7 → dulus-3.13.9}/multi_agent/__init__.py +0 -0
  205. {dulus-3.13.7 → dulus-3.13.9}/multi_agent/subagent.py +0 -0
  206. {dulus-3.13.7 → dulus-3.13.9}/multi_agent/tools.py +0 -0
  207. {dulus-3.13.7 → dulus-3.13.9}/paste_placeholders.py +0 -0
  208. {dulus-3.13.7 → dulus-3.13.9}/personality_config.py +0 -0
  209. {dulus-3.13.7 → dulus-3.13.9}/plugin/__init__.py +0 -0
  210. {dulus-3.13.7 → dulus-3.13.9}/plugin/autoadapter.py +0 -0
  211. {dulus-3.13.7 → dulus-3.13.9}/plugin/loader.py +0 -0
  212. {dulus-3.13.7 → dulus-3.13.9}/plugin/recommend.py +0 -0
  213. {dulus-3.13.7 → dulus-3.13.9}/plugin/store.py +0 -0
  214. {dulus-3.13.7 → dulus-3.13.9}/plugin/types.py +0 -0
  215. {dulus-3.13.7 → dulus-3.13.9}/profiles.py +0 -0
  216. {dulus-3.13.7 → dulus-3.13.9}/providers.py +0 -0
  217. {dulus-3.13.7 → dulus-3.13.9}/pyconsole.py +0 -0
  218. {dulus-3.13.7 → dulus-3.13.9}/sandbox/README.md +0 -0
  219. {dulus-3.13.7 → dulus-3.13.9}/sandbox/__init__.py +0 -0
  220. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
  221. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
  222. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/index.html +0 -0
  223. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpaper-default.jpg +0 -0
  224. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/default.jpeg +0 -0
  225. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/light.jpeg +0 -0
  226. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  227. {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  228. {dulus-3.13.7 → dulus-3.13.9}/sandbox/info.md +0 -0
  229. {dulus-3.13.7 → dulus-3.13.9}/sandbox_bootstrap.py +0 -0
  230. {dulus-3.13.7 → dulus-3.13.9}/setup.cfg +0 -0
  231. {dulus-3.13.7 → dulus-3.13.9}/skill/__init__.py +0 -0
  232. {dulus-3.13.7 → dulus-3.13.9}/skill/builtin.py +0 -0
  233. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/LICENSE-obsidian-skills +0 -0
  234. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/README.md +0 -0
  235. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/defuddle/SKILL.md +0 -0
  236. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/json-canvas/SKILL.md +0 -0
  237. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
  238. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-bases/SKILL.md +0 -0
  239. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
  240. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-cli/SKILL.md +0 -0
  241. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
  242. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
  243. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
  244. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
  245. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/README.md +0 -0
  246. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/SKILL.md +0 -0
  247. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/addresses.json +0 -0
  248. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/advancedbackgroundchecks.json +0 -0
  249. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/beenverified.json +0 -0
  250. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/clustal.json +0 -0
  251. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/clustrmaps.json +0 -0
  252. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/cyberbackgroundchecks.json +0 -0
  253. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/familytreenow.json +0 -0
  254. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/fastpeoplesearch.json +0 -0
  255. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/intelius.json +0 -0
  256. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/mylife.json +0 -0
  257. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/nuwber.json +0 -0
  258. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/peekyou.json +0 -0
  259. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/peoplefinders.json +0 -0
  260. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/radaris.json +0 -0
  261. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/rehold.json +0 -0
  262. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/searchpeoplefree.json +0 -0
  263. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/socialcatfish.json +0 -0
  264. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/spokeo.json +0 -0
  265. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/thatsthem.json +0 -0
  266. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/truepeoplesearch.json +0 -0
  267. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/usphonebook.json +0 -0
  268. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/whitepages.json +0 -0
  269. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/legal/ccpa.md +0 -0
  270. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/legal/drop.md +0 -0
  271. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/legal/gdpr.md +0 -0
  272. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/methods.md +0 -0
  273. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/site-playbooks.md +0 -0
  274. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/state-machine.md +0 -0
  275. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/autopilot.py +0 -0
  276. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/badbool.py +0 -0
  277. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/brokers.py +0 -0
  278. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/cdp.py +0 -0
  279. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/config.py +0 -0
  280. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/crypto.py +0 -0
  281. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/dossier.py +0 -0
  282. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/email_modes.py +0 -0
  283. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/emailer.py +0 -0
  284. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/ledger.py +0 -0
  285. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/legal.py +0 -0
  286. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/paths.py +0 -0
  287. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/pdd.py +0 -0
  288. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/registry.py +0 -0
  289. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/report.py +0 -0
  290. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/scan.py +0 -0
  291. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/storage.py +0 -0
  292. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/tiers.py +0 -0
  293. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/vectors.py +0 -0
  294. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/consent/authorization.md +0 -0
  295. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/ccpa-authorized-agent.txt +0 -0
  296. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/ccpa-deletion.txt +0 -0
  297. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/ccpa-indirect-deletion.txt +0 -0
  298. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/gdpr-erasure.txt +0 -0
  299. {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/generic-optout.txt +0 -0
  300. {dulus-3.13.7 → dulus-3.13.9}/skill/clawhub.py +0 -0
  301. {dulus-3.13.7 → dulus-3.13.9}/skill/executor.py +0 -0
  302. {dulus-3.13.7 → dulus-3.13.9}/skill/loader.py +0 -0
  303. {dulus-3.13.7 → dulus-3.13.9}/skill/tools.py +0 -0
  304. {dulus-3.13.7 → dulus-3.13.9}/skills.py +0 -0
  305. {dulus-3.13.7 → dulus-3.13.9}/soul.py +0 -0
  306. {dulus-3.13.7 → dulus-3.13.9}/spinner.py +0 -0
  307. {dulus-3.13.7 → dulus-3.13.9}/steer_input.py +0 -0
  308. {dulus-3.13.7 → dulus-3.13.9}/subagent.py +0 -0
  309. {dulus-3.13.7 → dulus-3.13.9}/task/__init__.py +0 -0
  310. {dulus-3.13.7 → dulus-3.13.9}/task/store.py +0 -0
  311. {dulus-3.13.7 → dulus-3.13.9}/task/tools.py +0 -0
  312. {dulus-3.13.7 → dulus-3.13.9}/task/types.py +0 -0
  313. {dulus-3.13.7 → dulus-3.13.9}/tests/test_afk_yolo.py +0 -0
  314. {dulus-3.13.7 → dulus-3.13.9}/tests/test_approval_runtime.py +0 -0
  315. {dulus-3.13.7 → dulus-3.13.9}/tests/test_background_task_tools.py +0 -0
  316. {dulus-3.13.7 → dulus-3.13.9}/tests/test_background_tasks.py +0 -0
  317. {dulus-3.13.7 → dulus-3.13.9}/tests/test_chatgpt_oauth.py +0 -0
  318. {dulus-3.13.7 → dulus-3.13.9}/tests/test_checkpoint.py +0 -0
  319. {dulus-3.13.7 → dulus-3.13.9}/tests/test_cli_animations_integration.py +0 -0
  320. {dulus-3.13.7 → dulus-3.13.9}/tests/test_clipboard_utils.py +0 -0
  321. {dulus-3.13.7 → dulus-3.13.9}/tests/test_compaction.py +0 -0
  322. {dulus-3.13.7 → dulus-3.13.9}/tests/test_composio_tool_generator.py +0 -0
  323. {dulus-3.13.7 → dulus-3.13.9}/tests/test_diff_view.py +0 -0
  324. {dulus-3.13.7 → dulus-3.13.9}/tests/test_diff_visualization.py +0 -0
  325. {dulus-3.13.7 → dulus-3.13.9}/tests/test_display_blocks.py +0 -0
  326. {dulus-3.13.7 → dulus-3.13.9}/tests/test_dulus_account.py +0 -0
  327. {dulus-3.13.7 → dulus-3.13.9}/tests/test_export_import.py +0 -0
  328. {dulus-3.13.7 → dulus-3.13.9}/tests/test_gold_memory_preload.py +0 -0
  329. {dulus-3.13.7 → dulus-3.13.9}/tests/test_grok_usage.py +0 -0
  330. {dulus-3.13.7 → dulus-3.13.9}/tests/test_hook_engine.py +0 -0
  331. {dulus-3.13.7 → dulus-3.13.9}/tests/test_injection_fix.py +0 -0
  332. {dulus-3.13.7 → dulus-3.13.9}/tests/test_json_protocol.py +0 -0
  333. {dulus-3.13.7 → dulus-3.13.9}/tests/test_license.py +0 -0
  334. {dulus-3.13.7 → dulus-3.13.9}/tests/test_lookback_cache.py +0 -0
  335. {dulus-3.13.7 → dulus-3.13.9}/tests/test_lookback_compact.py +0 -0
  336. {dulus-3.13.7 → dulus-3.13.9}/tests/test_mcp.py +0 -0
  337. {dulus-3.13.7 → dulus-3.13.9}/tests/test_mcp_algolia.py +0 -0
  338. {dulus-3.13.7 → dulus-3.13.9}/tests/test_memory.py +0 -0
  339. {dulus-3.13.7 → dulus-3.13.9}/tests/test_memory_home_resolution.py +0 -0
  340. {dulus-3.13.7 → dulus-3.13.9}/tests/test_notification_manager.py +0 -0
  341. {dulus-3.13.7 → dulus-3.13.9}/tests/test_plugin.py +0 -0
  342. {dulus-3.13.7 → dulus-3.13.9}/tests/test_profile_isolation.py +0 -0
  343. {dulus-3.13.7 → dulus-3.13.9}/tests/test_profile_plugin_scope.py +0 -0
  344. {dulus-3.13.7 → dulus-3.13.9}/tests/test_provider_errors.py +0 -0
  345. {dulus-3.13.7 → dulus-3.13.9}/tests/test_session_fork.py +0 -0
  346. {dulus-3.13.7 → dulus-3.13.9}/tests/test_shell_detection.py +0 -0
  347. {dulus-3.13.7 → dulus-3.13.9}/tests/test_shell_mode.py +0 -0
  348. {dulus-3.13.7 → dulus-3.13.9}/tests/test_skills.py +0 -0
  349. {dulus-3.13.7 → dulus-3.13.9}/tests/test_skillssh_algolia.py +0 -0
  350. {dulus-3.13.7 → dulus-3.13.9}/tests/test_steer_input.py +0 -0
  351. {dulus-3.13.7 → dulus-3.13.9}/tests/test_subagent.py +0 -0
  352. {dulus-3.13.7 → dulus-3.13.9}/tests/test_task.py +0 -0
  353. {dulus-3.13.7 → dulus-3.13.9}/tests/test_telegram_buffer.py +0 -0
  354. {dulus-3.13.7 → dulus-3.13.9}/tests/test_think_tool.py +0 -0
  355. {dulus-3.13.7 → dulus-3.13.9}/tests/test_todo_tool.py +0 -0
  356. {dulus-3.13.7 → dulus-3.13.9}/tests/test_todo_visualization.py +0 -0
  357. {dulus-3.13.7 → dulus-3.13.9}/tests/test_tool_registry.py +0 -0
  358. {dulus-3.13.7 → dulus-3.13.9}/tests/test_tree_ls.py +0 -0
  359. {dulus-3.13.7 → dulus-3.13.9}/tests/test_voice.py +0 -0
  360. {dulus-3.13.7 → dulus-3.13.9}/tests/test_webbridge_tabs.py +0 -0
  361. {dulus-3.13.7 → dulus-3.13.9}/tests/test_wire_events.py +0 -0
  362. {dulus-3.13.7 → dulus-3.13.9}/tmux_tools.py +0 -0
  363. {dulus-3.13.7 → dulus-3.13.9}/token_budget.py +0 -0
  364. {dulus-3.13.7 → dulus-3.13.9}/tool_registry.py +0 -0
  365. {dulus-3.13.7 → dulus-3.13.9}/tools_background.py +0 -0
  366. {dulus-3.13.7 → dulus-3.13.9}/tools_think.py +0 -0
  367. {dulus-3.13.7 → dulus-3.13.9}/tools_todo.py +0 -0
  368. {dulus-3.13.7 → dulus-3.13.9}/ui/__init__.py +0 -0
  369. {dulus-3.13.7 → dulus-3.13.9}/ui/input.py +0 -0
  370. {dulus-3.13.7 → dulus-3.13.9}/ui/render.py +0 -0
  371. {dulus-3.13.7 → dulus-3.13.9}/updater.py +0 -0
  372. {dulus-3.13.7 → dulus-3.13.9}/voice/__init__.py +0 -0
  373. {dulus-3.13.7 → dulus-3.13.9}/voice/audio_utils.py +0 -0
  374. {dulus-3.13.7 → dulus-3.13.9}/voice/keyterms.py +0 -0
  375. {dulus-3.13.7 → dulus-3.13.9}/voice/recorder.py +0 -0
  376. {dulus-3.13.7 → dulus-3.13.9}/voice/stt.py +0 -0
  377. {dulus-3.13.7 → dulus-3.13.9}/voice/tts.py +0 -0
  378. {dulus-3.13.7 → dulus-3.13.9}/voice/wake_word.py +0 -0
  379. {dulus-3.13.7 → dulus-3.13.9}/webbridge/__init__.py +0 -0
  380. {dulus-3.13.7 → dulus-3.13.9}/webbridge/core.py +0 -0
  381. {dulus-3.13.7 → dulus-3.13.9}/webbridge/tools.py +0 -0
  382. {dulus-3.13.7 → dulus-3.13.9}/webchat.py +0 -0
  383. {dulus-3.13.7 → dulus-3.13.9}/webchat_server.py +0 -0
  384. {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/__init__.py +0 -0
  385. {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/app.js +0 -0
  386. {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/index.html +0 -0
  387. {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/style.css +0 -0
  388. {dulus-3.13.7 → dulus-3.13.9}/welcome.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dulus
3
- Version: 3.13.7
3
+ Version: 3.13.9
4
4
  Summary: Provider-independent agent runtime for the terminal — cloud and local models, real tools, MCP, plugins, memory, sub-agents, and Dulus OS.
5
5
  Author-email: KevRojo <dev@dulus.ai>
6
6
  Maintainer-email: KevRojo <dev@dulus.ai>
@@ -106,6 +106,53 @@ Requires-Dist: pytesseract>=0.3.10; extra == "full"
106
106
  <img width="1179" height="761" alt="image" src="https://github.com/user-attachments/assets/95c8a306-88e6-4f9d-a1aa-009ac38ebeaf" />
107
107
  </p>
108
108
 
109
+ <p align="center">
110
+ <a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
111
+ ·
112
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
113
+ ·
114
+ <a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
115
+ </p>
116
+
117
+ <p align="center">
118
+ <strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
119
+ <a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
120
+ </p>
121
+
122
+ <p align="center">
123
+ <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="PyPI version"></a>
124
+ <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
125
+ <a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
126
+ <a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
127
+ <a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
128
+ <img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
129
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
130
+ </p>
131
+
132
+ <p align="center">
133
+ <a href="#install-in-30-seconds"><strong>Install</strong></a> ·
134
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
135
+ <a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
136
+ <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
137
+ <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
138
+ <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
139
+ <a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
140
+ <a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
141
+ <a href="#command-map"><strong>Commands</strong></a> ·
142
+ <a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
143
+ </p>
144
+
145
+ <p align="center">
146
+ <a href="docs/README_ES.md">Español</a> ·
147
+ <a href="docs/README_FR.md">Français</a> ·
148
+ <a href="docs/README_ZH.md">中文</a> ·
149
+ <a href="docs/README_JA.md">日本語</a> ·
150
+ <a href="docs/README_KO.md">한국어</a> ·
151
+ <a href="docs/README_PT.md">Português</a> ·
152
+ <a href="docs/README_RU.md">Русский</a> ·
153
+ <a href="docs/README_AR.md">العربية</a>
154
+ </p>
155
+
109
156
  <p align="center">
110
157
  <strong>Agentic AI for everyone. No API key. No credit card. Just <code>pip install</code>.</strong>
111
158
  </p>
@@ -181,52 +228,6 @@ dulus
181
228
  <strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
182
229
  </p>
183
230
 
184
- <p align="center">
185
- <a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
186
- ·
187
- <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
188
- ·
189
- <a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
190
- </p>
191
-
192
- <p align="center">
193
- <strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
194
- <a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
195
- </p>
196
-
197
- <p align="center">
198
- <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="PyPI version"></a>
199
- <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
200
- <a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
201
- <a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
202
- <a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
203
- <img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
204
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
205
- </p>
206
-
207
- <p align="center">
208
- <a href="#install-in-30-seconds"><strong>Install</strong></a> ·
209
- <a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
210
- <a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
211
- <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
212
- <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
213
- <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
214
- <a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
215
- <a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
216
- <a href="#command-map"><strong>Commands</strong></a> ·
217
- <a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
218
- </p>
219
-
220
- <p align="center">
221
- <a href="docs/README_ES.md">Español</a> ·
222
- <a href="docs/README_FR.md">Français</a> ·
223
- <a href="docs/README_ZH.md">中文</a> ·
224
- <a href="docs/README_JA.md">日本語</a> ·
225
- <a href="docs/README_KO.md">한국어</a> ·
226
- <a href="docs/README_PT.md">Português</a> ·
227
- <a href="docs/README_RU.md">Русский</a> ·
228
- <a href="docs/README_AR.md">العربية</a>
229
- </p>
230
231
 
231
232
  ---
232
233
 
@@ -8,6 +8,53 @@
8
8
  <img width="1179" height="761" alt="image" src="https://github.com/user-attachments/assets/95c8a306-88e6-4f9d-a1aa-009ac38ebeaf" />
9
9
  </p>
10
10
 
11
+ <p align="center">
12
+ <a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
13
+ ·
14
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
15
+ ·
16
+ <a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
17
+ </p>
18
+
19
+ <p align="center">
20
+ <strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
21
+ <a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
22
+ </p>
23
+
24
+ <p align="center">
25
+ <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="PyPI version"></a>
26
+ <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
27
+ <a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
28
+ <a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
29
+ <a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
30
+ <img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
31
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
32
+ </p>
33
+
34
+ <p align="center">
35
+ <a href="#install-in-30-seconds"><strong>Install</strong></a> ·
36
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
37
+ <a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
38
+ <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
39
+ <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
40
+ <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
41
+ <a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
42
+ <a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
43
+ <a href="#command-map"><strong>Commands</strong></a> ·
44
+ <a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
45
+ </p>
46
+
47
+ <p align="center">
48
+ <a href="docs/README_ES.md">Español</a> ·
49
+ <a href="docs/README_FR.md">Français</a> ·
50
+ <a href="docs/README_ZH.md">中文</a> ·
51
+ <a href="docs/README_JA.md">日本語</a> ·
52
+ <a href="docs/README_KO.md">한국어</a> ·
53
+ <a href="docs/README_PT.md">Português</a> ·
54
+ <a href="docs/README_RU.md">Русский</a> ·
55
+ <a href="docs/README_AR.md">العربية</a>
56
+ </p>
57
+
11
58
  <p align="center">
12
59
  <strong>Agentic AI for everyone. No API key. No credit card. Just <code>pip install</code>.</strong>
13
60
  </p>
@@ -83,52 +130,6 @@ dulus
83
130
  <strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
84
131
  </p>
85
132
 
86
- <p align="center">
87
- <a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
88
- ·
89
- <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
90
- ·
91
- <a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
92
- </p>
93
-
94
- <p align="center">
95
- <strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
96
- <a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
97
- </p>
98
-
99
- <p align="center">
100
- <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="PyPI version"></a>
101
- <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
102
- <a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
103
- <a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
104
- <a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
105
- <img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
106
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
107
- </p>
108
-
109
- <p align="center">
110
- <a href="#install-in-30-seconds"><strong>Install</strong></a> ·
111
- <a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
112
- <a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
113
- <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
114
- <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
115
- <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
116
- <a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
117
- <a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
118
- <a href="#command-map"><strong>Commands</strong></a> ·
119
- <a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
120
- </p>
121
-
122
- <p align="center">
123
- <a href="docs/README_ES.md">Español</a> ·
124
- <a href="docs/README_FR.md">Français</a> ·
125
- <a href="docs/README_ZH.md">中文</a> ·
126
- <a href="docs/README_JA.md">日本語</a> ·
127
- <a href="docs/README_KO.md">한국어</a> ·
128
- <a href="docs/README_PT.md">Português</a> ·
129
- <a href="docs/README_RU.md">Русский</a> ·
130
- <a href="docs/README_AR.md">العربية</a>
131
- </p>
132
133
 
133
134
  ---
134
135
 
@@ -170,6 +170,11 @@ DEFAULTS = {
170
170
  # via the rtk binary for token-optimized output. Soft-fallback if rtk is
171
171
  # missing. Linux/Mac users: bash rtk/install.sh to fetch the binary.
172
172
  "rtk_enabled": True,
173
+ # Workspace Isolate — when ON, Write/Edit/NotebookEdit/Bash cannot modify
174
+ # files outside the locked workspace root (frozen into isolate_root on
175
+ # toggle-ON). Expand with /add-dir. OFF by default.
176
+ "isolate": False,
177
+ "isolate_root": "",
173
178
  }
174
179
 
175
180
 
@@ -17,6 +17,7 @@ You are Dulus, an AI coding agent. Think in English; reply to {user_name} in {re
17
17
  # Identity: Your name is Dulus. Do NOT proactively declare this — only if the user asks "quién eres" or "qué modelo eres".
18
18
  # Forbidden: Do NOT claim to be Qwen, Llama, GPT, Claude, Gemini, DeepSeek, or any underlying model. Do NOT mention Ollama or your runtime stack.
19
19
  # Env: {cwd} | {platform} | auto_show={auto_show}
20
+ {isolate_rule}
20
21
  # Autonomy: Background scripts (nohup/&) allowed | Never refuse monitoring/long tasks | Always wait for tool results before replying
21
22
  # Tools: SearchLastOutput → for [TRUNCATED] | WebFetch/WebSearch → web | TmuxOffload → tasks > 5s | ReadJob → background results
22
23
  # EFFICIENCY LAW (hard rule, zero exceptions): Tool calls cost round-trips + tokens — MINIMIZE them ruthlessly. NEVER drip-feed Grep/Glob/Read calls to hunt something: ONE Python() call that os.walk()s the tree and filters in kernel memory replaces 10+ search calls. If you're about to fire your 3rd search/read call for the SAME investigation, STOP — switch to Python and finish the whole hunt there (walk + regex + parse, print only the final slice). INDEPENDENT calls (reads, searches, fetches) → emit ALL of them in ONE response, never one per turn. DEPENDENT steps (scan → filter → drill down) → chain them INSIDE a single Python()/Bash() call, not across turns. The Python console is your working memory: load once, query forever.
@@ -25,7 +26,7 @@ You are Dulus, an AI coding agent. Think in English; reply to {user_name} in {re
25
26
  # Multi-agent: Agent(subagent_type=...) | isolation="worktree" runs parallel | wait=false + name=... for fire-and-forget
26
27
  # Rules: Edit > Write | Use absolute paths + line numbers | Surface errors immediately, do not retry blindly
27
28
  # Input: "🎙 Transcribed:" prefix = voice input — tolerate typos/misspellings
28
- # REPL: /help /batch /auto_show /verbose /soul /memory /schema /thinking /config
29
+ # REPL: /help /batch /auto_show /isolate /verbose /soul /memory /schema /thinking /config
29
30
  {platform_hints}{git_info}{dulus_md}"""
30
31
 
31
32
  _THINKING_LABELS = {1: "minimal", 2: "moderate", 3: "deep"}
@@ -468,6 +469,14 @@ def build_system_prompt(config: dict | None = None) -> str:
468
469
  auto_show = "ON" if (not config or config.get("auto_show", True)) else "OFF"
469
470
  lite = bool(config and config.get("lite_mode"))
470
471
 
472
+ # Isolate fragment is empty when OFF so the prompt stays byte-stable for
473
+ # prompt-cache across toggles-off sessions; when ON it injects a hard rule.
474
+ try:
475
+ from dulus_tools.isolate import prompt_fragment as _isolate_prompt_fragment
476
+ isolate_rule = _isolate_prompt_fragment(config)
477
+ except Exception:
478
+ isolate_rule = ""
479
+
471
480
  # In LITE mode: drop the optional context blocks (platform hints, git info,
472
481
  # DULUS.md, project memory index, batch/thinking/plan/tmux hints). The
473
482
  # core identity + tool rules stay. This is what the /lite toggle was
@@ -479,6 +488,7 @@ def build_system_prompt(config: dict | None = None) -> str:
479
488
  cwd=str(Path.cwd()),
480
489
  platform=platform.system(),
481
490
  auto_show=auto_show,
491
+ isolate_rule=isolate_rule,
482
492
  user_name=user_name,
483
493
  reply_language=reply_language,
484
494
  platform_hints="" if lite else get_platform_hints(config),
@@ -5,6 +5,21 @@ All notable changes to Dulus will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## 3.13.9 — 2026-09-01
9
+
10
+ ### Added
11
+ - **`/isolate [on|off|status]`**: locks Write / Edit / NotebookEdit and Bash mutations (`rm`, `mv`, `cp`, redirects, heredocs, pipes-to-file, etc.) to the frozen workspace root (+ dirs from `/add-dir`). Read-only tools stay free. Pure workspace bubble — no `/temp` escape hatch.
12
+ - Module: `dulus_tools/isolate.py` · wired through `tools.py` execute gate, `dulus.py` slash dispatch, `context.py` system-prompt hint, `config.py` default `isolate: false`.
13
+ - When blocked, Dulus tells you: *"/isolate no me deja trabajar fuera del workspace — escribe `/isolate off` si quieres que te ayude afuera"*.
14
+
15
+ ### Tests
16
+ - Live-verified in tmux: writes outside DENY, writes inside OK; Bash mutations gated the same way.
17
+
18
+ ## 3.13.8 — 2026-09-01
19
+
20
+ - **fix(gemini-web):** revert EU consent helpers that broke harvest (composer never mounted / spray-clicked Gemini UI).
21
+ - **docs:** README top nav under first 2 photos; community installs blurb → 100,000+.
22
+
8
23
  ## [Unreleased]
9
24
 
10
25
  ## [3.13.7] - 2026-09-01
@@ -2,9 +2,13 @@
2
2
 
3
3
  ## 🔥🔥🔥 News (Pacific Time)
4
4
 
5
+ - September 1, 2026 (**v3.13.9**): **🔒 `/isolate` — workspace bubble, on demand.** Flip `/isolate on` and Write / Edit / NotebookEdit + Bash mutations stay locked to the frozen workspace root (plus anything you added with `/add-dir`). Read-only tools keep flying free. No `/temp` backdoor — pure bubble. Blocked? Dulus tells you straight: write `/isolate off` if you want help outside. `pip install -U dulus`. 🦅
6
+
7
+ - September 1, 2026 (**v3.13.8**): **Gemini-web harvest unblocked.** Reverted the EU/GDPR consent spray-click helpers (`_dismiss_eu_privacy_gates` / fabricated SOCS seed) that broke composer mount and left harvest hanging. Public `/harvest-gemini` is back to the pre-3.13.7 path. README top nav tightened under the first two photos; community blurb corrected to **100,000+ pip installs**. `pip install -U dulus`. 🦅
8
+
5
9
  - September 1, 2026 (**v3.13.7 — 🔥 TODAY — Qwen UNCENSORED on the endpoint**): **Stock Fuel. Now.** Run `/login dulus`, then `/fuel` for balance + a console QR you can scan with Phantom/Solflare. Our router is **OpenAI-compatible** at `https://control.dulus.ai/v1` — drop it into anything that speaks `/v1/chat/completions`. **Today** we put **Qwen UNCENSORED** on that endpoint. Buy `$DULUS`, load Fuel, go. No premium pitch, no binary wall — the open runtime stays free; Fuel pays for hosted compute. `pip install -U dulus`. 🦅🇩🇴⛽
6
10
 
7
- - August 31, 2026 (**Community — EU & the world**): **Something is happening — and we’re not slowing down.** **~25,000 pip installs** and climbing. Git clones just ripped: **2,058 clones / 326 unique cloners in 14 days**, with a vertical spike at the end of the month. To our people in **Europe**, this one’s for you. Google’s **GDPR / “Before you continue” consent walls**, cookie banners, and privacy popups used to brick keyless Gemini harvest on EEA and headless EU boxes (OVH, Hetzner, and friends) — no human to click **Accept**, composer never mounts, intercept times out. Dulus now ships a real **popup / consent solver**: pre-seeds Google `CONSENT` + `SOCS` cookies, dismisses EU privacy gates across the main page **and** consent iframes, multi-locale Accept clicks (`Accept all` / `Aceptar todo` / `Tout accepter` / `Alle akzeptieren` / …), so the agent can actually reach the chat. `/news` is now a live **broadcast** (latest 3 by default — no more dumping the whole archive into your console). Same posture as always — **no API key, no credit card, your machine**. Humans built this for humans. Europe, you’re in. Everybody else too. We’ll keep shipping like this. Love you. `pip install -U dulus`. 🦅🇩🇴
11
+ - August 31, 2026 (**Community — EU & the world**): **Something is happening — and we’re not slowing down.** **100,000+ pip installs** and climbing. Git clones just ripped: **2,058 clones / 326 unique cloners in 14 days**, with a vertical spike at the end of the month. To our people in **Europe**, this one’s for you. `/news` is now a live **broadcast** (latest 3 by default — no more dumping the whole archive into your console). Same posture as always — **no API key, no credit card, your machine**. Humans built this for humans. Europe, you’re in. Everybody else too. We’ll keep shipping like this. Love you. `pip install -U dulus`. 🦅🇩🇴
8
12
 
9
13
  - August 31, 2026 (**v3.13.6**): **CI quality locked green.** WebChat guards `CONFIG` before pop (pyright clean) and background workers launch Windows-safe without bash-quoted `python -c` — win-3.13 flake gone. Hotfix patch on top of 3.13.5. `pip install -U dulus`. 🦅
10
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dulus
3
- Version: 3.13.7
3
+ Version: 3.13.9
4
4
  Summary: Provider-independent agent runtime for the terminal — cloud and local models, real tools, MCP, plugins, memory, sub-agents, and Dulus OS.
5
5
  Author-email: KevRojo <dev@dulus.ai>
6
6
  Maintainer-email: KevRojo <dev@dulus.ai>
@@ -106,6 +106,53 @@ Requires-Dist: pytesseract>=0.3.10; extra == "full"
106
106
  <img width="1179" height="761" alt="image" src="https://github.com/user-attachments/assets/95c8a306-88e6-4f9d-a1aa-009ac38ebeaf" />
107
107
  </p>
108
108
 
109
+ <p align="center">
110
+ <a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
111
+ ·
112
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
113
+ ·
114
+ <a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
115
+ </p>
116
+
117
+ <p align="center">
118
+ <strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
119
+ <a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
120
+ </p>
121
+
122
+ <p align="center">
123
+ <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="PyPI version"></a>
124
+ <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
125
+ <a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
126
+ <a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
127
+ <a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
128
+ <img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
129
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
130
+ </p>
131
+
132
+ <p align="center">
133
+ <a href="#install-in-30-seconds"><strong>Install</strong></a> ·
134
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
135
+ <a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
136
+ <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
137
+ <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
138
+ <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
139
+ <a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
140
+ <a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
141
+ <a href="#command-map"><strong>Commands</strong></a> ·
142
+ <a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
143
+ </p>
144
+
145
+ <p align="center">
146
+ <a href="docs/README_ES.md">Español</a> ·
147
+ <a href="docs/README_FR.md">Français</a> ·
148
+ <a href="docs/README_ZH.md">中文</a> ·
149
+ <a href="docs/README_JA.md">日本語</a> ·
150
+ <a href="docs/README_KO.md">한국어</a> ·
151
+ <a href="docs/README_PT.md">Português</a> ·
152
+ <a href="docs/README_RU.md">Русский</a> ·
153
+ <a href="docs/README_AR.md">العربية</a>
154
+ </p>
155
+
109
156
  <p align="center">
110
157
  <strong>Agentic AI for everyone. No API key. No credit card. Just <code>pip install</code>.</strong>
111
158
  </p>
@@ -181,52 +228,6 @@ dulus
181
228
  <strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
182
229
  </p>
183
230
 
184
- <p align="center">
185
- <a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
186
- ·
187
- <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
188
- ·
189
- <a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
190
- </p>
191
-
192
- <p align="center">
193
- <strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
194
- <a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
195
- </p>
196
-
197
- <p align="center">
198
- <a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="PyPI version"></a>
199
- <a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
200
- <a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
201
- <a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
202
- <a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
203
- <img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
204
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
205
- </p>
206
-
207
- <p align="center">
208
- <a href="#install-in-30-seconds"><strong>Install</strong></a> ·
209
- <a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
210
- <a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
211
- <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
212
- <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
213
- <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
214
- <a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
215
- <a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
216
- <a href="#command-map"><strong>Commands</strong></a> ·
217
- <a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
218
- </p>
219
-
220
- <p align="center">
221
- <a href="docs/README_ES.md">Español</a> ·
222
- <a href="docs/README_FR.md">Français</a> ·
223
- <a href="docs/README_ZH.md">中文</a> ·
224
- <a href="docs/README_JA.md">日本語</a> ·
225
- <a href="docs/README_KO.md">한국어</a> ·
226
- <a href="docs/README_PT.md">Português</a> ·
227
- <a href="docs/README_RU.md">Русский</a> ·
228
- <a href="docs/README_AR.md">العربية</a>
229
- </p>
230
231
 
231
232
  ---
232
233
 
@@ -173,6 +173,7 @@ dulus_tools/clipboard_utils.py
173
173
  dulus_tools/diff_visualizer.py
174
174
  dulus_tools/export_import.py
175
175
  dulus_tools/hook_engine.py
176
+ dulus_tools/isolate.py
176
177
  dulus_tools/notification_manager.py
177
178
  dulus_tools/session_fork.py
178
179
  dulus_tools/shell_mode.py