dulus 0.2.54__tar.gz → 0.2.55__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 (361) hide show
  1. {dulus-0.2.54/dulus.egg-info → dulus-0.2.55}/PKG-INFO +1 -1
  2. {dulus-0.2.54 → dulus-0.2.55}/data/context.json +27 -25
  3. {dulus-0.2.54 → dulus-0.2.55/dulus.egg-info}/PKG-INFO +1 -1
  4. {dulus-0.2.54 → dulus-0.2.55}/input.py +17 -7
  5. {dulus-0.2.54 → dulus-0.2.55}/pyproject.toml +1 -1
  6. {dulus-0.2.54 → dulus-0.2.55}/voice/audio_utils.py +5 -2
  7. {dulus-0.2.54 → dulus-0.2.55}/voice/tts.py +4 -5
  8. {dulus-0.2.54 → dulus-0.2.55}/voice/wake_word.py +5 -2
  9. {dulus-0.2.54 → dulus-0.2.55}/LICENSE +0 -0
  10. {dulus-0.2.54 → dulus-0.2.55}/MANIFEST.in +0 -0
  11. {dulus-0.2.54 → dulus-0.2.55}/README.md +0 -0
  12. {dulus-0.2.54 → dulus-0.2.55}/agent.py +0 -0
  13. {dulus-0.2.54 → dulus-0.2.55}/backend/__init__.py +0 -0
  14. {dulus-0.2.54 → dulus-0.2.55}/backend/agents_bridge.py +0 -0
  15. {dulus-0.2.54 → dulus-0.2.55}/backend/compressor.py +0 -0
  16. {dulus-0.2.54 → dulus-0.2.55}/backend/context.py +0 -0
  17. {dulus-0.2.54 → dulus-0.2.55}/backend/githook.py +0 -0
  18. {dulus-0.2.54 → dulus-0.2.55}/backend/marketplace.py +0 -0
  19. {dulus-0.2.54 → dulus-0.2.55}/backend/mempalace_bridge.py +0 -0
  20. {dulus-0.2.54 → dulus-0.2.55}/backend/personas.py +0 -0
  21. {dulus-0.2.54 → dulus-0.2.55}/backend/plugins.py +0 -0
  22. {dulus-0.2.54 → dulus-0.2.55}/backend/server.py +0 -0
  23. {dulus-0.2.54 → dulus-0.2.55}/backend/tasks.py +0 -0
  24. {dulus-0.2.54 → dulus-0.2.55}/batch_api.py +0 -0
  25. {dulus-0.2.54 → dulus-0.2.55}/checkpoint/__init__.py +0 -0
  26. {dulus-0.2.54 → dulus-0.2.55}/checkpoint/hooks.py +0 -0
  27. {dulus-0.2.54 → dulus-0.2.55}/checkpoint/store.py +0 -0
  28. {dulus-0.2.54 → dulus-0.2.55}/checkpoint/types.py +0 -0
  29. {dulus-0.2.54 → dulus-0.2.55}/claude_code_watcher.py +0 -0
  30. {dulus-0.2.54 → dulus-0.2.55}/clipboard_utils.py +0 -0
  31. {dulus-0.2.54 → dulus-0.2.55}/cloudsave.py +0 -0
  32. {dulus-0.2.54 → dulus-0.2.55}/common.py +0 -0
  33. {dulus-0.2.54 → dulus-0.2.55}/compaction.py +0 -0
  34. {dulus-0.2.54 → dulus-0.2.55}/config.py +0 -0
  35. {dulus-0.2.54 → dulus-0.2.55}/context.py +0 -0
  36. {dulus-0.2.54 → dulus-0.2.55}/data/__init__.py +0 -0
  37. {dulus-0.2.54 → dulus-0.2.55}/data/active_persona.json +0 -0
  38. {dulus-0.2.54 → dulus-0.2.55}/data/marketplace.json +0 -0
  39. {dulus-0.2.54 → dulus-0.2.55}/data/personas.json +0 -0
  40. {dulus-0.2.54 → dulus-0.2.55}/data/plugins/__init__.py +0 -0
  41. {dulus-0.2.54 → dulus-0.2.55}/data/plugins/composio/__init__.py +0 -0
  42. {dulus-0.2.54 → dulus-0.2.55}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  43. {dulus-0.2.54 → dulus-0.2.55}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  44. {dulus-0.2.54 → dulus-0.2.55}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
  45. {dulus-0.2.54 → dulus-0.2.55}/data/plugins/composio/plugin.json +0 -0
  46. {dulus-0.2.54 → dulus-0.2.55}/data/plugins/composio/plugin_tool.py +0 -0
  47. {dulus-0.2.54 → dulus-0.2.55}/data/tasks.json +0 -0
  48. {dulus-0.2.54 → dulus-0.2.55}/docs/README.md +0 -0
  49. {dulus-0.2.54 → dulus-0.2.55}/docs/__init__.py +0 -0
  50. {dulus-0.2.54 → dulus-0.2.55}/docs/api.html +0 -0
  51. {dulus-0.2.54 → dulus-0.2.55}/docs/architecture.md +0 -0
  52. {dulus-0.2.54 → dulus-0.2.55}/docs/azure-speech-template.json +0 -0
  53. {dulus-0.2.54 → dulus-0.2.55}/docs/dashboard/index.html +0 -0
  54. {dulus-0.2.54 → dulus-0.2.55}/docs/divider.svg +0 -0
  55. {dulus-0.2.54 → dulus-0.2.55}/docs/generate.py +0 -0
  56. {dulus-0.2.54 → dulus-0.2.55}/docs/hero.svg +0 -0
  57. {dulus-0.2.54 → dulus-0.2.55}/docs/index.html +0 -0
  58. {dulus-0.2.54 → dulus-0.2.55}/docs/news.md +0 -0
  59. {dulus-0.2.54 → dulus-0.2.55}/docs/nvidia-models.svg +0 -0
  60. {dulus-0.2.54 → dulus-0.2.55}/docs/particle-playground.html +0 -0
  61. {dulus-0.2.54 → dulus-0.2.55}/docs/personas/index.html +0 -0
  62. {dulus-0.2.54 → dulus-0.2.55}/docs/poetry-banner.png +0 -0
  63. {dulus-0.2.54 → dulus-0.2.55}/docs/preview.html +0 -0
  64. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-agents.svg +0 -0
  65. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-brainstorm.svg +0 -0
  66. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-bridges.svg +0 -0
  67. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-features.svg +0 -0
  68. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-freetier.svg +0 -0
  69. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-memory.svg +0 -0
  70. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-models.svg +0 -0
  71. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-perms.svg +0 -0
  72. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-plugins.svg +0 -0
  73. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-quickstart.svg +0 -0
  74. {dulus-0.2.54 → dulus-0.2.55}/docs/sec-ssj.svg +0 -0
  75. {dulus-0.2.54 → dulus-0.2.55}/docs/spinners.svg +0 -0
  76. {dulus-0.2.54 → dulus-0.2.55}/docs/split-pane.svg +0 -0
  77. {dulus-0.2.54 → dulus-0.2.55}/docs/terminal-boot.svg +0 -0
  78. {dulus-0.2.54 → dulus-0.2.55}/docs/uploads/particle-playground.html +0 -0
  79. {dulus-0.2.54 → dulus-0.2.55}/dulus.egg-info/SOURCES.txt +0 -0
  80. {dulus-0.2.54 → dulus-0.2.55}/dulus.egg-info/dependency_links.txt +0 -0
  81. {dulus-0.2.54 → dulus-0.2.55}/dulus.egg-info/entry_points.txt +0 -0
  82. {dulus-0.2.54 → dulus-0.2.55}/dulus.egg-info/requires.txt +0 -0
  83. {dulus-0.2.54 → dulus-0.2.55}/dulus.egg-info/top_level.txt +0 -0
  84. {dulus-0.2.54 → dulus-0.2.55}/dulus.py +0 -0
  85. {dulus-0.2.54 → dulus-0.2.55}/dulus_gui.py +0 -0
  86. {dulus-0.2.54 → dulus-0.2.55}/dulus_mcp/__init__.py +0 -0
  87. {dulus-0.2.54 → dulus-0.2.55}/dulus_mcp/client.py +0 -0
  88. {dulus-0.2.54 → dulus-0.2.55}/dulus_mcp/config.py +0 -0
  89. {dulus-0.2.54 → dulus-0.2.55}/dulus_mcp/tools.py +0 -0
  90. {dulus-0.2.54 → dulus-0.2.55}/dulus_mcp/types.py +0 -0
  91. {dulus-0.2.54 → dulus-0.2.55}/gui/__init__.py +0 -0
  92. {dulus-0.2.54 → dulus-0.2.55}/gui/agent_bridge.py +0 -0
  93. {dulus-0.2.54 → dulus-0.2.55}/gui/chat_widget.py +0 -0
  94. {dulus-0.2.54 → dulus-0.2.55}/gui/main_window.py +0 -0
  95. {dulus-0.2.54 → dulus-0.2.55}/gui/personas.py +0 -0
  96. {dulus-0.2.54 → dulus-0.2.55}/gui/session_utils.py +0 -0
  97. {dulus-0.2.54 → dulus-0.2.55}/gui/settings_dialog.py +0 -0
  98. {dulus-0.2.54 → dulus-0.2.55}/gui/sidebar.py +0 -0
  99. {dulus-0.2.54 → dulus-0.2.55}/gui/tasks_view.py +0 -0
  100. {dulus-0.2.54 → dulus-0.2.55}/gui/themes.py +0 -0
  101. {dulus-0.2.54 → dulus-0.2.55}/gui/tool_panel.py +0 -0
  102. {dulus-0.2.54 → dulus-0.2.55}/license_manager.py +0 -0
  103. {dulus-0.2.54 → dulus-0.2.55}/memory/__init__.py +0 -0
  104. {dulus-0.2.54 → dulus-0.2.55}/memory/audit.py +0 -0
  105. {dulus-0.2.54 → dulus-0.2.55}/memory/consolidator.py +0 -0
  106. {dulus-0.2.54 → dulus-0.2.55}/memory/context.py +0 -0
  107. {dulus-0.2.54 → dulus-0.2.55}/memory/offload.py +0 -0
  108. {dulus-0.2.54 → dulus-0.2.55}/memory/palace.py +0 -0
  109. {dulus-0.2.54 → dulus-0.2.55}/memory/scan.py +0 -0
  110. {dulus-0.2.54 → dulus-0.2.55}/memory/sessions.py +0 -0
  111. {dulus-0.2.54 → dulus-0.2.55}/memory/store.py +0 -0
  112. {dulus-0.2.54 → dulus-0.2.55}/memory/tools.py +0 -0
  113. {dulus-0.2.54 → dulus-0.2.55}/memory/types.py +0 -0
  114. {dulus-0.2.54 → dulus-0.2.55}/memory/vector_search.py +0 -0
  115. {dulus-0.2.54 → dulus-0.2.55}/multi_agent/__init__.py +0 -0
  116. {dulus-0.2.54 → dulus-0.2.55}/multi_agent/subagent.py +0 -0
  117. {dulus-0.2.54 → dulus-0.2.55}/multi_agent/tools.py +0 -0
  118. {dulus-0.2.54 → dulus-0.2.55}/offload_helper.py +0 -0
  119. {dulus-0.2.54 → dulus-0.2.55}/plugin/__init__.py +0 -0
  120. {dulus-0.2.54 → dulus-0.2.55}/plugin/autoadapter.py +0 -0
  121. {dulus-0.2.54 → dulus-0.2.55}/plugin/loader.py +0 -0
  122. {dulus-0.2.54 → dulus-0.2.55}/plugin/recommend.py +0 -0
  123. {dulus-0.2.54 → dulus-0.2.55}/plugin/store.py +0 -0
  124. {dulus-0.2.54 → dulus-0.2.55}/plugin/types.py +0 -0
  125. {dulus-0.2.54 → dulus-0.2.55}/providers.py +0 -0
  126. {dulus-0.2.54 → dulus-0.2.55}/sandbox/README.md +0 -0
  127. {dulus-0.2.54 → dulus-0.2.55}/sandbox/__init__.py +0 -0
  128. {dulus-0.2.54 → dulus-0.2.55}/sandbox/components.json +0 -0
  129. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
  130. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
  131. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/index.html +0 -0
  132. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/wallpaper-default.jpg +0 -0
  133. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/wallpapers/default.jpeg +0 -0
  134. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/wallpapers/light.jpeg +0 -0
  135. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  136. {dulus-0.2.54 → dulus-0.2.55}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  137. {dulus-0.2.54 → dulus-0.2.55}/sandbox/eslint.config.js +0 -0
  138. {dulus-0.2.54 → dulus-0.2.55}/sandbox/index.html +0 -0
  139. {dulus-0.2.54 → dulus-0.2.55}/sandbox/info.md +0 -0
  140. {dulus-0.2.54 → dulus-0.2.55}/sandbox/package-lock.json +0 -0
  141. {dulus-0.2.54 → dulus-0.2.55}/sandbox/package.json +0 -0
  142. {dulus-0.2.54 → dulus-0.2.55}/sandbox/postcss.config.js +0 -0
  143. {dulus-0.2.54 → dulus-0.2.55}/sandbox/public/wallpaper-default.jpg +0 -0
  144. {dulus-0.2.54 → dulus-0.2.55}/sandbox/public/wallpapers/default.jpeg +0 -0
  145. {dulus-0.2.54 → dulus-0.2.55}/sandbox/public/wallpapers/light.jpeg +0 -0
  146. {dulus-0.2.54 → dulus-0.2.55}/sandbox/public/wallpapers/nature.jpeg +0 -0
  147. {dulus-0.2.54 → dulus-0.2.55}/sandbox/public/wallpapers/tech.jpeg +0 -0
  148. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/App.tsx +0 -0
  149. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/AgentMonitor.tsx +0 -0
  150. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/ApiTester.tsx +0 -0
  151. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/AppRouter.tsx +0 -0
  152. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/ArchiveManager.tsx +0 -0
  153. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/AsciiArt.tsx +0 -0
  154. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Base64Tool.tsx +0 -0
  155. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Browser.tsx +0 -0
  156. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Calculator.tsx +0 -0
  157. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Calendar.tsx +0 -0
  158. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Chat.tsx +0 -0
  159. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Chess.tsx +0 -0
  160. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Clock.tsx +0 -0
  161. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/CodeEditor.tsx +0 -0
  162. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/ColorPalette.tsx +0 -0
  163. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/ColorPicker.tsx +0 -0
  164. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Contacts.tsx +0 -0
  165. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/DocumentViewer.tsx +0 -0
  166. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Drawing.tsx +0 -0
  167. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Email.tsx +0 -0
  168. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/FileManager.tsx +0 -0
  169. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/FlappyBird.tsx +0 -0
  170. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/FtpClient.tsx +0 -0
  171. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Game2048.tsx +0 -0
  172. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/GitClient.tsx +0 -0
  173. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/ImageGallery.tsx +0 -0
  174. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/ImageViewer.tsx +0 -0
  175. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/JsonFormatter.tsx +0 -0
  176. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/MarkdownPreview.tsx +0 -0
  177. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/MatrixRain.tsx +0 -0
  178. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/MediaConverter.tsx +0 -0
  179. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Memory.tsx +0 -0
  180. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/MemoryManager.tsx +0 -0
  181. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Minesweeper.tsx +0 -0
  182. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/MusicPlayer.tsx +0 -0
  183. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/NetworkTools.tsx +0 -0
  184. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Notes.tsx +0 -0
  185. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/PasswordManager.tsx +0 -0
  186. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/PhotoEditor.tsx +0 -0
  187. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Pong.tsx +0 -0
  188. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/RegexTester.tsx +0 -0
  189. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Reminders.tsx +0 -0
  190. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/RssReader.tsx +0 -0
  191. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/ScreenRecorder.tsx +0 -0
  192. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Settings.tsx +0 -0
  193. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/SkillsLauncher.tsx +0 -0
  194. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Snake.tsx +0 -0
  195. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Solitaire.tsx +0 -0
  196. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Spreadsheet.tsx +0 -0
  197. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Sudoku.tsx +0 -0
  198. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/SystemMonitor.tsx +0 -0
  199. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/TaskManager.tsx +0 -0
  200. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Terminal.tsx +0 -0
  201. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Tetris.tsx +0 -0
  202. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/TextEditor.tsx +0 -0
  203. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/TicTacToe.tsx +0 -0
  204. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Todo.tsx +0 -0
  205. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/VideoPlayer.tsx +0 -0
  206. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/VoiceRecorder.tsx +0 -0
  207. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Weather.tsx +0 -0
  208. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/Whiteboard.tsx +0 -0
  209. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/apps/registry.ts +0 -0
  210. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/AppContainer.tsx +0 -0
  211. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/AppLauncher.tsx +0 -0
  212. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/BootSequence.tsx +0 -0
  213. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ContextMenu.tsx +0 -0
  214. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/Desktop.tsx +0 -0
  215. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/Dock.tsx +0 -0
  216. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/LoginScreen.tsx +0 -0
  217. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/NotImplemented.tsx +0 -0
  218. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/NotificationCenter.tsx +0 -0
  219. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/NotificationSystem.tsx +0 -0
  220. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/TopPanel.tsx +0 -0
  221. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/WindowFrame.tsx +0 -0
  222. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/WindowManager.tsx +0 -0
  223. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/accordion.tsx +0 -0
  224. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/alert-dialog.tsx +0 -0
  225. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/alert.tsx +0 -0
  226. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/aspect-ratio.tsx +0 -0
  227. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/avatar.tsx +0 -0
  228. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/badge.tsx +0 -0
  229. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/breadcrumb.tsx +0 -0
  230. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/button-group.tsx +0 -0
  231. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/button.tsx +0 -0
  232. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/calendar.tsx +0 -0
  233. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/card.tsx +0 -0
  234. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/carousel.tsx +0 -0
  235. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/chart.tsx +0 -0
  236. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/checkbox.tsx +0 -0
  237. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/collapsible.tsx +0 -0
  238. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/command.tsx +0 -0
  239. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/context-menu.tsx +0 -0
  240. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/dialog.tsx +0 -0
  241. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/drawer.tsx +0 -0
  242. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/dropdown-menu.tsx +0 -0
  243. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/empty.tsx +0 -0
  244. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/field.tsx +0 -0
  245. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/form.tsx +0 -0
  246. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/hover-card.tsx +0 -0
  247. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/input-group.tsx +0 -0
  248. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/input-otp.tsx +0 -0
  249. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/input.tsx +0 -0
  250. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/item.tsx +0 -0
  251. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/kbd.tsx +0 -0
  252. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/label.tsx +0 -0
  253. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/menubar.tsx +0 -0
  254. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/navigation-menu.tsx +0 -0
  255. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/pagination.tsx +0 -0
  256. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/popover.tsx +0 -0
  257. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/progress.tsx +0 -0
  258. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/radio-group.tsx +0 -0
  259. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/resizable.tsx +0 -0
  260. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/scroll-area.tsx +0 -0
  261. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/select.tsx +0 -0
  262. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/separator.tsx +0 -0
  263. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/sheet.tsx +0 -0
  264. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/sidebar.tsx +0 -0
  265. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/skeleton.tsx +0 -0
  266. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/slider.tsx +0 -0
  267. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/sonner.tsx +0 -0
  268. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/spinner.tsx +0 -0
  269. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/switch.tsx +0 -0
  270. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/table.tsx +0 -0
  271. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/tabs.tsx +0 -0
  272. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/textarea.tsx +0 -0
  273. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/toggle-group.tsx +0 -0
  274. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/toggle.tsx +0 -0
  275. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/components/ui/tooltip.tsx +0 -0
  276. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/index.ts +0 -0
  277. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/use-mobile.ts +0 -0
  278. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useAutoOpenChat.ts +0 -0
  279. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useDulusAgents.ts +0 -0
  280. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useDulusChat.ts +0 -0
  281. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useDulusEvents.ts +0 -0
  282. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useDulusHealth.ts +0 -0
  283. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useDulusMemory.ts +0 -0
  284. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useDulusSkills.ts +0 -0
  285. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useDulusTasks.ts +0 -0
  286. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useFileSystem.ts +0 -0
  287. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useOSStore.tsx +0 -0
  288. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useSkillBridge.ts +0 -0
  289. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useSystemBattery.ts +0 -0
  290. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useSystemNetwork.ts +0 -0
  291. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/hooks/useSystemVolume.ts +0 -0
  292. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/index.css +0 -0
  293. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/lib/dulus-api.ts +0 -0
  294. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/lib/utils.ts +0 -0
  295. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/main.tsx +0 -0
  296. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/types/index.ts +0 -0
  297. {dulus-0.2.54 → dulus-0.2.55}/sandbox/src/utils/assets.ts +0 -0
  298. {dulus-0.2.54 → dulus-0.2.55}/sandbox/tailwind.config.js +0 -0
  299. {dulus-0.2.54 → dulus-0.2.55}/sandbox/tsconfig.app.json +0 -0
  300. {dulus-0.2.54 → dulus-0.2.55}/sandbox/tsconfig.json +0 -0
  301. {dulus-0.2.54 → dulus-0.2.55}/sandbox/tsconfig.node.json +0 -0
  302. {dulus-0.2.54 → dulus-0.2.55}/sandbox/vite.config.ts +0 -0
  303. {dulus-0.2.54 → dulus-0.2.55}/setup.cfg +0 -0
  304. {dulus-0.2.54 → dulus-0.2.55}/skill/__init__.py +0 -0
  305. {dulus-0.2.54 → dulus-0.2.55}/skill/builtin.py +0 -0
  306. {dulus-0.2.54 → dulus-0.2.55}/skill/clawhub.py +0 -0
  307. {dulus-0.2.54 → dulus-0.2.55}/skill/executor.py +0 -0
  308. {dulus-0.2.54 → dulus-0.2.55}/skill/loader.py +0 -0
  309. {dulus-0.2.54 → dulus-0.2.55}/skill/tools.py +0 -0
  310. {dulus-0.2.54 → dulus-0.2.55}/skills.py +0 -0
  311. {dulus-0.2.54 → dulus-0.2.55}/spinner.py +0 -0
  312. {dulus-0.2.54 → dulus-0.2.55}/string_utils.py +0 -0
  313. {dulus-0.2.54 → dulus-0.2.55}/subagent.py +0 -0
  314. {dulus-0.2.54 → dulus-0.2.55}/task/__init__.py +0 -0
  315. {dulus-0.2.54 → dulus-0.2.55}/task/store.py +0 -0
  316. {dulus-0.2.54 → dulus-0.2.55}/task/tools.py +0 -0
  317. {dulus-0.2.54 → dulus-0.2.55}/task/types.py +0 -0
  318. {dulus-0.2.54 → dulus-0.2.55}/tests/test_afk_yolo.py +0 -0
  319. {dulus-0.2.54 → dulus-0.2.55}/tests/test_approval_runtime.py +0 -0
  320. {dulus-0.2.54 → dulus-0.2.55}/tests/test_background_task_tools.py +0 -0
  321. {dulus-0.2.54 → dulus-0.2.55}/tests/test_background_tasks.py +0 -0
  322. {dulus-0.2.54 → dulus-0.2.55}/tests/test_checkpoint.py +0 -0
  323. {dulus-0.2.54 → dulus-0.2.55}/tests/test_clipboard_utils.py +0 -0
  324. {dulus-0.2.54 → dulus-0.2.55}/tests/test_compaction.py +0 -0
  325. {dulus-0.2.54 → dulus-0.2.55}/tests/test_diff_view.py +0 -0
  326. {dulus-0.2.54 → dulus-0.2.55}/tests/test_diff_visualization.py +0 -0
  327. {dulus-0.2.54 → dulus-0.2.55}/tests/test_display_blocks.py +0 -0
  328. {dulus-0.2.54 → dulus-0.2.55}/tests/test_export_import.py +0 -0
  329. {dulus-0.2.54 → dulus-0.2.55}/tests/test_hook_engine.py +0 -0
  330. {dulus-0.2.54 → dulus-0.2.55}/tests/test_injection_fix.py +0 -0
  331. {dulus-0.2.54 → dulus-0.2.55}/tests/test_license.py +0 -0
  332. {dulus-0.2.54 → dulus-0.2.55}/tests/test_mcp.py +0 -0
  333. {dulus-0.2.54 → dulus-0.2.55}/tests/test_memory.py +0 -0
  334. {dulus-0.2.54 → dulus-0.2.55}/tests/test_notification_manager.py +0 -0
  335. {dulus-0.2.54 → dulus-0.2.55}/tests/test_plugin.py +0 -0
  336. {dulus-0.2.54 → dulus-0.2.55}/tests/test_session_fork.py +0 -0
  337. {dulus-0.2.54 → dulus-0.2.55}/tests/test_shell_mode.py +0 -0
  338. {dulus-0.2.54 → dulus-0.2.55}/tests/test_skills.py +0 -0
  339. {dulus-0.2.54 → dulus-0.2.55}/tests/test_steer_input.py +0 -0
  340. {dulus-0.2.54 → dulus-0.2.55}/tests/test_subagent.py +0 -0
  341. {dulus-0.2.54 → dulus-0.2.55}/tests/test_task.py +0 -0
  342. {dulus-0.2.54 → dulus-0.2.55}/tests/test_telegram_buffer.py +0 -0
  343. {dulus-0.2.54 → dulus-0.2.55}/tests/test_think_tool.py +0 -0
  344. {dulus-0.2.54 → dulus-0.2.55}/tests/test_todo_tool.py +0 -0
  345. {dulus-0.2.54 → dulus-0.2.55}/tests/test_todo_visualization.py +0 -0
  346. {dulus-0.2.54 → dulus-0.2.55}/tests/test_tool_registry.py +0 -0
  347. {dulus-0.2.54 → dulus-0.2.55}/tests/test_voice.py +0 -0
  348. {dulus-0.2.54 → dulus-0.2.55}/tests/test_wire_events.py +0 -0
  349. {dulus-0.2.54 → dulus-0.2.55}/tmux_offloader.py +0 -0
  350. {dulus-0.2.54 → dulus-0.2.55}/tmux_tools.py +0 -0
  351. {dulus-0.2.54 → dulus-0.2.55}/tool_registry.py +0 -0
  352. {dulus-0.2.54 → dulus-0.2.55}/tools.py +0 -0
  353. {dulus-0.2.54 → dulus-0.2.55}/ui/__init__.py +0 -0
  354. {dulus-0.2.54 → dulus-0.2.55}/ui/input.py +0 -0
  355. {dulus-0.2.54 → dulus-0.2.55}/ui/render.py +0 -0
  356. {dulus-0.2.54 → dulus-0.2.55}/voice/__init__.py +0 -0
  357. {dulus-0.2.54 → dulus-0.2.55}/voice/keyterms.py +0 -0
  358. {dulus-0.2.54 → dulus-0.2.55}/voice/recorder.py +0 -0
  359. {dulus-0.2.54 → dulus-0.2.55}/voice/stt.py +0 -0
  360. {dulus-0.2.54 → dulus-0.2.55}/webchat.py +0 -0
  361. {dulus-0.2.54 → dulus-0.2.55}/webchat_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 0.2.54
3
+ Version: 0.2.55
4
4
  Summary: Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace
5
5
  Author: KevRojo
6
6
  License: GPL-3.0
@@ -9,21 +9,22 @@
9
9
  "project": {
10
10
  "name": "Dulus Command Center",
11
11
  "repo_stats": {
12
- "files": 432,
13
- "lines": 205188,
12
+ "files": 439,
13
+ "lines": 206577,
14
14
  "languages": {
15
15
  ".example": 5,
16
- "no_ext": 1424,
17
- ".py": 60473,
16
+ "no_ext": 1471,
17
+ ".py": 61567,
18
18
  ".html": 14944,
19
19
  ".in": 3,
20
20
  ".toml": 129,
21
- ".md": 2161,
22
- ".txt": 463,
21
+ ".md": 2170,
22
+ ".txt": 473,
23
23
  ".lock": 1,
24
- ".json": 9513,
25
- ".whl": 21729,
26
- ".gz": 20908,
24
+ ".json": 9515,
25
+ ".TAG": 4,
26
+ ".whl": 21792,
27
+ ".gz": 21068,
27
28
  ".svg": 1123,
28
29
  ".png": 31639,
29
30
  ".sh": 144,
@@ -38,41 +39,42 @@
38
39
  },
39
40
  "recent_commits": [
40
41
  {
41
- "hash": "7fc805e",
42
- "subject": "chore: bump version 0.2.50 -> 0.2.51",
42
+ "hash": "d9c870b",
43
+ "subject": "bump: 0.2.53 → 0.2.54",
43
44
  "author": "KevRojo",
44
- "date": "2026-05-12"
45
+ "date": "2026-05-13"
45
46
  },
46
47
  {
47
- "hash": "360badc",
48
- "subject": "fix: GUI session responsiveness, sidebar incremental diff, async scan, default session IDs",
48
+ "hash": "3c7daf7",
49
+ "subject": "feat(voice): add wake word detection, audio utils, and voice module improvements",
49
50
  "author": "KevRojo",
50
- "date": "2026-05-12"
51
+ "date": "2026-05-13"
51
52
  },
52
53
  {
53
- "hash": "fae4455",
54
- "subject": "feat: MemoryManager overhaul, skill bridge polish, server sync",
54
+ "hash": "14c4f42",
55
+ "subject": "bump: 0.2.53",
55
56
  "author": "KevRojo",
56
57
  "date": "2026-05-12"
57
58
  },
58
59
  {
59
- "hash": "bf6455f",
60
- "subject": "feat: skill-to-chat bridge, MemPalace search API, sandbox UX polish",
60
+ "hash": "979df03",
61
+ "subject": "feat: skill system overhaul — awesome-remote install, interactive use, descriptions",
61
62
  "author": "KevRojo",
62
63
  "date": "2026-05-12"
63
64
  },
64
65
  {
65
- "hash": "9803f97",
66
- "subject": "fix: include sandbox/src and sandbox/public in wheel",
66
+ "hash": "39ee671",
67
+ "subject": "chore(release): bump v0.2.52",
67
68
  "author": "KevRojo",
68
69
  "date": "2026-05-12"
69
70
  }
70
71
  ],
71
72
  "recent_changes": [
72
- "data/context.json",
73
- "dulus.py",
74
- "gui/session_utils.py",
75
- "pyproject.toml"
73
+ "input.py",
74
+ "pyproject.toml",
75
+ "requirements.txt",
76
+ "voice/audio_utils.py",
77
+ "voice/tts.py"
76
78
  ]
77
79
  },
78
80
  "tasks": {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 0.2.54
3
+ Version: 0.2.55
4
4
  Summary: Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace
5
5
  Author: KevRojo
6
6
  License: GPL-3.0
@@ -826,14 +826,22 @@ def read_line_split(prompt: str = "> ", history_path: Optional[Path] = None) ->
826
826
 
827
827
  # Build layout: output on top, separator, recent-strip + input at bottom
828
828
  def _get_toolbar_text():
829
+ # Get base text from provider
830
+ base_text = ""
829
831
  provider = _toolbar_provider
830
- if provider is None:
831
- return ""
832
- try:
833
- text = provider()
834
- return ANSI(text) if text else ""
835
- except Exception:
836
- return ""
832
+ if provider:
833
+ try:
834
+ base_text = str(provider())
835
+ except Exception:
836
+ pass
837
+
838
+ # Combine with background status (e.g. wake energy bar)
839
+ global _toolbar_status
840
+ status = _toolbar_status or ""
841
+
842
+ # Format: [Base] [Status]
843
+ combined = f" {base_text} {status}".strip()
844
+ return ANSI(combined) if combined else ""
837
845
 
838
846
  toolbar_window = ConditionalContainer(
839
847
  content=Window(
@@ -1037,6 +1045,8 @@ def safe_print_notification(text: str, end: str = "\n", flush: bool = False) ->
1037
1045
 
1038
1046
  def _schedule():
1039
1047
  try:
1048
+ # run_in_terminal temporarily suspends the UI bar,
1049
+ # prints our text, then restores the bar.
1040
1050
  task = run_in_terminal(_target)
1041
1051
  if asyncio.iscoroutine(task):
1042
1052
  _split_app.create_background_task(task)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dulus"
7
- version = "0.2.54"
7
+ version = "0.2.55"
8
8
  description = "Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -30,8 +30,11 @@ def beep(frequency: int = 1000, duration: int = 150) -> None:
30
30
  except Exception:
31
31
  pass
32
32
  else:
33
+ # On Linux/WSL, we only write \a if we are in a TTY that supports it,
34
+ # otherwise it shows up as ^G.
33
35
  try:
34
- sys.stdout.write("\a")
35
- sys.stdout.flush()
36
+ if sys.stdout.isatty():
37
+ sys.stdout.write("\a")
38
+ sys.stdout.flush()
36
39
  except Exception:
37
40
  pass
@@ -498,6 +498,7 @@ def _say_edge_tts(text: str, lang: str = "es") -> bool:
498
498
  # ── pyttsx3 ───────────────────────────────────────────────────────────────
499
499
 
500
500
  def _say_pyttsx3(text: str, rate: Optional[int] = None) -> bool:
501
+ global _pyttsx3_engine
501
502
  try:
502
503
  engine = _get_pyttsx3_engine()
503
504
  if rate:
@@ -505,11 +506,9 @@ def _say_pyttsx3(text: str, rate: Optional[int] = None) -> bool:
505
506
  engine.say(text)
506
507
  engine.runAndWait()
507
508
  return True
508
- except ImportError:
509
- return False
510
- except Exception as e:
511
- print(f" [pyttsx3] Error: {e}")
512
- global _pyttsx3_engine
509
+ except (ImportError, Exception) as e:
510
+ if not isinstance(e, ImportError):
511
+ print(f" [pyttsx3] Error: {e}")
513
512
  _pyttsx3_engine = None
514
513
  return False
515
514
 
@@ -285,10 +285,13 @@ class WakeWordListener:
285
285
  import input as _dulus_input
286
286
  _bar = " ▁▂▃▄▅▆▇█"
287
287
  _lvl = min(int(rms * 8 / 0.08), 8)
288
- _txt = f"🎙️ {_bar[_lvl]}"
288
+ # Cyan "Listening..." + Mic icon + Energy bar
289
+ _txt = f"\x1b[36mListening...\x1b[0m 🎙️ {_bar[_lvl]}"
289
290
  # Try both toolbar and terminal fallback
290
291
  _dulus_input.set_toolbar_status(_txt)
291
- _dulus_input.safe_print_notification(f"\r {_txt} ", end="", flush=True)
292
+ # Only print to terminal if we don't have a split app toolbar
293
+ if not getattr(_dulus_input, "_split_app", None):
294
+ _dulus_input.safe_print_notification(f"\r {_txt} ", end="", flush=True)
292
295
  except Exception:
293
296
  pass
294
297
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes