dulus 3.9.3__tar.gz → 3.9.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. {dulus-3.9.3/dulus.egg-info → dulus-3.9.4}/PKG-INFO +1 -1
  2. {dulus-3.9.3 → dulus-3.9.4}/config.py +28 -2
  3. {dulus-3.9.3 → dulus-3.9.4/dulus.egg-info}/PKG-INFO +1 -1
  4. {dulus-3.9.3 → dulus-3.9.4}/pyproject.toml +1 -1
  5. {dulus-3.9.3 → dulus-3.9.4}/LICENSE +0 -0
  6. {dulus-3.9.3 → dulus-3.9.4}/MANIFEST.in +0 -0
  7. {dulus-3.9.3 → dulus-3.9.4}/README.md +0 -0
  8. {dulus-3.9.3 → dulus-3.9.4}/agent.py +0 -0
  9. {dulus-3.9.3 → dulus-3.9.4}/analytics.py +0 -0
  10. {dulus-3.9.3 → dulus-3.9.4}/backend/__init__.py +0 -0
  11. {dulus-3.9.3 → dulus-3.9.4}/backend/agents_bridge.py +0 -0
  12. {dulus-3.9.3 → dulus-3.9.4}/backend/compressor.py +0 -0
  13. {dulus-3.9.3 → dulus-3.9.4}/backend/context.py +0 -0
  14. {dulus-3.9.3 → dulus-3.9.4}/backend/githook.py +0 -0
  15. {dulus-3.9.3 → dulus-3.9.4}/backend/marketplace.py +0 -0
  16. {dulus-3.9.3 → dulus-3.9.4}/backend/mempalace_bridge.py +0 -0
  17. {dulus-3.9.3 → dulus-3.9.4}/backend/personas.py +0 -0
  18. {dulus-3.9.3 → dulus-3.9.4}/backend/plugins.py +0 -0
  19. {dulus-3.9.3 → dulus-3.9.4}/backend/server.py +0 -0
  20. {dulus-3.9.3 → dulus-3.9.4}/backend/tasks.py +0 -0
  21. {dulus-3.9.3 → dulus-3.9.4}/batch_api.py +0 -0
  22. {dulus-3.9.3 → dulus-3.9.4}/checkpoint/__init__.py +0 -0
  23. {dulus-3.9.3 → dulus-3.9.4}/checkpoint/hooks.py +0 -0
  24. {dulus-3.9.3 → dulus-3.9.4}/checkpoint/store.py +0 -0
  25. {dulus-3.9.3 → dulus-3.9.4}/checkpoint/types.py +0 -0
  26. {dulus-3.9.3 → dulus-3.9.4}/claude_code_watcher.py +0 -0
  27. {dulus-3.9.3 → dulus-3.9.4}/clipboard_utils.py +0 -0
  28. {dulus-3.9.3 → dulus-3.9.4}/cloudsave.py +0 -0
  29. {dulus-3.9.3 → dulus-3.9.4}/common.py +0 -0
  30. {dulus-3.9.3 → dulus-3.9.4}/compaction.py +0 -0
  31. {dulus-3.9.3 → dulus-3.9.4}/context.py +0 -0
  32. {dulus-3.9.3 → dulus-3.9.4}/data/__init__.py +0 -0
  33. {dulus-3.9.3 → dulus-3.9.4}/data/active_persona.json +0 -0
  34. {dulus-3.9.3 → dulus-3.9.4}/data/marketplace.json +0 -0
  35. {dulus-3.9.3 → dulus-3.9.4}/data/personas.json +0 -0
  36. {dulus-3.9.3 → dulus-3.9.4}/data/plugins/__init__.py +0 -0
  37. {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/__init__.py +0 -0
  38. {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  39. {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  40. {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
  41. {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/plugin.json +0 -0
  42. {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/plugin_tool.py +0 -0
  43. {dulus-3.9.3 → dulus-3.9.4}/data/tasks.json +0 -0
  44. {dulus-3.9.3 → dulus-3.9.4}/docs/API.md +0 -0
  45. {dulus-3.9.3 → dulus-3.9.4}/docs/BRAND_GUIDE.md +0 -0
  46. {dulus-3.9.3 → dulus-3.9.4}/docs/CHANGELOG.md +0 -0
  47. {dulus-3.9.3 → dulus-3.9.4}/docs/CONTRIBUTING.md +0 -0
  48. {dulus-3.9.3 → dulus-3.9.4}/docs/DEPLOYMENT.md +0 -0
  49. {dulus-3.9.3 → dulus-3.9.4}/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
  50. {dulus-3.9.3 → dulus-3.9.4}/docs/FAQ.md +0 -0
  51. {dulus-3.9.3 → dulus-3.9.4}/docs/GETTING_STARTED.md +0 -0
  52. {dulus-3.9.3 → dulus-3.9.4}/docs/INVESTOR_BRIEF.md +0 -0
  53. {dulus-3.9.3 → dulus-3.9.4}/docs/README.md +0 -0
  54. {dulus-3.9.3 → dulus-3.9.4}/docs/README_AR.md +0 -0
  55. {dulus-3.9.3 → dulus-3.9.4}/docs/README_EN.md +0 -0
  56. {dulus-3.9.3 → dulus-3.9.4}/docs/README_ES.md +0 -0
  57. {dulus-3.9.3 → dulus-3.9.4}/docs/README_FR.md +0 -0
  58. {dulus-3.9.3 → dulus-3.9.4}/docs/README_JA.md +0 -0
  59. {dulus-3.9.3 → dulus-3.9.4}/docs/README_KO.md +0 -0
  60. {dulus-3.9.3 → dulus-3.9.4}/docs/README_PT.md +0 -0
  61. {dulus-3.9.3 → dulus-3.9.4}/docs/README_RU.md +0 -0
  62. {dulus-3.9.3 → dulus-3.9.4}/docs/README_ZH.md +0 -0
  63. {dulus-3.9.3 → dulus-3.9.4}/docs/SECURITY.md +0 -0
  64. {dulus-3.9.3 → dulus-3.9.4}/docs/__init__.py +0 -0
  65. {dulus-3.9.3 → dulus-3.9.4}/docs/api.html +0 -0
  66. {dulus-3.9.3 → dulus-3.9.4}/docs/architecture.md +0 -0
  67. {dulus-3.9.3 → dulus-3.9.4}/docs/azure-speech-template.json +0 -0
  68. {dulus-3.9.3 → dulus-3.9.4}/docs/dashboard/index.html +0 -0
  69. {dulus-3.9.3 → dulus-3.9.4}/docs/divider.svg +0 -0
  70. {dulus-3.9.3 → dulus-3.9.4}/docs/dulus-bird.png +0 -0
  71. {dulus-3.9.3 → dulus-3.9.4}/docs/generate.py +0 -0
  72. {dulus-3.9.3 → dulus-3.9.4}/docs/hero.svg +0 -0
  73. {dulus-3.9.3 → dulus-3.9.4}/docs/index.html +0 -0
  74. {dulus-3.9.3 → dulus-3.9.4}/docs/news.md +0 -0
  75. {dulus-3.9.3 → dulus-3.9.4}/docs/nvidia-models.svg +0 -0
  76. {dulus-3.9.3 → dulus-3.9.4}/docs/particle-playground.html +0 -0
  77. {dulus-3.9.3 → dulus-3.9.4}/docs/personas/index.html +0 -0
  78. {dulus-3.9.3 → dulus-3.9.4}/docs/poetry-banner.png +0 -0
  79. {dulus-3.9.3 → dulus-3.9.4}/docs/preview.html +0 -0
  80. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-agents.svg +0 -0
  81. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-brainstorm.svg +0 -0
  82. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-bridges.svg +0 -0
  83. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-features.svg +0 -0
  84. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-freetier.svg +0 -0
  85. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-memory.svg +0 -0
  86. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-models.svg +0 -0
  87. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-perms.svg +0 -0
  88. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-plugins.svg +0 -0
  89. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-quickstart.svg +0 -0
  90. {dulus-3.9.3 → dulus-3.9.4}/docs/sec-ssj.svg +0 -0
  91. {dulus-3.9.3 → dulus-3.9.4}/docs/spinners.svg +0 -0
  92. {dulus-3.9.3 → dulus-3.9.4}/docs/split-pane.svg +0 -0
  93. {dulus-3.9.3 → dulus-3.9.4}/docs/terminal-boot.svg +0 -0
  94. {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/SOURCES.txt +0 -0
  95. {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/dependency_links.txt +0 -0
  96. {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/entry_points.txt +0 -0
  97. {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/requires.txt +0 -0
  98. {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/top_level.txt +0 -0
  99. {dulus-3.9.3 → dulus-3.9.4}/dulus.py +0 -0
  100. {dulus-3.9.3 → dulus-3.9.4}/dulus_gui.py +0 -0
  101. {dulus-3.9.3 → dulus-3.9.4}/dulus_gui_web.py +0 -0
  102. {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/__init__.py +0 -0
  103. {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/client.py +0 -0
  104. {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/commands.py +0 -0
  105. {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/config.py +0 -0
  106. {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/hub.py +0 -0
  107. {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/tools.py +0 -0
  108. {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/types.py +0 -0
  109. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/__init__.py +0 -0
  110. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/add_dir_manager.py +0 -0
  111. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/afk_mode.py +0 -0
  112. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/approval_runtime.py +0 -0
  113. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/background_tasks.py +0 -0
  114. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/clipboard_utils.py +0 -0
  115. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/diff_visualizer.py +0 -0
  116. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/export_import.py +0 -0
  117. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/hook_engine.py +0 -0
  118. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/notification_manager.py +0 -0
  119. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/session_fork.py +0 -0
  120. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/shell_mode.py +0 -0
  121. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/todo_visualizer.py +0 -0
  122. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/tree_ls.py +0 -0
  123. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/wire_events.py +0 -0
  124. {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/yolo_mode.py +0 -0
  125. {dulus-3.9.3 → dulus-3.9.4}/governance.py +0 -0
  126. {dulus-3.9.3 → dulus-3.9.4}/gui/__init__.py +0 -0
  127. {dulus-3.9.3 → dulus-3.9.4}/gui/agent_bridge.py +0 -0
  128. {dulus-3.9.3 → dulus-3.9.4}/gui/chat_widget.py +0 -0
  129. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/App.tsx +0 -0
  130. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/THIRD_PARTY_NOTICES.md +0 -0
  131. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/dist/index.html +0 -0
  132. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/dist/standalone.html +0 -0
  133. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/index.html +0 -0
  134. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/index.tsx +0 -0
  135. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/metadata.json +0 -0
  136. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/package-lock.json +0 -0
  137. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/package.json +0 -0
  138. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/types.ts +0 -0
  139. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/utils.ts +0 -0
  140. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/vertex-ai-proxy-interceptor.js +0 -0
  141. {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/vite.config.ts +0 -0
  142. {dulus-3.9.3 → dulus-3.9.4}/gui/main_window.py +0 -0
  143. {dulus-3.9.3 → dulus-3.9.4}/gui/personas.py +0 -0
  144. {dulus-3.9.3 → dulus-3.9.4}/gui/sandbox_server.py +0 -0
  145. {dulus-3.9.3 → dulus-3.9.4}/gui/session_utils.py +0 -0
  146. {dulus-3.9.3 → dulus-3.9.4}/gui/settings_dialog.py +0 -0
  147. {dulus-3.9.3 → dulus-3.9.4}/gui/sidebar.py +0 -0
  148. {dulus-3.9.3 → dulus-3.9.4}/gui/tasks_view.py +0 -0
  149. {dulus-3.9.3 → dulus-3.9.4}/gui/themes.py +0 -0
  150. {dulus-3.9.3 → dulus-3.9.4}/gui/tool_panel.py +0 -0
  151. {dulus-3.9.3 → dulus-3.9.4}/input.py +0 -0
  152. {dulus-3.9.3 → dulus-3.9.4}/license_manager.py +0 -0
  153. {dulus-3.9.3 → dulus-3.9.4}/memory/__init__.py +0 -0
  154. {dulus-3.9.3 → dulus-3.9.4}/memory/audit.py +0 -0
  155. {dulus-3.9.3 → dulus-3.9.4}/memory/consolidator.py +0 -0
  156. {dulus-3.9.3 → dulus-3.9.4}/memory/context.py +0 -0
  157. {dulus-3.9.3 → dulus-3.9.4}/memory/offload.py +0 -0
  158. {dulus-3.9.3 → dulus-3.9.4}/memory/palace.py +0 -0
  159. {dulus-3.9.3 → dulus-3.9.4}/memory/scan.py +0 -0
  160. {dulus-3.9.3 → dulus-3.9.4}/memory/sessions.py +0 -0
  161. {dulus-3.9.3 → dulus-3.9.4}/memory/store.py +0 -0
  162. {dulus-3.9.3 → dulus-3.9.4}/memory/tools.py +0 -0
  163. {dulus-3.9.3 → dulus-3.9.4}/memory/types.py +0 -0
  164. {dulus-3.9.3 → dulus-3.9.4}/memory/vector_search.py +0 -0
  165. {dulus-3.9.3 → dulus-3.9.4}/multi_agent/__init__.py +0 -0
  166. {dulus-3.9.3 → dulus-3.9.4}/multi_agent/subagent.py +0 -0
  167. {dulus-3.9.3 → dulus-3.9.4}/multi_agent/tools.py +0 -0
  168. {dulus-3.9.3 → dulus-3.9.4}/offload_helper.py +0 -0
  169. {dulus-3.9.3 → dulus-3.9.4}/personality_config.py +0 -0
  170. {dulus-3.9.3 → dulus-3.9.4}/plugin/__init__.py +0 -0
  171. {dulus-3.9.3 → dulus-3.9.4}/plugin/autoadapter.py +0 -0
  172. {dulus-3.9.3 → dulus-3.9.4}/plugin/loader.py +0 -0
  173. {dulus-3.9.3 → dulus-3.9.4}/plugin/recommend.py +0 -0
  174. {dulus-3.9.3 → dulus-3.9.4}/plugin/store.py +0 -0
  175. {dulus-3.9.3 → dulus-3.9.4}/plugin/types.py +0 -0
  176. {dulus-3.9.3 → dulus-3.9.4}/providers.py +0 -0
  177. {dulus-3.9.3 → dulus-3.9.4}/sandbox/README.md +0 -0
  178. {dulus-3.9.3 → dulus-3.9.4}/sandbox/__init__.py +0 -0
  179. {dulus-3.9.3 → dulus-3.9.4}/sandbox/components.json +0 -0
  180. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
  181. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
  182. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/index.html +0 -0
  183. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpaper-default.jpg +0 -0
  184. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/default.jpeg +0 -0
  185. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/light.jpeg +0 -0
  186. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  187. {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  188. {dulus-3.9.3 → dulus-3.9.4}/sandbox/eslint.config.js +0 -0
  189. {dulus-3.9.3 → dulus-3.9.4}/sandbox/index.html +0 -0
  190. {dulus-3.9.3 → dulus-3.9.4}/sandbox/info.md +0 -0
  191. {dulus-3.9.3 → dulus-3.9.4}/sandbox/package-lock.json +0 -0
  192. {dulus-3.9.3 → dulus-3.9.4}/sandbox/package.json +0 -0
  193. {dulus-3.9.3 → dulus-3.9.4}/sandbox/postcss.config.js +0 -0
  194. {dulus-3.9.3 → dulus-3.9.4}/sandbox/tailwind.config.js +0 -0
  195. {dulus-3.9.3 → dulus-3.9.4}/sandbox/tsconfig.app.json +0 -0
  196. {dulus-3.9.3 → dulus-3.9.4}/sandbox/tsconfig.json +0 -0
  197. {dulus-3.9.3 → dulus-3.9.4}/sandbox/tsconfig.node.json +0 -0
  198. {dulus-3.9.3 → dulus-3.9.4}/sandbox/vite.config.ts +0 -0
  199. {dulus-3.9.3 → dulus-3.9.4}/sandbox_bootstrap.py +0 -0
  200. {dulus-3.9.3 → dulus-3.9.4}/setup.cfg +0 -0
  201. {dulus-3.9.3 → dulus-3.9.4}/skill/__init__.py +0 -0
  202. {dulus-3.9.3 → dulus-3.9.4}/skill/builtin.py +0 -0
  203. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/LICENSE-obsidian-skills +0 -0
  204. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/README.md +0 -0
  205. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/defuddle/SKILL.md +0 -0
  206. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/json-canvas/SKILL.md +0 -0
  207. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
  208. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-bases/SKILL.md +0 -0
  209. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
  210. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-cli/SKILL.md +0 -0
  211. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
  212. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
  213. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
  214. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
  215. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/README.md +0 -0
  216. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/SKILL.md +0 -0
  217. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/addresses.json +0 -0
  218. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/advancedbackgroundchecks.json +0 -0
  219. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/beenverified.json +0 -0
  220. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/clustal.json +0 -0
  221. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/clustrmaps.json +0 -0
  222. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/cyberbackgroundchecks.json +0 -0
  223. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/familytreenow.json +0 -0
  224. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/fastpeoplesearch.json +0 -0
  225. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/intelius.json +0 -0
  226. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/mylife.json +0 -0
  227. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/nuwber.json +0 -0
  228. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/peekyou.json +0 -0
  229. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/peoplefinders.json +0 -0
  230. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/radaris.json +0 -0
  231. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/rehold.json +0 -0
  232. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/searchpeoplefree.json +0 -0
  233. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/socialcatfish.json +0 -0
  234. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/spokeo.json +0 -0
  235. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/thatsthem.json +0 -0
  236. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/truepeoplesearch.json +0 -0
  237. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/usphonebook.json +0 -0
  238. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/whitepages.json +0 -0
  239. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/legal/ccpa.md +0 -0
  240. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/legal/drop.md +0 -0
  241. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/legal/gdpr.md +0 -0
  242. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/methods.md +0 -0
  243. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/site-playbooks.md +0 -0
  244. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/state-machine.md +0 -0
  245. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/autopilot.py +0 -0
  246. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/badbool.py +0 -0
  247. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/brokers.py +0 -0
  248. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/cdp.py +0 -0
  249. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/config.py +0 -0
  250. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/crypto.py +0 -0
  251. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/dossier.py +0 -0
  252. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/email_modes.py +0 -0
  253. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/emailer.py +0 -0
  254. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/ledger.py +0 -0
  255. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/legal.py +0 -0
  256. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/paths.py +0 -0
  257. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/pdd.py +0 -0
  258. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/registry.py +0 -0
  259. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/report.py +0 -0
  260. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/scan.py +0 -0
  261. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/storage.py +0 -0
  262. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/tiers.py +0 -0
  263. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/vectors.py +0 -0
  264. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/consent/authorization.md +0 -0
  265. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/ccpa-authorized-agent.txt +0 -0
  266. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/ccpa-deletion.txt +0 -0
  267. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/ccpa-indirect-deletion.txt +0 -0
  268. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/gdpr-erasure.txt +0 -0
  269. {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/generic-optout.txt +0 -0
  270. {dulus-3.9.3 → dulus-3.9.4}/skill/clawhub.py +0 -0
  271. {dulus-3.9.3 → dulus-3.9.4}/skill/executor.py +0 -0
  272. {dulus-3.9.3 → dulus-3.9.4}/skill/loader.py +0 -0
  273. {dulus-3.9.3 → dulus-3.9.4}/skill/tools.py +0 -0
  274. {dulus-3.9.3 → dulus-3.9.4}/skills.py +0 -0
  275. {dulus-3.9.3 → dulus-3.9.4}/soul.py +0 -0
  276. {dulus-3.9.3 → dulus-3.9.4}/spinner.py +0 -0
  277. {dulus-3.9.3 → dulus-3.9.4}/string_utils.py +0 -0
  278. {dulus-3.9.3 → dulus-3.9.4}/subagent.py +0 -0
  279. {dulus-3.9.3 → dulus-3.9.4}/task/__init__.py +0 -0
  280. {dulus-3.9.3 → dulus-3.9.4}/task/store.py +0 -0
  281. {dulus-3.9.3 → dulus-3.9.4}/task/tools.py +0 -0
  282. {dulus-3.9.3 → dulus-3.9.4}/task/types.py +0 -0
  283. {dulus-3.9.3 → dulus-3.9.4}/tests/test_afk_yolo.py +0 -0
  284. {dulus-3.9.3 → dulus-3.9.4}/tests/test_approval_runtime.py +0 -0
  285. {dulus-3.9.3 → dulus-3.9.4}/tests/test_background_task_tools.py +0 -0
  286. {dulus-3.9.3 → dulus-3.9.4}/tests/test_background_tasks.py +0 -0
  287. {dulus-3.9.3 → dulus-3.9.4}/tests/test_checkpoint.py +0 -0
  288. {dulus-3.9.3 → dulus-3.9.4}/tests/test_clipboard_utils.py +0 -0
  289. {dulus-3.9.3 → dulus-3.9.4}/tests/test_compaction.py +0 -0
  290. {dulus-3.9.3 → dulus-3.9.4}/tests/test_diff_view.py +0 -0
  291. {dulus-3.9.3 → dulus-3.9.4}/tests/test_diff_visualization.py +0 -0
  292. {dulus-3.9.3 → dulus-3.9.4}/tests/test_display_blocks.py +0 -0
  293. {dulus-3.9.3 → dulus-3.9.4}/tests/test_export_import.py +0 -0
  294. {dulus-3.9.3 → dulus-3.9.4}/tests/test_hook_engine.py +0 -0
  295. {dulus-3.9.3 → dulus-3.9.4}/tests/test_injection_fix.py +0 -0
  296. {dulus-3.9.3 → dulus-3.9.4}/tests/test_license.py +0 -0
  297. {dulus-3.9.3 → dulus-3.9.4}/tests/test_mcp.py +0 -0
  298. {dulus-3.9.3 → dulus-3.9.4}/tests/test_memory.py +0 -0
  299. {dulus-3.9.3 → dulus-3.9.4}/tests/test_notification_manager.py +0 -0
  300. {dulus-3.9.3 → dulus-3.9.4}/tests/test_plugin.py +0 -0
  301. {dulus-3.9.3 → dulus-3.9.4}/tests/test_session_fork.py +0 -0
  302. {dulus-3.9.3 → dulus-3.9.4}/tests/test_shell_mode.py +0 -0
  303. {dulus-3.9.3 → dulus-3.9.4}/tests/test_skills.py +0 -0
  304. {dulus-3.9.3 → dulus-3.9.4}/tests/test_steer_input.py +0 -0
  305. {dulus-3.9.3 → dulus-3.9.4}/tests/test_subagent.py +0 -0
  306. {dulus-3.9.3 → dulus-3.9.4}/tests/test_task.py +0 -0
  307. {dulus-3.9.3 → dulus-3.9.4}/tests/test_telegram_buffer.py +0 -0
  308. {dulus-3.9.3 → dulus-3.9.4}/tests/test_think_tool.py +0 -0
  309. {dulus-3.9.3 → dulus-3.9.4}/tests/test_todo_tool.py +0 -0
  310. {dulus-3.9.3 → dulus-3.9.4}/tests/test_todo_visualization.py +0 -0
  311. {dulus-3.9.3 → dulus-3.9.4}/tests/test_tool_registry.py +0 -0
  312. {dulus-3.9.3 → dulus-3.9.4}/tests/test_tree_ls.py +0 -0
  313. {dulus-3.9.3 → dulus-3.9.4}/tests/test_voice.py +0 -0
  314. {dulus-3.9.3 → dulus-3.9.4}/tests/test_wire_events.py +0 -0
  315. {dulus-3.9.3 → dulus-3.9.4}/tmux_offloader.py +0 -0
  316. {dulus-3.9.3 → dulus-3.9.4}/tmux_tools.py +0 -0
  317. {dulus-3.9.3 → dulus-3.9.4}/tool_registry.py +0 -0
  318. {dulus-3.9.3 → dulus-3.9.4}/tools.py +0 -0
  319. {dulus-3.9.3 → dulus-3.9.4}/ui/__init__.py +0 -0
  320. {dulus-3.9.3 → dulus-3.9.4}/ui/input.py +0 -0
  321. {dulus-3.9.3 → dulus-3.9.4}/ui/render.py +0 -0
  322. {dulus-3.9.3 → dulus-3.9.4}/updater.py +0 -0
  323. {dulus-3.9.3 → dulus-3.9.4}/voice/__init__.py +0 -0
  324. {dulus-3.9.3 → dulus-3.9.4}/voice/audio_utils.py +0 -0
  325. {dulus-3.9.3 → dulus-3.9.4}/voice/keyterms.py +0 -0
  326. {dulus-3.9.3 → dulus-3.9.4}/voice/recorder.py +0 -0
  327. {dulus-3.9.3 → dulus-3.9.4}/voice/stt.py +0 -0
  328. {dulus-3.9.3 → dulus-3.9.4}/voice/tts.py +0 -0
  329. {dulus-3.9.3 → dulus-3.9.4}/voice/wake_word.py +0 -0
  330. {dulus-3.9.3 → dulus-3.9.4}/webbridge/__init__.py +0 -0
  331. {dulus-3.9.3 → dulus-3.9.4}/webbridge/core.py +0 -0
  332. {dulus-3.9.3 → dulus-3.9.4}/webbridge/tools.py +0 -0
  333. {dulus-3.9.3 → dulus-3.9.4}/webchat.py +0 -0
  334. {dulus-3.9.3 → dulus-3.9.4}/webchat_server.py +0 -0
  335. {dulus-3.9.3 → dulus-3.9.4}/welcome.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 3.9.3
3
+ Version: 3.9.4
4
4
  Summary: Use IA as an agent without an API key. $0. Harvest your browser session for Gemini (guest, no login), Claude.ai, Claude Code, Kimi.com, Qwen, DeepSeek — drive them like an API, no per-token billing. Plus LiteLLM (100+ paid providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, voice, OCR, MemPalace, embedded sandbox OS.
5
5
  Author: KevRojo
6
6
  License: GPL-3.0
@@ -198,8 +198,34 @@ def load_config() -> dict:
198
198
 
199
199
  def save_config(cfg: dict):
200
200
  CONFIG_DIR.mkdir(exist_ok=True)
201
- # Strip internal runtime keys (e.g. _run_query_callback) before saving
202
- data = {k: v for k, v in cfg.items() if not k.startswith("_")}
201
+ # Build a complete config from defaults + whatever is already on disk, THEN
202
+ # apply the runtime changes on top. This prevents catastrophic resets: if a
203
+ # caller passes a thin `cfg` (e.g. only {"lang", "user_name"} at early
204
+ # startup or from a command that rebuilt a minimal dict), we must NOT drop
205
+ # every other key the user had. Previously we wrote `cfg` verbatim, so a
206
+ # thin dict wiped the entire config down to those few keys — exactly the
207
+ # "config shrank to lang+user_name" bug. Mirror the private repo's logic.
208
+ data = dict(DEFAULTS)
209
+ if CONFIG_FILE.exists():
210
+ try:
211
+ existing = json.loads(CONFIG_FILE.read_text(encoding="utf-8"))
212
+ if isinstance(existing, dict):
213
+ data.update(existing)
214
+ except Exception:
215
+ # Corrupt on-disk config: fall back to the last-known-good backup so
216
+ # we still don't lose the user's keys on this save.
217
+ try:
218
+ backup = CONFIG_FILE.with_suffix(".json.bak")
219
+ if backup.exists():
220
+ bdata = json.loads(backup.read_text(encoding="utf-8"))
221
+ if isinstance(bdata, dict):
222
+ data.update(bdata)
223
+ except Exception:
224
+ pass
225
+ # Strip internal runtime keys (e.g. _run_query_callback), then apply the
226
+ # caller's runtime changes on top of the merged base.
227
+ runtime = {k: v for k, v in cfg.items() if not k.startswith("_")}
228
+ data.update(runtime)
203
229
  # Encrypt API keys before saving
204
230
  data = _secure_keys(dict(data))
205
231
  payload = json.dumps(data, indent=2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 3.9.3
3
+ Version: 3.9.4
4
4
  Summary: Use IA as an agent without an API key. $0. Harvest your browser session for Gemini (guest, no login), Claude.ai, Claude Code, Kimi.com, Qwen, DeepSeek — drive them like an API, no per-token billing. Plus LiteLLM (100+ paid providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, voice, OCR, MemPalace, embedded sandbox OS.
5
5
  Author: KevRojo
6
6
  License: GPL-3.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dulus"
7
- version = "3.9.3"
7
+ version = "3.9.4"
8
8
  description = "Use IA as an agent without an API key. $0. Harvest your browser session for Gemini (guest, no login), Claude.ai, Claude Code, Kimi.com, Qwen, DeepSeek — drive them like an API, no per-token billing. Plus LiteLLM (100+ paid providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, voice, OCR, MemPalace, embedded sandbox OS."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes