dulus 3.9.4__tar.gz → 3.9.5__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.4/dulus.egg-info → dulus-3.9.5}/PKG-INFO +1 -1
  2. {dulus-3.9.4 → dulus-3.9.5/dulus.egg-info}/PKG-INFO +1 -1
  3. {dulus-3.9.4 → dulus-3.9.5}/pyproject.toml +1 -1
  4. {dulus-3.9.4 → dulus-3.9.5}/voice/tts.py +30 -1
  5. {dulus-3.9.4 → dulus-3.9.5}/LICENSE +0 -0
  6. {dulus-3.9.4 → dulus-3.9.5}/MANIFEST.in +0 -0
  7. {dulus-3.9.4 → dulus-3.9.5}/README.md +0 -0
  8. {dulus-3.9.4 → dulus-3.9.5}/agent.py +0 -0
  9. {dulus-3.9.4 → dulus-3.9.5}/analytics.py +0 -0
  10. {dulus-3.9.4 → dulus-3.9.5}/backend/__init__.py +0 -0
  11. {dulus-3.9.4 → dulus-3.9.5}/backend/agents_bridge.py +0 -0
  12. {dulus-3.9.4 → dulus-3.9.5}/backend/compressor.py +0 -0
  13. {dulus-3.9.4 → dulus-3.9.5}/backend/context.py +0 -0
  14. {dulus-3.9.4 → dulus-3.9.5}/backend/githook.py +0 -0
  15. {dulus-3.9.4 → dulus-3.9.5}/backend/marketplace.py +0 -0
  16. {dulus-3.9.4 → dulus-3.9.5}/backend/mempalace_bridge.py +0 -0
  17. {dulus-3.9.4 → dulus-3.9.5}/backend/personas.py +0 -0
  18. {dulus-3.9.4 → dulus-3.9.5}/backend/plugins.py +0 -0
  19. {dulus-3.9.4 → dulus-3.9.5}/backend/server.py +0 -0
  20. {dulus-3.9.4 → dulus-3.9.5}/backend/tasks.py +0 -0
  21. {dulus-3.9.4 → dulus-3.9.5}/batch_api.py +0 -0
  22. {dulus-3.9.4 → dulus-3.9.5}/checkpoint/__init__.py +0 -0
  23. {dulus-3.9.4 → dulus-3.9.5}/checkpoint/hooks.py +0 -0
  24. {dulus-3.9.4 → dulus-3.9.5}/checkpoint/store.py +0 -0
  25. {dulus-3.9.4 → dulus-3.9.5}/checkpoint/types.py +0 -0
  26. {dulus-3.9.4 → dulus-3.9.5}/claude_code_watcher.py +0 -0
  27. {dulus-3.9.4 → dulus-3.9.5}/clipboard_utils.py +0 -0
  28. {dulus-3.9.4 → dulus-3.9.5}/cloudsave.py +0 -0
  29. {dulus-3.9.4 → dulus-3.9.5}/common.py +0 -0
  30. {dulus-3.9.4 → dulus-3.9.5}/compaction.py +0 -0
  31. {dulus-3.9.4 → dulus-3.9.5}/config.py +0 -0
  32. {dulus-3.9.4 → dulus-3.9.5}/context.py +0 -0
  33. {dulus-3.9.4 → dulus-3.9.5}/data/__init__.py +0 -0
  34. {dulus-3.9.4 → dulus-3.9.5}/data/active_persona.json +0 -0
  35. {dulus-3.9.4 → dulus-3.9.5}/data/marketplace.json +0 -0
  36. {dulus-3.9.4 → dulus-3.9.5}/data/personas.json +0 -0
  37. {dulus-3.9.4 → dulus-3.9.5}/data/plugins/__init__.py +0 -0
  38. {dulus-3.9.4 → dulus-3.9.5}/data/plugins/composio/__init__.py +0 -0
  39. {dulus-3.9.4 → dulus-3.9.5}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  40. {dulus-3.9.4 → dulus-3.9.5}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  41. {dulus-3.9.4 → dulus-3.9.5}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
  42. {dulus-3.9.4 → dulus-3.9.5}/data/plugins/composio/plugin.json +0 -0
  43. {dulus-3.9.4 → dulus-3.9.5}/data/plugins/composio/plugin_tool.py +0 -0
  44. {dulus-3.9.4 → dulus-3.9.5}/data/tasks.json +0 -0
  45. {dulus-3.9.4 → dulus-3.9.5}/docs/API.md +0 -0
  46. {dulus-3.9.4 → dulus-3.9.5}/docs/BRAND_GUIDE.md +0 -0
  47. {dulus-3.9.4 → dulus-3.9.5}/docs/CHANGELOG.md +0 -0
  48. {dulus-3.9.4 → dulus-3.9.5}/docs/CONTRIBUTING.md +0 -0
  49. {dulus-3.9.4 → dulus-3.9.5}/docs/DEPLOYMENT.md +0 -0
  50. {dulus-3.9.4 → dulus-3.9.5}/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
  51. {dulus-3.9.4 → dulus-3.9.5}/docs/FAQ.md +0 -0
  52. {dulus-3.9.4 → dulus-3.9.5}/docs/GETTING_STARTED.md +0 -0
  53. {dulus-3.9.4 → dulus-3.9.5}/docs/INVESTOR_BRIEF.md +0 -0
  54. {dulus-3.9.4 → dulus-3.9.5}/docs/README.md +0 -0
  55. {dulus-3.9.4 → dulus-3.9.5}/docs/README_AR.md +0 -0
  56. {dulus-3.9.4 → dulus-3.9.5}/docs/README_EN.md +0 -0
  57. {dulus-3.9.4 → dulus-3.9.5}/docs/README_ES.md +0 -0
  58. {dulus-3.9.4 → dulus-3.9.5}/docs/README_FR.md +0 -0
  59. {dulus-3.9.4 → dulus-3.9.5}/docs/README_JA.md +0 -0
  60. {dulus-3.9.4 → dulus-3.9.5}/docs/README_KO.md +0 -0
  61. {dulus-3.9.4 → dulus-3.9.5}/docs/README_PT.md +0 -0
  62. {dulus-3.9.4 → dulus-3.9.5}/docs/README_RU.md +0 -0
  63. {dulus-3.9.4 → dulus-3.9.5}/docs/README_ZH.md +0 -0
  64. {dulus-3.9.4 → dulus-3.9.5}/docs/SECURITY.md +0 -0
  65. {dulus-3.9.4 → dulus-3.9.5}/docs/__init__.py +0 -0
  66. {dulus-3.9.4 → dulus-3.9.5}/docs/api.html +0 -0
  67. {dulus-3.9.4 → dulus-3.9.5}/docs/architecture.md +0 -0
  68. {dulus-3.9.4 → dulus-3.9.5}/docs/azure-speech-template.json +0 -0
  69. {dulus-3.9.4 → dulus-3.9.5}/docs/dashboard/index.html +0 -0
  70. {dulus-3.9.4 → dulus-3.9.5}/docs/divider.svg +0 -0
  71. {dulus-3.9.4 → dulus-3.9.5}/docs/dulus-bird.png +0 -0
  72. {dulus-3.9.4 → dulus-3.9.5}/docs/generate.py +0 -0
  73. {dulus-3.9.4 → dulus-3.9.5}/docs/hero.svg +0 -0
  74. {dulus-3.9.4 → dulus-3.9.5}/docs/index.html +0 -0
  75. {dulus-3.9.4 → dulus-3.9.5}/docs/news.md +0 -0
  76. {dulus-3.9.4 → dulus-3.9.5}/docs/nvidia-models.svg +0 -0
  77. {dulus-3.9.4 → dulus-3.9.5}/docs/particle-playground.html +0 -0
  78. {dulus-3.9.4 → dulus-3.9.5}/docs/personas/index.html +0 -0
  79. {dulus-3.9.4 → dulus-3.9.5}/docs/poetry-banner.png +0 -0
  80. {dulus-3.9.4 → dulus-3.9.5}/docs/preview.html +0 -0
  81. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-agents.svg +0 -0
  82. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-brainstorm.svg +0 -0
  83. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-bridges.svg +0 -0
  84. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-features.svg +0 -0
  85. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-freetier.svg +0 -0
  86. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-memory.svg +0 -0
  87. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-models.svg +0 -0
  88. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-perms.svg +0 -0
  89. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-plugins.svg +0 -0
  90. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-quickstart.svg +0 -0
  91. {dulus-3.9.4 → dulus-3.9.5}/docs/sec-ssj.svg +0 -0
  92. {dulus-3.9.4 → dulus-3.9.5}/docs/spinners.svg +0 -0
  93. {dulus-3.9.4 → dulus-3.9.5}/docs/split-pane.svg +0 -0
  94. {dulus-3.9.4 → dulus-3.9.5}/docs/terminal-boot.svg +0 -0
  95. {dulus-3.9.4 → dulus-3.9.5}/dulus.egg-info/SOURCES.txt +0 -0
  96. {dulus-3.9.4 → dulus-3.9.5}/dulus.egg-info/dependency_links.txt +0 -0
  97. {dulus-3.9.4 → dulus-3.9.5}/dulus.egg-info/entry_points.txt +0 -0
  98. {dulus-3.9.4 → dulus-3.9.5}/dulus.egg-info/requires.txt +0 -0
  99. {dulus-3.9.4 → dulus-3.9.5}/dulus.egg-info/top_level.txt +0 -0
  100. {dulus-3.9.4 → dulus-3.9.5}/dulus.py +0 -0
  101. {dulus-3.9.4 → dulus-3.9.5}/dulus_gui.py +0 -0
  102. {dulus-3.9.4 → dulus-3.9.5}/dulus_gui_web.py +0 -0
  103. {dulus-3.9.4 → dulus-3.9.5}/dulus_mcp/__init__.py +0 -0
  104. {dulus-3.9.4 → dulus-3.9.5}/dulus_mcp/client.py +0 -0
  105. {dulus-3.9.4 → dulus-3.9.5}/dulus_mcp/commands.py +0 -0
  106. {dulus-3.9.4 → dulus-3.9.5}/dulus_mcp/config.py +0 -0
  107. {dulus-3.9.4 → dulus-3.9.5}/dulus_mcp/hub.py +0 -0
  108. {dulus-3.9.4 → dulus-3.9.5}/dulus_mcp/tools.py +0 -0
  109. {dulus-3.9.4 → dulus-3.9.5}/dulus_mcp/types.py +0 -0
  110. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/__init__.py +0 -0
  111. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/add_dir_manager.py +0 -0
  112. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/afk_mode.py +0 -0
  113. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/approval_runtime.py +0 -0
  114. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/background_tasks.py +0 -0
  115. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/clipboard_utils.py +0 -0
  116. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/diff_visualizer.py +0 -0
  117. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/export_import.py +0 -0
  118. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/hook_engine.py +0 -0
  119. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/notification_manager.py +0 -0
  120. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/session_fork.py +0 -0
  121. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/shell_mode.py +0 -0
  122. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/todo_visualizer.py +0 -0
  123. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/tree_ls.py +0 -0
  124. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/wire_events.py +0 -0
  125. {dulus-3.9.4 → dulus-3.9.5}/dulus_tools/yolo_mode.py +0 -0
  126. {dulus-3.9.4 → dulus-3.9.5}/governance.py +0 -0
  127. {dulus-3.9.4 → dulus-3.9.5}/gui/__init__.py +0 -0
  128. {dulus-3.9.4 → dulus-3.9.5}/gui/agent_bridge.py +0 -0
  129. {dulus-3.9.4 → dulus-3.9.5}/gui/chat_widget.py +0 -0
  130. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/App.tsx +0 -0
  131. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/THIRD_PARTY_NOTICES.md +0 -0
  132. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/dist/index.html +0 -0
  133. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/dist/standalone.html +0 -0
  134. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/index.html +0 -0
  135. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/index.tsx +0 -0
  136. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/metadata.json +0 -0
  137. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/package-lock.json +0 -0
  138. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/package.json +0 -0
  139. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/types.ts +0 -0
  140. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/utils.ts +0 -0
  141. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/vertex-ai-proxy-interceptor.js +0 -0
  142. {dulus-3.9.4 → dulus-3.9.5}/gui/dulus_orchestrator/vite.config.ts +0 -0
  143. {dulus-3.9.4 → dulus-3.9.5}/gui/main_window.py +0 -0
  144. {dulus-3.9.4 → dulus-3.9.5}/gui/personas.py +0 -0
  145. {dulus-3.9.4 → dulus-3.9.5}/gui/sandbox_server.py +0 -0
  146. {dulus-3.9.4 → dulus-3.9.5}/gui/session_utils.py +0 -0
  147. {dulus-3.9.4 → dulus-3.9.5}/gui/settings_dialog.py +0 -0
  148. {dulus-3.9.4 → dulus-3.9.5}/gui/sidebar.py +0 -0
  149. {dulus-3.9.4 → dulus-3.9.5}/gui/tasks_view.py +0 -0
  150. {dulus-3.9.4 → dulus-3.9.5}/gui/themes.py +0 -0
  151. {dulus-3.9.4 → dulus-3.9.5}/gui/tool_panel.py +0 -0
  152. {dulus-3.9.4 → dulus-3.9.5}/input.py +0 -0
  153. {dulus-3.9.4 → dulus-3.9.5}/license_manager.py +0 -0
  154. {dulus-3.9.4 → dulus-3.9.5}/memory/__init__.py +0 -0
  155. {dulus-3.9.4 → dulus-3.9.5}/memory/audit.py +0 -0
  156. {dulus-3.9.4 → dulus-3.9.5}/memory/consolidator.py +0 -0
  157. {dulus-3.9.4 → dulus-3.9.5}/memory/context.py +0 -0
  158. {dulus-3.9.4 → dulus-3.9.5}/memory/offload.py +0 -0
  159. {dulus-3.9.4 → dulus-3.9.5}/memory/palace.py +0 -0
  160. {dulus-3.9.4 → dulus-3.9.5}/memory/scan.py +0 -0
  161. {dulus-3.9.4 → dulus-3.9.5}/memory/sessions.py +0 -0
  162. {dulus-3.9.4 → dulus-3.9.5}/memory/store.py +0 -0
  163. {dulus-3.9.4 → dulus-3.9.5}/memory/tools.py +0 -0
  164. {dulus-3.9.4 → dulus-3.9.5}/memory/types.py +0 -0
  165. {dulus-3.9.4 → dulus-3.9.5}/memory/vector_search.py +0 -0
  166. {dulus-3.9.4 → dulus-3.9.5}/multi_agent/__init__.py +0 -0
  167. {dulus-3.9.4 → dulus-3.9.5}/multi_agent/subagent.py +0 -0
  168. {dulus-3.9.4 → dulus-3.9.5}/multi_agent/tools.py +0 -0
  169. {dulus-3.9.4 → dulus-3.9.5}/offload_helper.py +0 -0
  170. {dulus-3.9.4 → dulus-3.9.5}/personality_config.py +0 -0
  171. {dulus-3.9.4 → dulus-3.9.5}/plugin/__init__.py +0 -0
  172. {dulus-3.9.4 → dulus-3.9.5}/plugin/autoadapter.py +0 -0
  173. {dulus-3.9.4 → dulus-3.9.5}/plugin/loader.py +0 -0
  174. {dulus-3.9.4 → dulus-3.9.5}/plugin/recommend.py +0 -0
  175. {dulus-3.9.4 → dulus-3.9.5}/plugin/store.py +0 -0
  176. {dulus-3.9.4 → dulus-3.9.5}/plugin/types.py +0 -0
  177. {dulus-3.9.4 → dulus-3.9.5}/providers.py +0 -0
  178. {dulus-3.9.4 → dulus-3.9.5}/sandbox/README.md +0 -0
  179. {dulus-3.9.4 → dulus-3.9.5}/sandbox/__init__.py +0 -0
  180. {dulus-3.9.4 → dulus-3.9.5}/sandbox/components.json +0 -0
  181. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
  182. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
  183. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/index.html +0 -0
  184. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/wallpaper-default.jpg +0 -0
  185. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/wallpapers/default.jpeg +0 -0
  186. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/wallpapers/light.jpeg +0 -0
  187. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  188. {dulus-3.9.4 → dulus-3.9.5}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  189. {dulus-3.9.4 → dulus-3.9.5}/sandbox/eslint.config.js +0 -0
  190. {dulus-3.9.4 → dulus-3.9.5}/sandbox/index.html +0 -0
  191. {dulus-3.9.4 → dulus-3.9.5}/sandbox/info.md +0 -0
  192. {dulus-3.9.4 → dulus-3.9.5}/sandbox/package-lock.json +0 -0
  193. {dulus-3.9.4 → dulus-3.9.5}/sandbox/package.json +0 -0
  194. {dulus-3.9.4 → dulus-3.9.5}/sandbox/postcss.config.js +0 -0
  195. {dulus-3.9.4 → dulus-3.9.5}/sandbox/tailwind.config.js +0 -0
  196. {dulus-3.9.4 → dulus-3.9.5}/sandbox/tsconfig.app.json +0 -0
  197. {dulus-3.9.4 → dulus-3.9.5}/sandbox/tsconfig.json +0 -0
  198. {dulus-3.9.4 → dulus-3.9.5}/sandbox/tsconfig.node.json +0 -0
  199. {dulus-3.9.4 → dulus-3.9.5}/sandbox/vite.config.ts +0 -0
  200. {dulus-3.9.4 → dulus-3.9.5}/sandbox_bootstrap.py +0 -0
  201. {dulus-3.9.4 → dulus-3.9.5}/setup.cfg +0 -0
  202. {dulus-3.9.4 → dulus-3.9.5}/skill/__init__.py +0 -0
  203. {dulus-3.9.4 → dulus-3.9.5}/skill/builtin.py +0 -0
  204. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/LICENSE-obsidian-skills +0 -0
  205. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/README.md +0 -0
  206. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/defuddle/SKILL.md +0 -0
  207. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/json-canvas/SKILL.md +0 -0
  208. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
  209. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/obsidian-bases/SKILL.md +0 -0
  210. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
  211. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/obsidian-cli/SKILL.md +0 -0
  212. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
  213. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
  214. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
  215. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
  216. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/README.md +0 -0
  217. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/SKILL.md +0 -0
  218. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/addresses.json +0 -0
  219. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/advancedbackgroundchecks.json +0 -0
  220. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/beenverified.json +0 -0
  221. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/clustal.json +0 -0
  222. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/clustrmaps.json +0 -0
  223. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/cyberbackgroundchecks.json +0 -0
  224. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/familytreenow.json +0 -0
  225. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/fastpeoplesearch.json +0 -0
  226. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/intelius.json +0 -0
  227. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/mylife.json +0 -0
  228. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/nuwber.json +0 -0
  229. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/peekyou.json +0 -0
  230. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/peoplefinders.json +0 -0
  231. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/radaris.json +0 -0
  232. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/rehold.json +0 -0
  233. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/searchpeoplefree.json +0 -0
  234. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/socialcatfish.json +0 -0
  235. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/spokeo.json +0 -0
  236. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/thatsthem.json +0 -0
  237. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/truepeoplesearch.json +0 -0
  238. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/usphonebook.json +0 -0
  239. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/brokers/whitepages.json +0 -0
  240. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/legal/ccpa.md +0 -0
  241. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/legal/drop.md +0 -0
  242. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/legal/gdpr.md +0 -0
  243. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/methods.md +0 -0
  244. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/site-playbooks.md +0 -0
  245. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/references/state-machine.md +0 -0
  246. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/autopilot.py +0 -0
  247. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/badbool.py +0 -0
  248. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/brokers.py +0 -0
  249. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/cdp.py +0 -0
  250. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/config.py +0 -0
  251. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/crypto.py +0 -0
  252. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/dossier.py +0 -0
  253. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/email_modes.py +0 -0
  254. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/emailer.py +0 -0
  255. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/ledger.py +0 -0
  256. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/legal.py +0 -0
  257. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/paths.py +0 -0
  258. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/pdd.py +0 -0
  259. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/registry.py +0 -0
  260. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/report.py +0 -0
  261. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/scan.py +0 -0
  262. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/storage.py +0 -0
  263. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/tiers.py +0 -0
  264. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/scripts/vectors.py +0 -0
  265. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/templates/consent/authorization.md +0 -0
  266. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/templates/emails/ccpa-authorized-agent.txt +0 -0
  267. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/templates/emails/ccpa-deletion.txt +0 -0
  268. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/templates/emails/ccpa-indirect-deletion.txt +0 -0
  269. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/templates/emails/gdpr-erasure.txt +0 -0
  270. {dulus-3.9.4 → dulus-3.9.5}/skill/bundled/unbroker/templates/emails/generic-optout.txt +0 -0
  271. {dulus-3.9.4 → dulus-3.9.5}/skill/clawhub.py +0 -0
  272. {dulus-3.9.4 → dulus-3.9.5}/skill/executor.py +0 -0
  273. {dulus-3.9.4 → dulus-3.9.5}/skill/loader.py +0 -0
  274. {dulus-3.9.4 → dulus-3.9.5}/skill/tools.py +0 -0
  275. {dulus-3.9.4 → dulus-3.9.5}/skills.py +0 -0
  276. {dulus-3.9.4 → dulus-3.9.5}/soul.py +0 -0
  277. {dulus-3.9.4 → dulus-3.9.5}/spinner.py +0 -0
  278. {dulus-3.9.4 → dulus-3.9.5}/string_utils.py +0 -0
  279. {dulus-3.9.4 → dulus-3.9.5}/subagent.py +0 -0
  280. {dulus-3.9.4 → dulus-3.9.5}/task/__init__.py +0 -0
  281. {dulus-3.9.4 → dulus-3.9.5}/task/store.py +0 -0
  282. {dulus-3.9.4 → dulus-3.9.5}/task/tools.py +0 -0
  283. {dulus-3.9.4 → dulus-3.9.5}/task/types.py +0 -0
  284. {dulus-3.9.4 → dulus-3.9.5}/tests/test_afk_yolo.py +0 -0
  285. {dulus-3.9.4 → dulus-3.9.5}/tests/test_approval_runtime.py +0 -0
  286. {dulus-3.9.4 → dulus-3.9.5}/tests/test_background_task_tools.py +0 -0
  287. {dulus-3.9.4 → dulus-3.9.5}/tests/test_background_tasks.py +0 -0
  288. {dulus-3.9.4 → dulus-3.9.5}/tests/test_checkpoint.py +0 -0
  289. {dulus-3.9.4 → dulus-3.9.5}/tests/test_clipboard_utils.py +0 -0
  290. {dulus-3.9.4 → dulus-3.9.5}/tests/test_compaction.py +0 -0
  291. {dulus-3.9.4 → dulus-3.9.5}/tests/test_diff_view.py +0 -0
  292. {dulus-3.9.4 → dulus-3.9.5}/tests/test_diff_visualization.py +0 -0
  293. {dulus-3.9.4 → dulus-3.9.5}/tests/test_display_blocks.py +0 -0
  294. {dulus-3.9.4 → dulus-3.9.5}/tests/test_export_import.py +0 -0
  295. {dulus-3.9.4 → dulus-3.9.5}/tests/test_hook_engine.py +0 -0
  296. {dulus-3.9.4 → dulus-3.9.5}/tests/test_injection_fix.py +0 -0
  297. {dulus-3.9.4 → dulus-3.9.5}/tests/test_license.py +0 -0
  298. {dulus-3.9.4 → dulus-3.9.5}/tests/test_mcp.py +0 -0
  299. {dulus-3.9.4 → dulus-3.9.5}/tests/test_memory.py +0 -0
  300. {dulus-3.9.4 → dulus-3.9.5}/tests/test_notification_manager.py +0 -0
  301. {dulus-3.9.4 → dulus-3.9.5}/tests/test_plugin.py +0 -0
  302. {dulus-3.9.4 → dulus-3.9.5}/tests/test_session_fork.py +0 -0
  303. {dulus-3.9.4 → dulus-3.9.5}/tests/test_shell_mode.py +0 -0
  304. {dulus-3.9.4 → dulus-3.9.5}/tests/test_skills.py +0 -0
  305. {dulus-3.9.4 → dulus-3.9.5}/tests/test_steer_input.py +0 -0
  306. {dulus-3.9.4 → dulus-3.9.5}/tests/test_subagent.py +0 -0
  307. {dulus-3.9.4 → dulus-3.9.5}/tests/test_task.py +0 -0
  308. {dulus-3.9.4 → dulus-3.9.5}/tests/test_telegram_buffer.py +0 -0
  309. {dulus-3.9.4 → dulus-3.9.5}/tests/test_think_tool.py +0 -0
  310. {dulus-3.9.4 → dulus-3.9.5}/tests/test_todo_tool.py +0 -0
  311. {dulus-3.9.4 → dulus-3.9.5}/tests/test_todo_visualization.py +0 -0
  312. {dulus-3.9.4 → dulus-3.9.5}/tests/test_tool_registry.py +0 -0
  313. {dulus-3.9.4 → dulus-3.9.5}/tests/test_tree_ls.py +0 -0
  314. {dulus-3.9.4 → dulus-3.9.5}/tests/test_voice.py +0 -0
  315. {dulus-3.9.4 → dulus-3.9.5}/tests/test_wire_events.py +0 -0
  316. {dulus-3.9.4 → dulus-3.9.5}/tmux_offloader.py +0 -0
  317. {dulus-3.9.4 → dulus-3.9.5}/tmux_tools.py +0 -0
  318. {dulus-3.9.4 → dulus-3.9.5}/tool_registry.py +0 -0
  319. {dulus-3.9.4 → dulus-3.9.5}/tools.py +0 -0
  320. {dulus-3.9.4 → dulus-3.9.5}/ui/__init__.py +0 -0
  321. {dulus-3.9.4 → dulus-3.9.5}/ui/input.py +0 -0
  322. {dulus-3.9.4 → dulus-3.9.5}/ui/render.py +0 -0
  323. {dulus-3.9.4 → dulus-3.9.5}/updater.py +0 -0
  324. {dulus-3.9.4 → dulus-3.9.5}/voice/__init__.py +0 -0
  325. {dulus-3.9.4 → dulus-3.9.5}/voice/audio_utils.py +0 -0
  326. {dulus-3.9.4 → dulus-3.9.5}/voice/keyterms.py +0 -0
  327. {dulus-3.9.4 → dulus-3.9.5}/voice/recorder.py +0 -0
  328. {dulus-3.9.4 → dulus-3.9.5}/voice/stt.py +0 -0
  329. {dulus-3.9.4 → dulus-3.9.5}/voice/wake_word.py +0 -0
  330. {dulus-3.9.4 → dulus-3.9.5}/webbridge/__init__.py +0 -0
  331. {dulus-3.9.4 → dulus-3.9.5}/webbridge/core.py +0 -0
  332. {dulus-3.9.4 → dulus-3.9.5}/webbridge/tools.py +0 -0
  333. {dulus-3.9.4 → dulus-3.9.5}/webchat.py +0 -0
  334. {dulus-3.9.4 → dulus-3.9.5}/webchat_server.py +0 -0
  335. {dulus-3.9.4 → dulus-3.9.5}/welcome.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 3.9.4
3
+ Version: 3.9.5
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 3.9.4
3
+ Version: 3.9.5
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.4"
7
+ version = "3.9.5"
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"
@@ -33,16 +33,45 @@ _stop_event = threading.Event()
33
33
  _say_lock = threading.Lock()
34
34
 
35
35
  def _watch_for_cancel() -> None:
36
- """Background thread: set _stop_event if user presses 'c'."""
36
+ """Background thread: set _stop_event if user presses 'c'.
37
+
38
+ Two detection paths, because one alone is unreliable:
39
+ 1. msvcrt.kbhit() — only sees keys when the raw console owns stdin.
40
+ When prompt_toolkit (the fancy REPL input) is active, IT consumes
41
+ the keystroke first and msvcrt never sees the 'c' — which is why
42
+ cancel "sometimes didn't work" and you had to wait out the audio.
43
+ 2. GetAsyncKeyState(VK 'C') — reads the PHYSICAL key state straight
44
+ from the OS, regardless of who owns stdin. Edge-detected (up→down)
45
+ so a held key doesn't retrigger.
46
+ Also sleeps 30ms per iteration — the old loop busy-spun at 100% CPU.
47
+ """
37
48
  try:
38
49
  import msvcrt
50
+ try:
51
+ import ctypes
52
+ _user32 = ctypes.windll.user32
53
+ except Exception:
54
+ _user32 = None
55
+ VK_C = 0x43
56
+ was_down = bool(_user32 and (_user32.GetAsyncKeyState(VK_C) & 0x8000))
39
57
  while not _stop_event.is_set():
58
+ # Path 1: classic console read (works when no prompt is active).
40
59
  if msvcrt.kbhit():
41
60
  ch = msvcrt.getwch()
42
61
  if ch.lower() == 'c':
43
62
  _stop_event.set()
44
63
  print("\n ⏹ TTS stopped.", flush=True)
45
64
  return
65
+ # Path 2: physical key state — catches the press even when
66
+ # prompt_toolkit swallowed the stdin byte.
67
+ if _user32 is not None:
68
+ is_down = bool(_user32.GetAsyncKeyState(VK_C) & 0x8000)
69
+ if is_down and not was_down:
70
+ _stop_event.set()
71
+ print("\n ⏹ TTS stopped.", flush=True)
72
+ return
73
+ was_down = is_down
74
+ time.sleep(0.03)
46
75
  except Exception:
47
76
  pass
48
77
 
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
File without changes