dulus 3.13.1__tar.gz → 3.13.2__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 (386) hide show
  1. {dulus-3.13.1/dulus.egg-info → dulus-3.13.2}/PKG-INFO +168 -11
  2. {dulus-3.13.1 → dulus-3.13.2}/README.md +166 -10
  3. {dulus-3.13.1 → dulus-3.13.2}/docs/CHANGELOG.md +12 -0
  4. {dulus-3.13.1 → dulus-3.13.2}/docs/README.md +0 -1
  5. {dulus-3.13.1 → dulus-3.13.2}/docs/news.md +3 -0
  6. {dulus-3.13.1 → dulus-3.13.2/dulus.egg-info}/PKG-INFO +168 -11
  7. {dulus-3.13.1 → dulus-3.13.2}/dulus.egg-info/SOURCES.txt +0 -2
  8. {dulus-3.13.1 → dulus-3.13.2}/dulus.egg-info/requires.txt +1 -0
  9. {dulus-3.13.1 → dulus-3.13.2}/dulus.egg-info/top_level.txt +1 -0
  10. {dulus-3.13.1 → dulus-3.13.2}/dulus.py +56 -2
  11. {dulus-3.13.1 → dulus-3.13.2}/dulus_account.py +96 -0
  12. {dulus-3.13.1 → dulus-3.13.2}/pyproject.toml +3 -1
  13. dulus-3.13.1/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
  14. dulus-3.13.1/docs/Dulus_YC_Company_Overview_Aug_2026.pdf +1 -504
  15. {dulus-3.13.1 → dulus-3.13.2}/LICENSE +0 -0
  16. {dulus-3.13.1 → dulus-3.13.2}/MANIFEST.in +0 -0
  17. {dulus-3.13.1 → dulus-3.13.2}/agent.py +0 -0
  18. {dulus-3.13.1 → dulus-3.13.2}/algolia_search.py +0 -0
  19. {dulus-3.13.1 → dulus-3.13.2}/analytics.py +0 -0
  20. {dulus-3.13.1 → dulus-3.13.2}/backend/__init__.py +0 -0
  21. {dulus-3.13.1 → dulus-3.13.2}/backend/agents_bridge.py +0 -0
  22. {dulus-3.13.1 → dulus-3.13.2}/backend/compressor.py +0 -0
  23. {dulus-3.13.1 → dulus-3.13.2}/backend/context.py +0 -0
  24. {dulus-3.13.1 → dulus-3.13.2}/backend/githook.py +0 -0
  25. {dulus-3.13.1 → dulus-3.13.2}/backend/marketplace.py +0 -0
  26. {dulus-3.13.1 → dulus-3.13.2}/backend/mempalace_bridge.py +0 -0
  27. {dulus-3.13.1 → dulus-3.13.2}/backend/paths.py +0 -0
  28. {dulus-3.13.1 → dulus-3.13.2}/backend/personas.py +0 -0
  29. {dulus-3.13.1 → dulus-3.13.2}/backend/plugins.py +0 -0
  30. {dulus-3.13.1 → dulus-3.13.2}/backend/server.py +0 -0
  31. {dulus-3.13.1 → dulus-3.13.2}/backend/tasks.py +0 -0
  32. {dulus-3.13.1 → dulus-3.13.2}/banners/__init__.py +0 -0
  33. {dulus-3.13.1 → dulus-3.13.2}/banners/banner_rotator.py +0 -0
  34. {dulus-3.13.1 → dulus-3.13.2}/banners/banners_dulus_ai.txt +0 -0
  35. {dulus-3.13.1 → dulus-3.13.2}/batch_api.py +0 -0
  36. {dulus-3.13.1 → dulus-3.13.2}/checkpoint/__init__.py +0 -0
  37. {dulus-3.13.1 → dulus-3.13.2}/checkpoint/hooks.py +0 -0
  38. {dulus-3.13.1 → dulus-3.13.2}/checkpoint/store.py +0 -0
  39. {dulus-3.13.1 → dulus-3.13.2}/checkpoint/types.py +0 -0
  40. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/__init__.py +0 -0
  41. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/__main__.py +0 -0
  42. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/ansi.py +0 -0
  43. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/assets/ascii/dulus_logo.txt +0 -0
  44. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/assets/ascii/eagle.txt +0 -0
  45. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/assets/ascii/terminal_art.txt +0 -0
  46. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/banners.py +0 -0
  47. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/demo.py +0 -0
  48. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/effects.py +0 -0
  49. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/effort_slider.py +0 -0
  50. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/progress.py +0 -0
  51. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/py.typed +0 -0
  52. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/spinners.py +0 -0
  53. {dulus-3.13.1 → dulus-3.13.2}/cli_animations/status.py +0 -0
  54. {dulus-3.13.1 → dulus-3.13.2}/clipboard_utils.py +0 -0
  55. {dulus-3.13.1 → dulus-3.13.2}/cloudsave.py +0 -0
  56. {dulus-3.13.1 → dulus-3.13.2}/common.py +0 -0
  57. {dulus-3.13.1 → dulus-3.13.2}/compaction.py +0 -0
  58. {dulus-3.13.1 → dulus-3.13.2}/config.py +0 -0
  59. {dulus-3.13.1 → dulus-3.13.2}/context.py +0 -0
  60. {dulus-3.13.1 → dulus-3.13.2}/data/__init__.py +0 -0
  61. {dulus-3.13.1 → dulus-3.13.2}/data/active_persona.json +0 -0
  62. {dulus-3.13.1 → dulus-3.13.2}/data/marketplace.json +0 -0
  63. {dulus-3.13.1 → dulus-3.13.2}/data/personas.json +0 -0
  64. {dulus-3.13.1 → dulus-3.13.2}/data/plugins/__init__.py +0 -0
  65. {dulus-3.13.1 → dulus-3.13.2}/data/plugins/composio/__init__.py +0 -0
  66. {dulus-3.13.1 → dulus-3.13.2}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  67. {dulus-3.13.1 → dulus-3.13.2}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  68. {dulus-3.13.1 → dulus-3.13.2}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
  69. {dulus-3.13.1 → dulus-3.13.2}/data/plugins/composio/plugin.json +0 -0
  70. {dulus-3.13.1 → dulus-3.13.2}/data/plugins/composio/plugin_tool.py +0 -0
  71. {dulus-3.13.1 → dulus-3.13.2}/data/tasks.json +0 -0
  72. {dulus-3.13.1 → dulus-3.13.2}/display_blocks.py +0 -0
  73. {dulus-3.13.1 → dulus-3.13.2}/docs/API.md +0 -0
  74. {dulus-3.13.1 → dulus-3.13.2}/docs/BRAND_GUIDE.md +0 -0
  75. {dulus-3.13.1 → dulus-3.13.2}/docs/CONTRIBUTING.md +0 -0
  76. {dulus-3.13.1 → dulus-3.13.2}/docs/DEPLOYMENT.md +0 -0
  77. {dulus-3.13.1 → dulus-3.13.2}/docs/FAQ.md +0 -0
  78. {dulus-3.13.1 → dulus-3.13.2}/docs/GETTING_STARTED.md +0 -0
  79. {dulus-3.13.1 → dulus-3.13.2}/docs/README_AR.md +0 -0
  80. {dulus-3.13.1 → dulus-3.13.2}/docs/README_EN.md +0 -0
  81. {dulus-3.13.1 → dulus-3.13.2}/docs/README_ES.md +0 -0
  82. {dulus-3.13.1 → dulus-3.13.2}/docs/README_FR.md +0 -0
  83. {dulus-3.13.1 → dulus-3.13.2}/docs/README_JA.md +0 -0
  84. {dulus-3.13.1 → dulus-3.13.2}/docs/README_KO.md +0 -0
  85. {dulus-3.13.1 → dulus-3.13.2}/docs/README_PT.md +0 -0
  86. {dulus-3.13.1 → dulus-3.13.2}/docs/README_RU.md +0 -0
  87. {dulus-3.13.1 → dulus-3.13.2}/docs/README_ZH.md +0 -0
  88. {dulus-3.13.1 → dulus-3.13.2}/docs/SECURITY.md +0 -0
  89. {dulus-3.13.1 → dulus-3.13.2}/docs/__init__.py +0 -0
  90. {dulus-3.13.1 → dulus-3.13.2}/docs/api.html +0 -0
  91. {dulus-3.13.1 → dulus-3.13.2}/docs/architecture.md +0 -0
  92. {dulus-3.13.1 → dulus-3.13.2}/docs/azure-speech-template.json +0 -0
  93. {dulus-3.13.1 → dulus-3.13.2}/docs/dashboard/index.html +0 -0
  94. {dulus-3.13.1 → dulus-3.13.2}/docs/divider.svg +0 -0
  95. {dulus-3.13.1 → dulus-3.13.2}/docs/dulus-bird.png +0 -0
  96. {dulus-3.13.1 → dulus-3.13.2}/docs/generate.py +0 -0
  97. {dulus-3.13.1 → dulus-3.13.2}/docs/index.html +0 -0
  98. {dulus-3.13.1 → dulus-3.13.2}/docs/nvidia-models.svg +0 -0
  99. {dulus-3.13.1 → dulus-3.13.2}/docs/particle-playground.html +0 -0
  100. {dulus-3.13.1 → dulus-3.13.2}/docs/personas/index.html +0 -0
  101. {dulus-3.13.1 → dulus-3.13.2}/docs/poetry-banner.png +0 -0
  102. {dulus-3.13.1 → dulus-3.13.2}/docs/preview.html +0 -0
  103. {dulus-3.13.1 → dulus-3.13.2}/docs/python-console.md +0 -0
  104. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/auto-adapter.png +0 -0
  105. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/dulus-os.png +0 -0
  106. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/hero.png +0 -0
  107. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/lookback_two_windows.png +0 -0
  108. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/pyc_heap.svg +0 -0
  109. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/pyc_receipts.svg +0 -0
  110. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/pyc_trap.svg +0 -0
  111. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/roundtable.png +0 -0
  112. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/task-board.png +0 -0
  113. {dulus-3.13.1 → dulus-3.13.2}/docs/readme/webchat.png +0 -0
  114. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-agents.svg +0 -0
  115. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-brainstorm.svg +0 -0
  116. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-bridges.svg +0 -0
  117. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-features.svg +0 -0
  118. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-freetier.svg +0 -0
  119. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-memory.svg +0 -0
  120. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-models.svg +0 -0
  121. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-perms.svg +0 -0
  122. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-plugins.svg +0 -0
  123. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-quickstart.svg +0 -0
  124. {dulus-3.13.1 → dulus-3.13.2}/docs/sec-ssj.svg +0 -0
  125. {dulus-3.13.1 → dulus-3.13.2}/docs/spinners.svg +0 -0
  126. {dulus-3.13.1 → dulus-3.13.2}/docs/split-pane.svg +0 -0
  127. {dulus-3.13.1 → dulus-3.13.2}/docs/terminal-boot.svg +0 -0
  128. {dulus-3.13.1 → dulus-3.13.2}/docs/termux-edge.md +0 -0
  129. {dulus-3.13.1 → dulus-3.13.2}/dulus.egg-info/dependency_links.txt +0 -0
  130. {dulus-3.13.1 → dulus-3.13.2}/dulus.egg-info/entry_points.txt +0 -0
  131. {dulus-3.13.1 → dulus-3.13.2}/dulus_bar_client.py +0 -0
  132. {dulus-3.13.1 → dulus-3.13.2}/dulus_gui.py +0 -0
  133. {dulus-3.13.1 → dulus-3.13.2}/dulus_mcp/__init__.py +0 -0
  134. {dulus-3.13.1 → dulus-3.13.2}/dulus_mcp/client.py +0 -0
  135. {dulus-3.13.1 → dulus-3.13.2}/dulus_mcp/commands.py +0 -0
  136. {dulus-3.13.1 → dulus-3.13.2}/dulus_mcp/config.py +0 -0
  137. {dulus-3.13.1 → dulus-3.13.2}/dulus_mcp/hub.py +0 -0
  138. {dulus-3.13.1 → dulus-3.13.2}/dulus_mcp/tools.py +0 -0
  139. {dulus-3.13.1 → dulus-3.13.2}/dulus_mcp/types.py +0 -0
  140. {dulus-3.13.1 → dulus-3.13.2}/dulus_quick_menu.py +0 -0
  141. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/__init__.py +0 -0
  142. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/add_dir_manager.py +0 -0
  143. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/afk_mode.py +0 -0
  144. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/approval_runtime.py +0 -0
  145. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/background_tasks.py +0 -0
  146. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/clipboard_utils.py +0 -0
  147. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/diff_visualizer.py +0 -0
  148. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/export_import.py +0 -0
  149. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/hook_engine.py +0 -0
  150. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/notification_manager.py +0 -0
  151. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/session_fork.py +0 -0
  152. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/shell_mode.py +0 -0
  153. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/todo_visualizer.py +0 -0
  154. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/tree_ls.py +0 -0
  155. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/wire_events.py +0 -0
  156. {dulus-3.13.1 → dulus-3.13.2}/dulus_tools/yolo_mode.py +0 -0
  157. {dulus-3.13.1 → dulus-3.13.2}/file_filter.py +0 -0
  158. {dulus-3.13.1 → dulus-3.13.2}/fs_compass.py +0 -0
  159. {dulus-3.13.1 → dulus-3.13.2}/governance.py +0 -0
  160. {dulus-3.13.1 → dulus-3.13.2}/gui/__init__.py +0 -0
  161. {dulus-3.13.1 → dulus-3.13.2}/gui/agent_bridge.py +0 -0
  162. {dulus-3.13.1 → dulus-3.13.2}/gui/chat_widget.py +0 -0
  163. {dulus-3.13.1 → dulus-3.13.2}/gui/main_window.py +0 -0
  164. {dulus-3.13.1 → dulus-3.13.2}/gui/personas.py +0 -0
  165. {dulus-3.13.1 → dulus-3.13.2}/gui/sandbox_server.py +0 -0
  166. {dulus-3.13.1 → dulus-3.13.2}/gui/session_utils.py +0 -0
  167. {dulus-3.13.1 → dulus-3.13.2}/gui/settings_dialog.py +0 -0
  168. {dulus-3.13.1 → dulus-3.13.2}/gui/sidebar.py +0 -0
  169. {dulus-3.13.1 → dulus-3.13.2}/gui/tasks_view.py +0 -0
  170. {dulus-3.13.1 → dulus-3.13.2}/gui/themes.py +0 -0
  171. {dulus-3.13.1 → dulus-3.13.2}/gui/tool_panel.py +0 -0
  172. {dulus-3.13.1 → dulus-3.13.2}/input.py +0 -0
  173. {dulus-3.13.1 → dulus-3.13.2}/license_manager.py +0 -0
  174. {dulus-3.13.1 → dulus-3.13.2}/lookback.py +0 -0
  175. {dulus-3.13.1 → dulus-3.13.2}/memory/__init__.py +0 -0
  176. {dulus-3.13.1 → dulus-3.13.2}/memory/audit.py +0 -0
  177. {dulus-3.13.1 → dulus-3.13.2}/memory/consolidator.py +0 -0
  178. {dulus-3.13.1 → dulus-3.13.2}/memory/context.py +0 -0
  179. {dulus-3.13.1 → dulus-3.13.2}/memory/mempalace_bridge.py +0 -0
  180. {dulus-3.13.1 → dulus-3.13.2}/memory/offload.py +0 -0
  181. {dulus-3.13.1 → dulus-3.13.2}/memory/palace.py +0 -0
  182. {dulus-3.13.1 → dulus-3.13.2}/memory/scan.py +0 -0
  183. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/adaptation_guides.md +0 -0
  184. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/askuserquestion_after_numbered_list.md +0 -0
  185. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/background_jobs_no_extra_timers.md +0 -0
  186. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/cleverness_over_resources.md +0 -0
  187. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/corporate_tls_breaks_curl_cffi.md +0 -0
  188. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/hardened_rules.md +0 -0
  189. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/investigator_workflow_heuristic.md +0 -0
  190. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/native_code_over_sketchy_plugins.md +0 -0
  191. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/no_personal_info_in_code.md +0 -0
  192. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/searches_include_modified_date.md +0 -0
  193. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/tmux_send_keys_power_patterns.md +0 -0
  194. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/token_optimization_technique.md +0 -0
  195. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/tool_chaining_capability.md +0 -0
  196. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/insights/webbridge_evaluate_first_pattern.md +0 -0
  197. {dulus-3.13.1 → dulus-3.13.2}/memory/seeds/short_memory.md +0 -0
  198. {dulus-3.13.1 → dulus-3.13.2}/memory/sessions.py +0 -0
  199. {dulus-3.13.1 → dulus-3.13.2}/memory/store.py +0 -0
  200. {dulus-3.13.1 → dulus-3.13.2}/memory/tools.py +0 -0
  201. {dulus-3.13.1 → dulus-3.13.2}/memory/types.py +0 -0
  202. {dulus-3.13.1 → dulus-3.13.2}/memory/vector_search.py +0 -0
  203. {dulus-3.13.1 → dulus-3.13.2}/model_params.py +0 -0
  204. {dulus-3.13.1 → dulus-3.13.2}/multi_agent/__init__.py +0 -0
  205. {dulus-3.13.1 → dulus-3.13.2}/multi_agent/subagent.py +0 -0
  206. {dulus-3.13.1 → dulus-3.13.2}/multi_agent/tools.py +0 -0
  207. {dulus-3.13.1 → dulus-3.13.2}/paste_placeholders.py +0 -0
  208. {dulus-3.13.1 → dulus-3.13.2}/personality_config.py +0 -0
  209. {dulus-3.13.1 → dulus-3.13.2}/plugin/__init__.py +0 -0
  210. {dulus-3.13.1 → dulus-3.13.2}/plugin/autoadapter.py +0 -0
  211. {dulus-3.13.1 → dulus-3.13.2}/plugin/loader.py +0 -0
  212. {dulus-3.13.1 → dulus-3.13.2}/plugin/recommend.py +0 -0
  213. {dulus-3.13.1 → dulus-3.13.2}/plugin/store.py +0 -0
  214. {dulus-3.13.1 → dulus-3.13.2}/plugin/types.py +0 -0
  215. {dulus-3.13.1 → dulus-3.13.2}/profiles.py +0 -0
  216. {dulus-3.13.1 → dulus-3.13.2}/providers.py +0 -0
  217. {dulus-3.13.1 → dulus-3.13.2}/pyconsole.py +0 -0
  218. {dulus-3.13.1 → dulus-3.13.2}/sandbox/README.md +0 -0
  219. {dulus-3.13.1 → dulus-3.13.2}/sandbox/__init__.py +0 -0
  220. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
  221. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
  222. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/index.html +0 -0
  223. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/wallpaper-default.jpg +0 -0
  224. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/wallpapers/default.jpeg +0 -0
  225. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/wallpapers/light.jpeg +0 -0
  226. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  227. {dulus-3.13.1 → dulus-3.13.2}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  228. {dulus-3.13.1 → dulus-3.13.2}/sandbox/info.md +0 -0
  229. {dulus-3.13.1 → dulus-3.13.2}/sandbox_bootstrap.py +0 -0
  230. {dulus-3.13.1 → dulus-3.13.2}/setup.cfg +0 -0
  231. {dulus-3.13.1 → dulus-3.13.2}/skill/__init__.py +0 -0
  232. {dulus-3.13.1 → dulus-3.13.2}/skill/builtin.py +0 -0
  233. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/LICENSE-obsidian-skills +0 -0
  234. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/README.md +0 -0
  235. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/defuddle/SKILL.md +0 -0
  236. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/json-canvas/SKILL.md +0 -0
  237. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
  238. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/obsidian-bases/SKILL.md +0 -0
  239. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
  240. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/obsidian-cli/SKILL.md +0 -0
  241. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
  242. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
  243. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
  244. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
  245. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/README.md +0 -0
  246. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/SKILL.md +0 -0
  247. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/addresses.json +0 -0
  248. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/advancedbackgroundchecks.json +0 -0
  249. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/beenverified.json +0 -0
  250. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/clustal.json +0 -0
  251. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/clustrmaps.json +0 -0
  252. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/cyberbackgroundchecks.json +0 -0
  253. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/familytreenow.json +0 -0
  254. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/fastpeoplesearch.json +0 -0
  255. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/intelius.json +0 -0
  256. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/mylife.json +0 -0
  257. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/nuwber.json +0 -0
  258. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/peekyou.json +0 -0
  259. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/peoplefinders.json +0 -0
  260. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/radaris.json +0 -0
  261. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/rehold.json +0 -0
  262. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/searchpeoplefree.json +0 -0
  263. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/socialcatfish.json +0 -0
  264. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/spokeo.json +0 -0
  265. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/thatsthem.json +0 -0
  266. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/truepeoplesearch.json +0 -0
  267. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/usphonebook.json +0 -0
  268. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/brokers/whitepages.json +0 -0
  269. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/legal/ccpa.md +0 -0
  270. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/legal/drop.md +0 -0
  271. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/legal/gdpr.md +0 -0
  272. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/methods.md +0 -0
  273. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/site-playbooks.md +0 -0
  274. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/references/state-machine.md +0 -0
  275. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/autopilot.py +0 -0
  276. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/badbool.py +0 -0
  277. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/brokers.py +0 -0
  278. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/cdp.py +0 -0
  279. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/config.py +0 -0
  280. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/crypto.py +0 -0
  281. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/dossier.py +0 -0
  282. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/email_modes.py +0 -0
  283. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/emailer.py +0 -0
  284. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/ledger.py +0 -0
  285. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/legal.py +0 -0
  286. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/paths.py +0 -0
  287. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/pdd.py +0 -0
  288. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/registry.py +0 -0
  289. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/report.py +0 -0
  290. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/scan.py +0 -0
  291. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/storage.py +0 -0
  292. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/tiers.py +0 -0
  293. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/scripts/vectors.py +0 -0
  294. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/templates/consent/authorization.md +0 -0
  295. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/templates/emails/ccpa-authorized-agent.txt +0 -0
  296. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/templates/emails/ccpa-deletion.txt +0 -0
  297. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/templates/emails/ccpa-indirect-deletion.txt +0 -0
  298. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/templates/emails/gdpr-erasure.txt +0 -0
  299. {dulus-3.13.1 → dulus-3.13.2}/skill/bundled/unbroker/templates/emails/generic-optout.txt +0 -0
  300. {dulus-3.13.1 → dulus-3.13.2}/skill/clawhub.py +0 -0
  301. {dulus-3.13.1 → dulus-3.13.2}/skill/executor.py +0 -0
  302. {dulus-3.13.1 → dulus-3.13.2}/skill/loader.py +0 -0
  303. {dulus-3.13.1 → dulus-3.13.2}/skill/tools.py +0 -0
  304. {dulus-3.13.1 → dulus-3.13.2}/skills.py +0 -0
  305. {dulus-3.13.1 → dulus-3.13.2}/soul.py +0 -0
  306. {dulus-3.13.1 → dulus-3.13.2}/spinner.py +0 -0
  307. {dulus-3.13.1 → dulus-3.13.2}/steer_input.py +0 -0
  308. {dulus-3.13.1 → dulus-3.13.2}/subagent.py +0 -0
  309. {dulus-3.13.1 → dulus-3.13.2}/task/__init__.py +0 -0
  310. {dulus-3.13.1 → dulus-3.13.2}/task/store.py +0 -0
  311. {dulus-3.13.1 → dulus-3.13.2}/task/tools.py +0 -0
  312. {dulus-3.13.1 → dulus-3.13.2}/task/types.py +0 -0
  313. {dulus-3.13.1 → dulus-3.13.2}/tests/test_afk_yolo.py +0 -0
  314. {dulus-3.13.1 → dulus-3.13.2}/tests/test_approval_runtime.py +0 -0
  315. {dulus-3.13.1 → dulus-3.13.2}/tests/test_background_task_tools.py +0 -0
  316. {dulus-3.13.1 → dulus-3.13.2}/tests/test_background_tasks.py +0 -0
  317. {dulus-3.13.1 → dulus-3.13.2}/tests/test_chatgpt_oauth.py +0 -0
  318. {dulus-3.13.1 → dulus-3.13.2}/tests/test_checkpoint.py +0 -0
  319. {dulus-3.13.1 → dulus-3.13.2}/tests/test_cli_animations_integration.py +0 -0
  320. {dulus-3.13.1 → dulus-3.13.2}/tests/test_clipboard_utils.py +0 -0
  321. {dulus-3.13.1 → dulus-3.13.2}/tests/test_compaction.py +0 -0
  322. {dulus-3.13.1 → dulus-3.13.2}/tests/test_composio_tool_generator.py +0 -0
  323. {dulus-3.13.1 → dulus-3.13.2}/tests/test_diff_view.py +0 -0
  324. {dulus-3.13.1 → dulus-3.13.2}/tests/test_diff_visualization.py +0 -0
  325. {dulus-3.13.1 → dulus-3.13.2}/tests/test_display_blocks.py +0 -0
  326. {dulus-3.13.1 → dulus-3.13.2}/tests/test_dulus_account.py +0 -0
  327. {dulus-3.13.1 → dulus-3.13.2}/tests/test_export_import.py +0 -0
  328. {dulus-3.13.1 → dulus-3.13.2}/tests/test_grok_usage.py +0 -0
  329. {dulus-3.13.1 → dulus-3.13.2}/tests/test_hook_engine.py +0 -0
  330. {dulus-3.13.1 → dulus-3.13.2}/tests/test_injection_fix.py +0 -0
  331. {dulus-3.13.1 → dulus-3.13.2}/tests/test_json_protocol.py +0 -0
  332. {dulus-3.13.1 → dulus-3.13.2}/tests/test_license.py +0 -0
  333. {dulus-3.13.1 → dulus-3.13.2}/tests/test_lookback_cache.py +0 -0
  334. {dulus-3.13.1 → dulus-3.13.2}/tests/test_mcp.py +0 -0
  335. {dulus-3.13.1 → dulus-3.13.2}/tests/test_mcp_algolia.py +0 -0
  336. {dulus-3.13.1 → dulus-3.13.2}/tests/test_memory.py +0 -0
  337. {dulus-3.13.1 → dulus-3.13.2}/tests/test_memory_home_resolution.py +0 -0
  338. {dulus-3.13.1 → dulus-3.13.2}/tests/test_notification_manager.py +0 -0
  339. {dulus-3.13.1 → dulus-3.13.2}/tests/test_plugin.py +0 -0
  340. {dulus-3.13.1 → dulus-3.13.2}/tests/test_profile_isolation.py +0 -0
  341. {dulus-3.13.1 → dulus-3.13.2}/tests/test_profile_plugin_scope.py +0 -0
  342. {dulus-3.13.1 → dulus-3.13.2}/tests/test_provider_errors.py +0 -0
  343. {dulus-3.13.1 → dulus-3.13.2}/tests/test_session_fork.py +0 -0
  344. {dulus-3.13.1 → dulus-3.13.2}/tests/test_shell_detection.py +0 -0
  345. {dulus-3.13.1 → dulus-3.13.2}/tests/test_shell_mode.py +0 -0
  346. {dulus-3.13.1 → dulus-3.13.2}/tests/test_skills.py +0 -0
  347. {dulus-3.13.1 → dulus-3.13.2}/tests/test_skillssh_algolia.py +0 -0
  348. {dulus-3.13.1 → dulus-3.13.2}/tests/test_steer_input.py +0 -0
  349. {dulus-3.13.1 → dulus-3.13.2}/tests/test_subagent.py +0 -0
  350. {dulus-3.13.1 → dulus-3.13.2}/tests/test_task.py +0 -0
  351. {dulus-3.13.1 → dulus-3.13.2}/tests/test_telegram_buffer.py +0 -0
  352. {dulus-3.13.1 → dulus-3.13.2}/tests/test_think_tool.py +0 -0
  353. {dulus-3.13.1 → dulus-3.13.2}/tests/test_todo_tool.py +0 -0
  354. {dulus-3.13.1 → dulus-3.13.2}/tests/test_todo_visualization.py +0 -0
  355. {dulus-3.13.1 → dulus-3.13.2}/tests/test_tool_registry.py +0 -0
  356. {dulus-3.13.1 → dulus-3.13.2}/tests/test_tree_ls.py +0 -0
  357. {dulus-3.13.1 → dulus-3.13.2}/tests/test_voice.py +0 -0
  358. {dulus-3.13.1 → dulus-3.13.2}/tests/test_webbridge_tabs.py +0 -0
  359. {dulus-3.13.1 → dulus-3.13.2}/tests/test_wire_events.py +0 -0
  360. {dulus-3.13.1 → dulus-3.13.2}/tmux_tools.py +0 -0
  361. {dulus-3.13.1 → dulus-3.13.2}/tool_registry.py +0 -0
  362. {dulus-3.13.1 → dulus-3.13.2}/tools.py +0 -0
  363. {dulus-3.13.1 → dulus-3.13.2}/tools_background.py +0 -0
  364. {dulus-3.13.1 → dulus-3.13.2}/tools_think.py +0 -0
  365. {dulus-3.13.1 → dulus-3.13.2}/tools_todo.py +0 -0
  366. {dulus-3.13.1 → dulus-3.13.2}/ui/__init__.py +0 -0
  367. {dulus-3.13.1 → dulus-3.13.2}/ui/input.py +0 -0
  368. {dulus-3.13.1 → dulus-3.13.2}/ui/render.py +0 -0
  369. {dulus-3.13.1 → dulus-3.13.2}/updater.py +0 -0
  370. {dulus-3.13.1 → dulus-3.13.2}/voice/__init__.py +0 -0
  371. {dulus-3.13.1 → dulus-3.13.2}/voice/audio_utils.py +0 -0
  372. {dulus-3.13.1 → dulus-3.13.2}/voice/keyterms.py +0 -0
  373. {dulus-3.13.1 → dulus-3.13.2}/voice/recorder.py +0 -0
  374. {dulus-3.13.1 → dulus-3.13.2}/voice/stt.py +0 -0
  375. {dulus-3.13.1 → dulus-3.13.2}/voice/tts.py +0 -0
  376. {dulus-3.13.1 → dulus-3.13.2}/voice/wake_word.py +0 -0
  377. {dulus-3.13.1 → dulus-3.13.2}/webbridge/__init__.py +0 -0
  378. {dulus-3.13.1 → dulus-3.13.2}/webbridge/core.py +0 -0
  379. {dulus-3.13.1 → dulus-3.13.2}/webbridge/tools.py +0 -0
  380. {dulus-3.13.1 → dulus-3.13.2}/webchat.py +0 -0
  381. {dulus-3.13.1 → dulus-3.13.2}/webchat_server.py +0 -0
  382. {dulus-3.13.1 → dulus-3.13.2}/webchat_ui/__init__.py +0 -0
  383. {dulus-3.13.1 → dulus-3.13.2}/webchat_ui/app.js +0 -0
  384. {dulus-3.13.1 → dulus-3.13.2}/webchat_ui/index.html +0 -0
  385. {dulus-3.13.1 → dulus-3.13.2}/webchat_ui/style.css +0 -0
  386. {dulus-3.13.1 → dulus-3.13.2}/welcome.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dulus
3
- Version: 3.13.1
3
+ Version: 3.13.2
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>
@@ -56,6 +56,7 @@ Requires-Dist: typing-extensions>=4.10.0
56
56
  Requires-Dist: pyttsx3
57
57
  Requires-Dist: composio>=1.0.0rc2
58
58
  Requires-Dist: beautifulsoup4>=4.12.0
59
+ Requires-Dist: segno>=1.6.0
59
60
  Requires-Dist: sentry-sdk>=2.0.0
60
61
  Requires-Dist: truststore>=0.9
61
62
  Requires-Dist: pytesseract>=0.3.10
@@ -129,7 +130,63 @@ Requires-Dist: pytesseract>=0.3.10; extra == "full"
129
130
  </p>
130
131
 
131
132
  <p align="center">
132
- <a href="https://dulus.online"><strong>🚀 Start on the router → dulus.online</strong></a>
133
+ <strong>🔑 Need an API key?</strong> Stop waiting on the website.<br>
134
+ It has been in <strong>dulus-public (pip)</strong> forever — mint it from the CLI:
135
+ </p>
136
+
137
+ ```bash
138
+ pip install -U dulus
139
+ dulus
140
+ # inside the REPL:
141
+ /login dulus # sign in (OAuth — browser opens)
142
+ /login dulus key # mint a dulus_sk_* key (shown once)
143
+ ```
144
+
145
+ ```bash
146
+ # then point anything OpenAI-compatible at the router
147
+ export OPENAI_API_KEY='dulus_sk_...' # the key you just minted
148
+ export OPENAI_BASE_URL='https://control.dulus.ai/v1'
149
+ # or: openai.base_url = "https://control.dulus.ai/v1"
150
+ ```
151
+
152
+ <p align="center">
153
+ <em>Damn brother… are you really waiting for the website update to get your API key?</em><br>
154
+ That’s on Dulus-public since years. Have fun. It was a surprise u,u — <strong>$DULUS</strong>
155
+ </p>
156
+
157
+ <p align="center">
158
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 Get your API key from pip →</strong></a>
159
+ ·
160
+ <a href="https://dulus.online"><strong>🚀 Platform → dulus.online</strong></a>
161
+ </p>
162
+
163
+
164
+ <p align="center">
165
+ <strong>⛽ $DULUS Fuel is LIVE in the CLI — <code>/fuel</code> is ready.</strong><br>
166
+ Sign in, get your <strong>reload wallet as a console QR</strong>, scan with Phantom / Solflare,<br>
167
+ send <strong>$DULUS</strong>, and Fuel credits hit your account. Utility coin that actually powers AI.
168
+ </p>
169
+
170
+ ```bash
171
+ pip install -U dulus
172
+ dulus
173
+ # inside the REPL:
174
+ /login dulus # sign in
175
+ /fuel # balance + scannable reload-wallet QR
176
+ /fuel deposit # QR only
177
+ ```
178
+
179
+ <p align="center">
180
+ <em>Tested. Reloaded. Fuel credited.</em> We’re not playing points — this is on-chain gas for inference.<br>
181
+ <strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
182
+ </p>
183
+
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>
133
190
  </p>
134
191
 
135
192
  <p align="center">
@@ -147,12 +204,10 @@ Requires-Dist: pytesseract>=0.3.10; extra == "full"
147
204
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
148
205
  </p>
149
206
 
150
- <p align="center">
151
- <a href="docs/Dulus_YC_Company_Overview_Aug_2026.pdf"><strong>📈 Investors — read the company overview (PDF) ↗</strong></a>
152
- </p>
153
-
154
207
  <p align="center">
155
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> ·
156
211
  <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
157
212
  <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
158
213
  <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
@@ -194,6 +249,98 @@ Rather use keys, local models, or your own endpoint? Dulus does that too — **3
194
249
 
195
250
  ---
196
251
 
252
+ ---
253
+
254
+ ## Fuel + reload wallet QR (READY)
255
+
256
+ **`/fuel` is ready.** Top up AI compute with **$DULUS** — the utility token that *is* your credit.
257
+
258
+ ```text
259
+ /login dulus # OAuth — browser opens
260
+ /fuel # ⛽ balance + console QR of YOUR reload wallet
261
+ /fuel deposit # address + QR only
262
+ /fuel balance # balance only
263
+ ```
264
+
265
+ 1. Run `/fuel` — Dulus prints your unique Solana deposit address **and a terminal QR** (segno, scannable).
266
+ 2. Open **Phantom / Solflare** → scan the QR → send **$DULUS**.
267
+ 3. Control plane credits **Fuel** to your account.
268
+ 4. Burn it on `dulus-*` models via the CLI or `https://control.dulus.ai/v1`.
269
+
270
+ No website form. No waiting on a dashboard refresh to *see* the wallet. The QR is in your terminal the second you login.
271
+
272
+ ```bash
273
+ pip install -U dulus # includes segno for console QR
274
+ dulus
275
+ ```
276
+
277
+ | Command | What you get |
278
+ |---|---|
279
+ | `/login dulus` | Sign in + reload QR on success |
280
+ | `/fuel` | Balance + reload wallet QR |
281
+ | `/fuel deposit` | QR / address only |
282
+ | `/login dulus key` | Mint `dulus_sk_*` for OpenAI SDK → same Fuel pool |
283
+
284
+ **$DULUS** = on-chain gas for inference. Transferable. Spent by the token. Tested end-to-end — reload lands, Fuel credits. 🦅
285
+
286
+ ---
287
+
288
+ ## Get your Dulus API key (no website required)
289
+
290
+ Damn brother… are you really waiting for the website update to get your API key?
291
+
292
+ **You don’t need the website.** Minting a `dulus_sk_*` key has been in **dulus-public** (`pip install dulus`) for ages. The CLI talks straight to the control plane.
293
+
294
+ ```bash
295
+ pip install -U dulus
296
+ dulus
297
+ ```
298
+
299
+ Inside the REPL:
300
+
301
+ ```text
302
+ /login dulus # sign in (OAuth PKCE — browser opens, no API key pasted by hand)
303
+ /login dulus key # mint a dulus_sk_* key for CI, SDKs, servers (shown once — copy it)
304
+ ```
305
+
306
+ Then point **any** OpenAI-compatible client at the router and burn **$DULUS** fuel by the token:
307
+
308
+ ```bash
309
+ export OPENAI_API_KEY='dulus_sk_...'
310
+ export OPENAI_BASE_URL='https://control.dulus.ai/v1'
311
+ ```
312
+
313
+ ```python
314
+ from openai import OpenAI
315
+ client = OpenAI(
316
+ api_key="dulus_sk_...", # from /login dulus key
317
+ base_url="https://control.dulus.ai/v1",
318
+ )
319
+ r = client.chat.completions.create(
320
+ model="dulus-a-9b", # or dulus-b-27b, dulus-x-397b, …
321
+ messages=[{"role": "user", "content": "hola desde el router"}],
322
+ )
323
+ print(r.choices[0].message.content)
324
+ ```
325
+
326
+ Or stay inside Dulus and use the built-in provider (same login, Fuel-metered):
327
+
328
+ ```text
329
+ /login dulus
330
+ /model dulus-a-9b
331
+ ```
332
+
333
+ | Want | Do this |
334
+ |---|---|
335
+ | Interactive agent on Dulus models | `/login dulus` then `/model dulus-*` |
336
+ | API key for scripts / CI / other tools | `/login dulus key` → `dulus_sk_*` |
337
+ | OpenAI SDK / anything compatible | `base_url=https://control.dulus.ai/v1` + that key |
338
+ | Fuel (`$DULUS`) | Spent per token on the control plane — utility coin, not a wallpaper ticker |
339
+
340
+ It was a surprise u,u — have fun. 🦅 **$DULUS**
341
+
342
+ ---
343
+
197
344
  ## New — Python console: a live heap that costs no tokens
198
345
 
199
346
  > 🧪 Fresh out of the private build. Try it and tell me how it feels.
@@ -347,7 +494,13 @@ dulus
347
494
  ### Pick any brain
348
495
 
349
496
  ```bash
350
- # Cloud provider
497
+ # Dulus router (Fuel / $DULUS) — no website key form
498
+ dulus
499
+ # /login dulus
500
+ # /login dulus key # mint dulus_sk_* for SDKs
501
+ # /model dulus-a-9b
502
+
503
+ # Cloud provider key
351
504
  export ANTHROPIC_API_KEY=sk-ant-...
352
505
  dulus --model claude-sonnet-4-6
353
506
 
@@ -359,7 +512,7 @@ dulus --model ollama/qwen2.5-coder
359
512
  git diff | dulus -p "review this diff and find the dangerous parts"
360
513
  ```
361
514
 
362
- No key yet? Start with Ollama, use NVIDIA NIM's free tier, or configure one of the supported browser-backed providers from the welcome flow.
515
+ No third-party key yet? Use **`/login dulus`** for the hosted router, start with Ollama, NVIDIA NIM's free tier, or a browser-backed provider from the welcome flow.
363
516
 
364
517
  ---
365
518
 
@@ -403,10 +556,15 @@ Dulus does not make model choice an architectural decision. Switch providers dur
403
556
  | **Local** | Ollama · LM Studio · vLLM · any OpenAI-compatible endpoint |
404
557
  | **Edge / on-device** | `edge/*` — small models on your phone or in Termux via llama.cpp / Ollama |
405
558
  | **Browser-backed** | Supported authenticated sessions for Claude, Gemini, Kimi, Qwen, and DeepSeek |
559
+ | **Dulus router (`$DULUS` Fuel)** | `dulus-*` models on `https://control.dulus.ai/v1` — `/login dulus` or `dulus_sk_*` from `/login dulus key` |
406
560
  | **Free tier** | 14 models through NVIDIA NIM with automatic fallback |
407
561
 
408
562
  ```text
409
563
  /model
564
+ /login dulus
565
+ /model dulus-a-9b
566
+ /model dulus-b-27b
567
+ /model dulus-x-397b
410
568
  /model claude-sonnet-4-6
411
569
  /model nvidia-web/deepseek-r1
412
570
  /model ollama/qwen2.5-coder
@@ -644,7 +802,8 @@ Type `/` and press Tab inside the REPL to explore the live command list.
644
802
 
645
803
  | Area | Commands |
646
804
  |---|---|
647
- | Models | `/model` · `/nvidia` · `/ollama` |
805
+ | Account / Fuel | `/login dulus` · `/login dulus key` (mint `dulus_sk_*`) |
806
+ | Models | `/model` · `/nvidia` · `/ollama` · `dulus-*` on the router |
648
807
  | Sessions | `/save` · `/load` · `/resume` · `/compact` |
649
808
  | Memory | `/remember` · `/memory` |
650
809
  | Work | `/task` · `/agents` · `/worker` · `/checkpoint` |
@@ -773,8 +932,6 @@ Documentation:
773
932
  - [Contributing](docs/CONTRIBUTING.md)
774
933
  - [Security](docs/SECURITY.md)
775
934
  - [Release notes](docs/news.md)
776
- - [Whitepaper](docs/Dulus_AI_Whitepaper_%28v2.0%29.pdf)
777
-
778
935
  ---
779
936
 
780
937
  ## Shipping in public
@@ -32,7 +32,63 @@
32
32
  </p>
33
33
 
34
34
  <p align="center">
35
- <a href="https://dulus.online"><strong>🚀 Start on the router → dulus.online</strong></a>
35
+ <strong>🔑 Need an API key?</strong> Stop waiting on the website.<br>
36
+ It has been in <strong>dulus-public (pip)</strong> forever — mint it from the CLI:
37
+ </p>
38
+
39
+ ```bash
40
+ pip install -U dulus
41
+ dulus
42
+ # inside the REPL:
43
+ /login dulus # sign in (OAuth — browser opens)
44
+ /login dulus key # mint a dulus_sk_* key (shown once)
45
+ ```
46
+
47
+ ```bash
48
+ # then point anything OpenAI-compatible at the router
49
+ export OPENAI_API_KEY='dulus_sk_...' # the key you just minted
50
+ export OPENAI_BASE_URL='https://control.dulus.ai/v1'
51
+ # or: openai.base_url = "https://control.dulus.ai/v1"
52
+ ```
53
+
54
+ <p align="center">
55
+ <em>Damn brother… are you really waiting for the website update to get your API key?</em><br>
56
+ That’s on Dulus-public since years. Have fun. It was a surprise u,u — <strong>$DULUS</strong>
57
+ </p>
58
+
59
+ <p align="center">
60
+ <a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 Get your API key from pip →</strong></a>
61
+ ·
62
+ <a href="https://dulus.online"><strong>🚀 Platform → dulus.online</strong></a>
63
+ </p>
64
+
65
+
66
+ <p align="center">
67
+ <strong>⛽ $DULUS Fuel is LIVE in the CLI — <code>/fuel</code> is ready.</strong><br>
68
+ Sign in, get your <strong>reload wallet as a console QR</strong>, scan with Phantom / Solflare,<br>
69
+ send <strong>$DULUS</strong>, and Fuel credits hit your account. Utility coin that actually powers AI.
70
+ </p>
71
+
72
+ ```bash
73
+ pip install -U dulus
74
+ dulus
75
+ # inside the REPL:
76
+ /login dulus # sign in
77
+ /fuel # balance + scannable reload-wallet QR
78
+ /fuel deposit # QR only
79
+ ```
80
+
81
+ <p align="center">
82
+ <em>Tested. Reloaded. Fuel credited.</em> We’re not playing points — this is on-chain gas for inference.<br>
83
+ <strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
84
+ </p>
85
+
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>
36
92
  </p>
37
93
 
38
94
  <p align="center">
@@ -50,12 +106,10 @@
50
106
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
51
107
  </p>
52
108
 
53
- <p align="center">
54
- <a href="docs/Dulus_YC_Company_Overview_Aug_2026.pdf"><strong>📈 Investors — read the company overview (PDF) ↗</strong></a>
55
- </p>
56
-
57
109
  <p align="center">
58
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> ·
59
113
  <a href="#why-dulus"><strong>Why Dulus</strong></a> ·
60
114
  <a href="#one-runtime-every-model"><strong>Models</strong></a> ·
61
115
  <a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
@@ -97,6 +151,98 @@ Rather use keys, local models, or your own endpoint? Dulus does that too — **3
97
151
 
98
152
  ---
99
153
 
154
+ ---
155
+
156
+ ## Fuel + reload wallet QR (READY)
157
+
158
+ **`/fuel` is ready.** Top up AI compute with **$DULUS** — the utility token that *is* your credit.
159
+
160
+ ```text
161
+ /login dulus # OAuth — browser opens
162
+ /fuel # ⛽ balance + console QR of YOUR reload wallet
163
+ /fuel deposit # address + QR only
164
+ /fuel balance # balance only
165
+ ```
166
+
167
+ 1. Run `/fuel` — Dulus prints your unique Solana deposit address **and a terminal QR** (segno, scannable).
168
+ 2. Open **Phantom / Solflare** → scan the QR → send **$DULUS**.
169
+ 3. Control plane credits **Fuel** to your account.
170
+ 4. Burn it on `dulus-*` models via the CLI or `https://control.dulus.ai/v1`.
171
+
172
+ No website form. No waiting on a dashboard refresh to *see* the wallet. The QR is in your terminal the second you login.
173
+
174
+ ```bash
175
+ pip install -U dulus # includes segno for console QR
176
+ dulus
177
+ ```
178
+
179
+ | Command | What you get |
180
+ |---|---|
181
+ | `/login dulus` | Sign in + reload QR on success |
182
+ | `/fuel` | Balance + reload wallet QR |
183
+ | `/fuel deposit` | QR / address only |
184
+ | `/login dulus key` | Mint `dulus_sk_*` for OpenAI SDK → same Fuel pool |
185
+
186
+ **$DULUS** = on-chain gas for inference. Transferable. Spent by the token. Tested end-to-end — reload lands, Fuel credits. 🦅
187
+
188
+ ---
189
+
190
+ ## Get your Dulus API key (no website required)
191
+
192
+ Damn brother… are you really waiting for the website update to get your API key?
193
+
194
+ **You don’t need the website.** Minting a `dulus_sk_*` key has been in **dulus-public** (`pip install dulus`) for ages. The CLI talks straight to the control plane.
195
+
196
+ ```bash
197
+ pip install -U dulus
198
+ dulus
199
+ ```
200
+
201
+ Inside the REPL:
202
+
203
+ ```text
204
+ /login dulus # sign in (OAuth PKCE — browser opens, no API key pasted by hand)
205
+ /login dulus key # mint a dulus_sk_* key for CI, SDKs, servers (shown once — copy it)
206
+ ```
207
+
208
+ Then point **any** OpenAI-compatible client at the router and burn **$DULUS** fuel by the token:
209
+
210
+ ```bash
211
+ export OPENAI_API_KEY='dulus_sk_...'
212
+ export OPENAI_BASE_URL='https://control.dulus.ai/v1'
213
+ ```
214
+
215
+ ```python
216
+ from openai import OpenAI
217
+ client = OpenAI(
218
+ api_key="dulus_sk_...", # from /login dulus key
219
+ base_url="https://control.dulus.ai/v1",
220
+ )
221
+ r = client.chat.completions.create(
222
+ model="dulus-a-9b", # or dulus-b-27b, dulus-x-397b, …
223
+ messages=[{"role": "user", "content": "hola desde el router"}],
224
+ )
225
+ print(r.choices[0].message.content)
226
+ ```
227
+
228
+ Or stay inside Dulus and use the built-in provider (same login, Fuel-metered):
229
+
230
+ ```text
231
+ /login dulus
232
+ /model dulus-a-9b
233
+ ```
234
+
235
+ | Want | Do this |
236
+ |---|---|
237
+ | Interactive agent on Dulus models | `/login dulus` then `/model dulus-*` |
238
+ | API key for scripts / CI / other tools | `/login dulus key` → `dulus_sk_*` |
239
+ | OpenAI SDK / anything compatible | `base_url=https://control.dulus.ai/v1` + that key |
240
+ | Fuel (`$DULUS`) | Spent per token on the control plane — utility coin, not a wallpaper ticker |
241
+
242
+ It was a surprise u,u — have fun. 🦅 **$DULUS**
243
+
244
+ ---
245
+
100
246
  ## New — Python console: a live heap that costs no tokens
101
247
 
102
248
  > 🧪 Fresh out of the private build. Try it and tell me how it feels.
@@ -250,7 +396,13 @@ dulus
250
396
  ### Pick any brain
251
397
 
252
398
  ```bash
253
- # Cloud provider
399
+ # Dulus router (Fuel / $DULUS) — no website key form
400
+ dulus
401
+ # /login dulus
402
+ # /login dulus key # mint dulus_sk_* for SDKs
403
+ # /model dulus-a-9b
404
+
405
+ # Cloud provider key
254
406
  export ANTHROPIC_API_KEY=sk-ant-...
255
407
  dulus --model claude-sonnet-4-6
256
408
 
@@ -262,7 +414,7 @@ dulus --model ollama/qwen2.5-coder
262
414
  git diff | dulus -p "review this diff and find the dangerous parts"
263
415
  ```
264
416
 
265
- No key yet? Start with Ollama, use NVIDIA NIM's free tier, or configure one of the supported browser-backed providers from the welcome flow.
417
+ No third-party key yet? Use **`/login dulus`** for the hosted router, start with Ollama, NVIDIA NIM's free tier, or a browser-backed provider from the welcome flow.
266
418
 
267
419
  ---
268
420
 
@@ -306,10 +458,15 @@ Dulus does not make model choice an architectural decision. Switch providers dur
306
458
  | **Local** | Ollama · LM Studio · vLLM · any OpenAI-compatible endpoint |
307
459
  | **Edge / on-device** | `edge/*` — small models on your phone or in Termux via llama.cpp / Ollama |
308
460
  | **Browser-backed** | Supported authenticated sessions for Claude, Gemini, Kimi, Qwen, and DeepSeek |
461
+ | **Dulus router (`$DULUS` Fuel)** | `dulus-*` models on `https://control.dulus.ai/v1` — `/login dulus` or `dulus_sk_*` from `/login dulus key` |
309
462
  | **Free tier** | 14 models through NVIDIA NIM with automatic fallback |
310
463
 
311
464
  ```text
312
465
  /model
466
+ /login dulus
467
+ /model dulus-a-9b
468
+ /model dulus-b-27b
469
+ /model dulus-x-397b
313
470
  /model claude-sonnet-4-6
314
471
  /model nvidia-web/deepseek-r1
315
472
  /model ollama/qwen2.5-coder
@@ -547,7 +704,8 @@ Type `/` and press Tab inside the REPL to explore the live command list.
547
704
 
548
705
  | Area | Commands |
549
706
  |---|---|
550
- | Models | `/model` · `/nvidia` · `/ollama` |
707
+ | Account / Fuel | `/login dulus` · `/login dulus key` (mint `dulus_sk_*`) |
708
+ | Models | `/model` · `/nvidia` · `/ollama` · `dulus-*` on the router |
551
709
  | Sessions | `/save` · `/load` · `/resume` · `/compact` |
552
710
  | Memory | `/remember` · `/memory` |
553
711
  | Work | `/task` · `/agents` · `/worker` · `/checkpoint` |
@@ -676,8 +834,6 @@ Documentation:
676
834
  - [Contributing](docs/CONTRIBUTING.md)
677
835
  - [Security](docs/SECURITY.md)
678
836
  - [Release notes](docs/news.md)
679
- - [Whitepaper](docs/Dulus_AI_Whitepaper_%28v2.0%29.pdf)
680
-
681
837
  ---
682
838
 
683
839
  ## Shipping in public
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.13.2] - 2026-08-31
11
+
12
+ ### Added
13
+ - **`/fuel`** — $DULUS Fuel balance + console-scannable reload wallet QR (`segno`)
14
+ - Post-`/login dulus` shows the deposit QR so you can top up from Phantom/Solflare immediately
15
+ - Aliases: `/reload`, `/deposit`; subcommands `deposit` / `balance`
16
+ - Dependency: `segno>=1.6.0` for terminal QR
17
+
18
+ ### Verified
19
+ - End-to-end reload: send $DULUS → Fuel credited on control plane
20
+
21
+
10
22
  ## [3.13.1] - 2026-08-31
11
23
 
12
24
  ### Fixed
@@ -17,7 +17,6 @@ installation paths, screenshots, and feature tour, start with the
17
17
  | Review the security and permission model | [Security](SECURITY.md) |
18
18
  | Diagnose a common problem | [FAQ](FAQ.md) |
19
19
  | See what shipped | [Release journal](news.md) and [changelog](CHANGELOG.md) |
20
- | Read the longer product thesis | [Dulus AI whitepaper](Dulus_AI_Whitepaper_%28v2.0%29.pdf) |
21
20
 
22
21
  ## Runtime map
23
22
 
@@ -2,6 +2,9 @@
2
2
 
3
3
  ## 🔥🔥🔥 News (Pacific Time)
4
4
 
5
+ - August 31, 2026 (**v3.13.2**): **⛽ `/fuel` is READY — reload wallet as a console QR.** Sign in with `/login dulus`, run `/fuel`, scan the QR with Phantom/Solflare, send **$DULUS**, and Fuel credits hit your account. Real utility coin for real AI compute — not points, not a waitlist. `pip install -U dulus`. 🦅🇩🇴
6
+
7
+
5
8
  - August 31, 2026 (**v3.13.1**): **📂 `/load` shows your real saves again.** The menu was only listing system auto-saves under `sessions/daily/`, so the sessions you kept with `/save` never appeared. Default `/load` (and the GUI session list) now reads the root of `sessions/` — your explicit saves. Auto-saves stay opt-in with `/load daily`. `pip install --upgrade dulus`. 🦅🇩🇴
6
9
 
7
10