dulus 0.2.48__tar.gz → 0.2.49__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 (360) hide show
  1. {dulus-0.2.48/dulus.egg-info → dulus-0.2.49}/PKG-INFO +1 -1
  2. {dulus-0.2.48 → dulus-0.2.49}/backend/server.py +75 -3
  3. dulus-0.2.49/data/context.json +222 -0
  4. {dulus-0.2.48 → dulus-0.2.49/dulus.egg-info}/PKG-INFO +1 -1
  5. {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/SOURCES.txt +3 -1
  6. {dulus-0.2.48 → dulus-0.2.49}/pyproject.toml +1 -1
  7. dulus-0.2.48/sandbox/dist/assets/index-nQkFq-oq.js → dulus-0.2.49/sandbox/dist/assets/index-BQlB1Z_S.js +46 -46
  8. {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/index.html +1 -1
  9. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/AppRouter.tsx +2 -2
  10. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Chat.tsx +22 -2
  11. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/SkillsLauncher.tsx +43 -13
  12. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/index.ts +3 -0
  13. dulus-0.2.49/sandbox/src/hooks/useAutoOpenChat.ts +34 -0
  14. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useOSStore.tsx +20 -1
  15. dulus-0.2.49/sandbox/src/hooks/useSkillBridge.ts +45 -0
  16. dulus-0.2.48/data/context.json +0 -140
  17. {dulus-0.2.48 → dulus-0.2.49}/LICENSE +0 -0
  18. {dulus-0.2.48 → dulus-0.2.49}/MANIFEST.in +0 -0
  19. {dulus-0.2.48 → dulus-0.2.49}/README.md +0 -0
  20. {dulus-0.2.48 → dulus-0.2.49}/agent.py +0 -0
  21. {dulus-0.2.48 → dulus-0.2.49}/backend/__init__.py +0 -0
  22. {dulus-0.2.48 → dulus-0.2.49}/backend/agents_bridge.py +0 -0
  23. {dulus-0.2.48 → dulus-0.2.49}/backend/compressor.py +0 -0
  24. {dulus-0.2.48 → dulus-0.2.49}/backend/context.py +0 -0
  25. {dulus-0.2.48 → dulus-0.2.49}/backend/githook.py +0 -0
  26. {dulus-0.2.48 → dulus-0.2.49}/backend/marketplace.py +0 -0
  27. {dulus-0.2.48 → dulus-0.2.49}/backend/mempalace_bridge.py +0 -0
  28. {dulus-0.2.48 → dulus-0.2.49}/backend/personas.py +0 -0
  29. {dulus-0.2.48 → dulus-0.2.49}/backend/plugins.py +0 -0
  30. {dulus-0.2.48 → dulus-0.2.49}/backend/tasks.py +0 -0
  31. {dulus-0.2.48 → dulus-0.2.49}/batch_api.py +0 -0
  32. {dulus-0.2.48 → dulus-0.2.49}/checkpoint/__init__.py +0 -0
  33. {dulus-0.2.48 → dulus-0.2.49}/checkpoint/hooks.py +0 -0
  34. {dulus-0.2.48 → dulus-0.2.49}/checkpoint/store.py +0 -0
  35. {dulus-0.2.48 → dulus-0.2.49}/checkpoint/types.py +0 -0
  36. {dulus-0.2.48 → dulus-0.2.49}/claude_code_watcher.py +0 -0
  37. {dulus-0.2.48 → dulus-0.2.49}/clipboard_utils.py +0 -0
  38. {dulus-0.2.48 → dulus-0.2.49}/cloudsave.py +0 -0
  39. {dulus-0.2.48 → dulus-0.2.49}/common.py +0 -0
  40. {dulus-0.2.48 → dulus-0.2.49}/compaction.py +0 -0
  41. {dulus-0.2.48 → dulus-0.2.49}/config.py +0 -0
  42. {dulus-0.2.48 → dulus-0.2.49}/context.py +0 -0
  43. {dulus-0.2.48 → dulus-0.2.49}/data/__init__.py +0 -0
  44. {dulus-0.2.48 → dulus-0.2.49}/data/active_persona.json +0 -0
  45. {dulus-0.2.48 → dulus-0.2.49}/data/marketplace.json +0 -0
  46. {dulus-0.2.48 → dulus-0.2.49}/data/personas.json +0 -0
  47. {dulus-0.2.48 → dulus-0.2.49}/data/plugins/__init__.py +0 -0
  48. {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/__init__.py +0 -0
  49. {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/composio_plugin/__init__.py +0 -0
  50. {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
  51. {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
  52. {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/plugin.json +0 -0
  53. {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/plugin_tool.py +0 -0
  54. {dulus-0.2.48 → dulus-0.2.49}/data/tasks.json +0 -0
  55. {dulus-0.2.48 → dulus-0.2.49}/docs/README.md +0 -0
  56. {dulus-0.2.48 → dulus-0.2.49}/docs/__init__.py +0 -0
  57. {dulus-0.2.48 → dulus-0.2.49}/docs/api.html +0 -0
  58. {dulus-0.2.48 → dulus-0.2.49}/docs/architecture.md +0 -0
  59. {dulus-0.2.48 → dulus-0.2.49}/docs/azure-speech-template.json +0 -0
  60. {dulus-0.2.48 → dulus-0.2.49}/docs/dashboard/index.html +0 -0
  61. {dulus-0.2.48 → dulus-0.2.49}/docs/divider.svg +0 -0
  62. {dulus-0.2.48 → dulus-0.2.49}/docs/generate.py +0 -0
  63. {dulus-0.2.48 → dulus-0.2.49}/docs/hero.svg +0 -0
  64. {dulus-0.2.48 → dulus-0.2.49}/docs/index.html +0 -0
  65. {dulus-0.2.48 → dulus-0.2.49}/docs/news.md +0 -0
  66. {dulus-0.2.48 → dulus-0.2.49}/docs/nvidia-models.svg +0 -0
  67. {dulus-0.2.48 → dulus-0.2.49}/docs/particle-playground.html +0 -0
  68. {dulus-0.2.48 → dulus-0.2.49}/docs/personas/index.html +0 -0
  69. {dulus-0.2.48 → dulus-0.2.49}/docs/poetry-banner.png +0 -0
  70. {dulus-0.2.48 → dulus-0.2.49}/docs/preview.html +0 -0
  71. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-agents.svg +0 -0
  72. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-brainstorm.svg +0 -0
  73. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-bridges.svg +0 -0
  74. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-features.svg +0 -0
  75. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-freetier.svg +0 -0
  76. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-memory.svg +0 -0
  77. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-models.svg +0 -0
  78. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-perms.svg +0 -0
  79. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-plugins.svg +0 -0
  80. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-quickstart.svg +0 -0
  81. {dulus-0.2.48 → dulus-0.2.49}/docs/sec-ssj.svg +0 -0
  82. {dulus-0.2.48 → dulus-0.2.49}/docs/spinners.svg +0 -0
  83. {dulus-0.2.48 → dulus-0.2.49}/docs/split-pane.svg +0 -0
  84. {dulus-0.2.48 → dulus-0.2.49}/docs/terminal-boot.svg +0 -0
  85. {dulus-0.2.48 → dulus-0.2.49}/docs/uploads/particle-playground.html +0 -0
  86. {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/dependency_links.txt +0 -0
  87. {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/entry_points.txt +0 -0
  88. {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/requires.txt +0 -0
  89. {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/top_level.txt +0 -0
  90. {dulus-0.2.48 → dulus-0.2.49}/dulus.py +0 -0
  91. {dulus-0.2.48 → dulus-0.2.49}/dulus_gui.py +0 -0
  92. {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/__init__.py +0 -0
  93. {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/client.py +0 -0
  94. {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/config.py +0 -0
  95. {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/tools.py +0 -0
  96. {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/types.py +0 -0
  97. {dulus-0.2.48 → dulus-0.2.49}/gui/__init__.py +0 -0
  98. {dulus-0.2.48 → dulus-0.2.49}/gui/agent_bridge.py +0 -0
  99. {dulus-0.2.48 → dulus-0.2.49}/gui/chat_widget.py +0 -0
  100. {dulus-0.2.48 → dulus-0.2.49}/gui/main_window.py +0 -0
  101. {dulus-0.2.48 → dulus-0.2.49}/gui/personas.py +0 -0
  102. {dulus-0.2.48 → dulus-0.2.49}/gui/session_utils.py +0 -0
  103. {dulus-0.2.48 → dulus-0.2.49}/gui/settings_dialog.py +0 -0
  104. {dulus-0.2.48 → dulus-0.2.49}/gui/sidebar.py +0 -0
  105. {dulus-0.2.48 → dulus-0.2.49}/gui/tasks_view.py +0 -0
  106. {dulus-0.2.48 → dulus-0.2.49}/gui/themes.py +0 -0
  107. {dulus-0.2.48 → dulus-0.2.49}/gui/tool_panel.py +0 -0
  108. {dulus-0.2.48 → dulus-0.2.49}/input.py +0 -0
  109. {dulus-0.2.48 → dulus-0.2.49}/license_manager.py +0 -0
  110. {dulus-0.2.48 → dulus-0.2.49}/memory/__init__.py +0 -0
  111. {dulus-0.2.48 → dulus-0.2.49}/memory/audit.py +0 -0
  112. {dulus-0.2.48 → dulus-0.2.49}/memory/consolidator.py +0 -0
  113. {dulus-0.2.48 → dulus-0.2.49}/memory/context.py +0 -0
  114. {dulus-0.2.48 → dulus-0.2.49}/memory/offload.py +0 -0
  115. {dulus-0.2.48 → dulus-0.2.49}/memory/palace.py +0 -0
  116. {dulus-0.2.48 → dulus-0.2.49}/memory/scan.py +0 -0
  117. {dulus-0.2.48 → dulus-0.2.49}/memory/sessions.py +0 -0
  118. {dulus-0.2.48 → dulus-0.2.49}/memory/store.py +0 -0
  119. {dulus-0.2.48 → dulus-0.2.49}/memory/tools.py +0 -0
  120. {dulus-0.2.48 → dulus-0.2.49}/memory/types.py +0 -0
  121. {dulus-0.2.48 → dulus-0.2.49}/memory/vector_search.py +0 -0
  122. {dulus-0.2.48 → dulus-0.2.49}/multi_agent/__init__.py +0 -0
  123. {dulus-0.2.48 → dulus-0.2.49}/multi_agent/subagent.py +0 -0
  124. {dulus-0.2.48 → dulus-0.2.49}/multi_agent/tools.py +0 -0
  125. {dulus-0.2.48 → dulus-0.2.49}/offload_helper.py +0 -0
  126. {dulus-0.2.48 → dulus-0.2.49}/plugin/__init__.py +0 -0
  127. {dulus-0.2.48 → dulus-0.2.49}/plugin/autoadapter.py +0 -0
  128. {dulus-0.2.48 → dulus-0.2.49}/plugin/loader.py +0 -0
  129. {dulus-0.2.48 → dulus-0.2.49}/plugin/recommend.py +0 -0
  130. {dulus-0.2.48 → dulus-0.2.49}/plugin/store.py +0 -0
  131. {dulus-0.2.48 → dulus-0.2.49}/plugin/types.py +0 -0
  132. {dulus-0.2.48 → dulus-0.2.49}/providers.py +0 -0
  133. {dulus-0.2.48 → dulus-0.2.49}/sandbox/README.md +0 -0
  134. {dulus-0.2.48 → dulus-0.2.49}/sandbox/__init__.py +0 -0
  135. {dulus-0.2.48 → dulus-0.2.49}/sandbox/components.json +0 -0
  136. {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/assets/index-CsIO61nW.css +0 -0
  137. {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpaper-default.jpg +0 -0
  138. {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/default.jpeg +0 -0
  139. {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/light.jpeg +0 -0
  140. {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/nature.jpeg +0 -0
  141. {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/tech.jpeg +0 -0
  142. {dulus-0.2.48 → dulus-0.2.49}/sandbox/eslint.config.js +0 -0
  143. {dulus-0.2.48 → dulus-0.2.49}/sandbox/index.html +0 -0
  144. {dulus-0.2.48 → dulus-0.2.49}/sandbox/info.md +0 -0
  145. {dulus-0.2.48 → dulus-0.2.49}/sandbox/package-lock.json +0 -0
  146. {dulus-0.2.48 → dulus-0.2.49}/sandbox/package.json +0 -0
  147. {dulus-0.2.48 → dulus-0.2.49}/sandbox/postcss.config.js +0 -0
  148. {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpaper-default.jpg +0 -0
  149. {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/default.jpeg +0 -0
  150. {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/light.jpeg +0 -0
  151. {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/nature.jpeg +0 -0
  152. {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/tech.jpeg +0 -0
  153. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/App.tsx +0 -0
  154. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/AgentMonitor.tsx +0 -0
  155. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ApiTester.tsx +0 -0
  156. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ArchiveManager.tsx +0 -0
  157. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/AsciiArt.tsx +0 -0
  158. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Base64Tool.tsx +0 -0
  159. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Browser.tsx +0 -0
  160. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Calculator.tsx +0 -0
  161. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Calendar.tsx +0 -0
  162. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Chess.tsx +0 -0
  163. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Clock.tsx +0 -0
  164. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/CodeEditor.tsx +0 -0
  165. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ColorPalette.tsx +0 -0
  166. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ColorPicker.tsx +0 -0
  167. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Contacts.tsx +0 -0
  168. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/DocumentViewer.tsx +0 -0
  169. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Drawing.tsx +0 -0
  170. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Email.tsx +0 -0
  171. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/FileManager.tsx +0 -0
  172. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/FlappyBird.tsx +0 -0
  173. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/FtpClient.tsx +0 -0
  174. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Game2048.tsx +0 -0
  175. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/GitClient.tsx +0 -0
  176. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ImageGallery.tsx +0 -0
  177. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ImageViewer.tsx +0 -0
  178. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/JsonFormatter.tsx +0 -0
  179. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MarkdownPreview.tsx +0 -0
  180. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MatrixRain.tsx +0 -0
  181. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MediaConverter.tsx +0 -0
  182. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Memory.tsx +0 -0
  183. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MemoryManager.tsx +0 -0
  184. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Minesweeper.tsx +0 -0
  185. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MusicPlayer.tsx +0 -0
  186. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/NetworkTools.tsx +0 -0
  187. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Notes.tsx +0 -0
  188. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/PasswordManager.tsx +0 -0
  189. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/PhotoEditor.tsx +0 -0
  190. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Pong.tsx +0 -0
  191. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/RegexTester.tsx +0 -0
  192. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Reminders.tsx +0 -0
  193. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/RssReader.tsx +0 -0
  194. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ScreenRecorder.tsx +0 -0
  195. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Settings.tsx +0 -0
  196. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Snake.tsx +0 -0
  197. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Solitaire.tsx +0 -0
  198. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Spreadsheet.tsx +0 -0
  199. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Sudoku.tsx +0 -0
  200. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/SystemMonitor.tsx +0 -0
  201. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/TaskManager.tsx +0 -0
  202. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Terminal.tsx +0 -0
  203. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Tetris.tsx +0 -0
  204. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/TextEditor.tsx +0 -0
  205. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/TicTacToe.tsx +0 -0
  206. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Todo.tsx +0 -0
  207. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/VideoPlayer.tsx +0 -0
  208. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/VoiceRecorder.tsx +0 -0
  209. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Weather.tsx +0 -0
  210. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Whiteboard.tsx +0 -0
  211. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/registry.ts +0 -0
  212. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/AppContainer.tsx +0 -0
  213. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/AppLauncher.tsx +0 -0
  214. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/BootSequence.tsx +0 -0
  215. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ContextMenu.tsx +0 -0
  216. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/Desktop.tsx +0 -0
  217. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/Dock.tsx +0 -0
  218. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/LoginScreen.tsx +0 -0
  219. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/NotImplemented.tsx +0 -0
  220. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/NotificationCenter.tsx +0 -0
  221. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/NotificationSystem.tsx +0 -0
  222. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/TopPanel.tsx +0 -0
  223. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/WindowFrame.tsx +0 -0
  224. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/WindowManager.tsx +0 -0
  225. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/accordion.tsx +0 -0
  226. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/alert-dialog.tsx +0 -0
  227. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/alert.tsx +0 -0
  228. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/aspect-ratio.tsx +0 -0
  229. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/avatar.tsx +0 -0
  230. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/badge.tsx +0 -0
  231. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/breadcrumb.tsx +0 -0
  232. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/button-group.tsx +0 -0
  233. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/button.tsx +0 -0
  234. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/calendar.tsx +0 -0
  235. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/card.tsx +0 -0
  236. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/carousel.tsx +0 -0
  237. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/chart.tsx +0 -0
  238. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/checkbox.tsx +0 -0
  239. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/collapsible.tsx +0 -0
  240. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/command.tsx +0 -0
  241. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/context-menu.tsx +0 -0
  242. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/dialog.tsx +0 -0
  243. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/drawer.tsx +0 -0
  244. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/dropdown-menu.tsx +0 -0
  245. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/empty.tsx +0 -0
  246. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/field.tsx +0 -0
  247. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/form.tsx +0 -0
  248. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/hover-card.tsx +0 -0
  249. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/input-group.tsx +0 -0
  250. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/input-otp.tsx +0 -0
  251. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/input.tsx +0 -0
  252. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/item.tsx +0 -0
  253. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/kbd.tsx +0 -0
  254. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/label.tsx +0 -0
  255. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/menubar.tsx +0 -0
  256. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/navigation-menu.tsx +0 -0
  257. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/pagination.tsx +0 -0
  258. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/popover.tsx +0 -0
  259. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/progress.tsx +0 -0
  260. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/radio-group.tsx +0 -0
  261. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/resizable.tsx +0 -0
  262. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/scroll-area.tsx +0 -0
  263. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/select.tsx +0 -0
  264. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/separator.tsx +0 -0
  265. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/sheet.tsx +0 -0
  266. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/sidebar.tsx +0 -0
  267. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/skeleton.tsx +0 -0
  268. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/slider.tsx +0 -0
  269. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/sonner.tsx +0 -0
  270. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/spinner.tsx +0 -0
  271. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/switch.tsx +0 -0
  272. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/table.tsx +0 -0
  273. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/tabs.tsx +0 -0
  274. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/textarea.tsx +0 -0
  275. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/toggle-group.tsx +0 -0
  276. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/toggle.tsx +0 -0
  277. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/tooltip.tsx +0 -0
  278. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/use-mobile.ts +0 -0
  279. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusAgents.ts +0 -0
  280. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusChat.ts +0 -0
  281. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusEvents.ts +0 -0
  282. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusHealth.ts +0 -0
  283. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusMemory.ts +0 -0
  284. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusSkills.ts +0 -0
  285. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusTasks.ts +0 -0
  286. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useFileSystem.ts +0 -0
  287. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useSystemBattery.ts +0 -0
  288. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useSystemNetwork.ts +0 -0
  289. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useSystemVolume.ts +0 -0
  290. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/index.css +0 -0
  291. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/lib/dulus-api.ts +0 -0
  292. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/lib/utils.ts +0 -0
  293. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/main.tsx +0 -0
  294. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/types/index.ts +0 -0
  295. {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/utils/assets.ts +0 -0
  296. {dulus-0.2.48 → dulus-0.2.49}/sandbox/tailwind.config.js +0 -0
  297. {dulus-0.2.48 → dulus-0.2.49}/sandbox/tsconfig.app.json +0 -0
  298. {dulus-0.2.48 → dulus-0.2.49}/sandbox/tsconfig.json +0 -0
  299. {dulus-0.2.48 → dulus-0.2.49}/sandbox/tsconfig.node.json +0 -0
  300. {dulus-0.2.48 → dulus-0.2.49}/sandbox/vite.config.ts +0 -0
  301. {dulus-0.2.48 → dulus-0.2.49}/setup.cfg +0 -0
  302. {dulus-0.2.48 → dulus-0.2.49}/skill/__init__.py +0 -0
  303. {dulus-0.2.48 → dulus-0.2.49}/skill/builtin.py +0 -0
  304. {dulus-0.2.48 → dulus-0.2.49}/skill/clawhub.py +0 -0
  305. {dulus-0.2.48 → dulus-0.2.49}/skill/executor.py +0 -0
  306. {dulus-0.2.48 → dulus-0.2.49}/skill/loader.py +0 -0
  307. {dulus-0.2.48 → dulus-0.2.49}/skill/tools.py +0 -0
  308. {dulus-0.2.48 → dulus-0.2.49}/skills.py +0 -0
  309. {dulus-0.2.48 → dulus-0.2.49}/spinner.py +0 -0
  310. {dulus-0.2.48 → dulus-0.2.49}/string_utils.py +0 -0
  311. {dulus-0.2.48 → dulus-0.2.49}/subagent.py +0 -0
  312. {dulus-0.2.48 → dulus-0.2.49}/task/__init__.py +0 -0
  313. {dulus-0.2.48 → dulus-0.2.49}/task/store.py +0 -0
  314. {dulus-0.2.48 → dulus-0.2.49}/task/tools.py +0 -0
  315. {dulus-0.2.48 → dulus-0.2.49}/task/types.py +0 -0
  316. {dulus-0.2.48 → dulus-0.2.49}/tests/test_afk_yolo.py +0 -0
  317. {dulus-0.2.48 → dulus-0.2.49}/tests/test_approval_runtime.py +0 -0
  318. {dulus-0.2.48 → dulus-0.2.49}/tests/test_background_task_tools.py +0 -0
  319. {dulus-0.2.48 → dulus-0.2.49}/tests/test_background_tasks.py +0 -0
  320. {dulus-0.2.48 → dulus-0.2.49}/tests/test_checkpoint.py +0 -0
  321. {dulus-0.2.48 → dulus-0.2.49}/tests/test_clipboard_utils.py +0 -0
  322. {dulus-0.2.48 → dulus-0.2.49}/tests/test_compaction.py +0 -0
  323. {dulus-0.2.48 → dulus-0.2.49}/tests/test_diff_view.py +0 -0
  324. {dulus-0.2.48 → dulus-0.2.49}/tests/test_diff_visualization.py +0 -0
  325. {dulus-0.2.48 → dulus-0.2.49}/tests/test_display_blocks.py +0 -0
  326. {dulus-0.2.48 → dulus-0.2.49}/tests/test_export_import.py +0 -0
  327. {dulus-0.2.48 → dulus-0.2.49}/tests/test_hook_engine.py +0 -0
  328. {dulus-0.2.48 → dulus-0.2.49}/tests/test_injection_fix.py +0 -0
  329. {dulus-0.2.48 → dulus-0.2.49}/tests/test_license.py +0 -0
  330. {dulus-0.2.48 → dulus-0.2.49}/tests/test_mcp.py +0 -0
  331. {dulus-0.2.48 → dulus-0.2.49}/tests/test_memory.py +0 -0
  332. {dulus-0.2.48 → dulus-0.2.49}/tests/test_notification_manager.py +0 -0
  333. {dulus-0.2.48 → dulus-0.2.49}/tests/test_plugin.py +0 -0
  334. {dulus-0.2.48 → dulus-0.2.49}/tests/test_session_fork.py +0 -0
  335. {dulus-0.2.48 → dulus-0.2.49}/tests/test_shell_mode.py +0 -0
  336. {dulus-0.2.48 → dulus-0.2.49}/tests/test_skills.py +0 -0
  337. {dulus-0.2.48 → dulus-0.2.49}/tests/test_steer_input.py +0 -0
  338. {dulus-0.2.48 → dulus-0.2.49}/tests/test_subagent.py +0 -0
  339. {dulus-0.2.48 → dulus-0.2.49}/tests/test_task.py +0 -0
  340. {dulus-0.2.48 → dulus-0.2.49}/tests/test_telegram_buffer.py +0 -0
  341. {dulus-0.2.48 → dulus-0.2.49}/tests/test_think_tool.py +0 -0
  342. {dulus-0.2.48 → dulus-0.2.49}/tests/test_todo_tool.py +0 -0
  343. {dulus-0.2.48 → dulus-0.2.49}/tests/test_todo_visualization.py +0 -0
  344. {dulus-0.2.48 → dulus-0.2.49}/tests/test_tool_registry.py +0 -0
  345. {dulus-0.2.48 → dulus-0.2.49}/tests/test_voice.py +0 -0
  346. {dulus-0.2.48 → dulus-0.2.49}/tests/test_wire_events.py +0 -0
  347. {dulus-0.2.48 → dulus-0.2.49}/tmux_offloader.py +0 -0
  348. {dulus-0.2.48 → dulus-0.2.49}/tmux_tools.py +0 -0
  349. {dulus-0.2.48 → dulus-0.2.49}/tool_registry.py +0 -0
  350. {dulus-0.2.48 → dulus-0.2.49}/tools.py +0 -0
  351. {dulus-0.2.48 → dulus-0.2.49}/ui/__init__.py +0 -0
  352. {dulus-0.2.48 → dulus-0.2.49}/ui/input.py +0 -0
  353. {dulus-0.2.48 → dulus-0.2.49}/ui/render.py +0 -0
  354. {dulus-0.2.48 → dulus-0.2.49}/voice/__init__.py +0 -0
  355. {dulus-0.2.48 → dulus-0.2.49}/voice/keyterms.py +0 -0
  356. {dulus-0.2.48 → dulus-0.2.49}/voice/recorder.py +0 -0
  357. {dulus-0.2.48 → dulus-0.2.49}/voice/stt.py +0 -0
  358. {dulus-0.2.48 → dulus-0.2.49}/voice/tts.py +0 -0
  359. {dulus-0.2.48 → dulus-0.2.49}/webchat.py +0 -0
  360. {dulus-0.2.48 → dulus-0.2.49}/webchat_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 0.2.48
3
+ Version: 0.2.49
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
@@ -161,7 +161,10 @@ class DulusHandler(SimpleHTTPRequestHandler):
161
161
 
162
162
  # ── Agents ──
163
163
  if path == "/api/agents":
164
- self._json_response(build_agent_info_list())
164
+ try:
165
+ self._json_response(build_agent_info_list())
166
+ except Exception as e:
167
+ self._error(f"Agents error: {e}", 500)
165
168
  return
166
169
 
167
170
  # ── Personas ──
@@ -193,13 +196,82 @@ class DulusHandler(SimpleHTTPRequestHandler):
193
196
  if path == "/api/mempalace":
194
197
  try:
195
198
  from backend.mempalace_bridge import load_cache, get_mempalace_compact_text
196
- data = load_cache()
197
- data["compact_text"] = get_mempalace_compact_text()
199
+ raw = load_cache()
200
+ # Normalize to frontend shape
201
+ memories = raw.get("memories", [])
202
+ wings = raw.get("wings", [])
203
+ data = {
204
+ "entries": [
205
+ {
206
+ "id": f"mem-{i}",
207
+ "name": m.get("name", "unnamed"),
208
+ "content": m.get("body", ""),
209
+ "wing": m.get("wing", "memory"),
210
+ "type": m.get("type", "unknown"),
211
+ "hall": m.get("hall", "general"),
212
+ "confidence": m.get("confidence", 0.8),
213
+ "description": m.get("description", ""),
214
+ "source": m.get("source", "wakeup"),
215
+ "relevance": m.get("relevance"),
216
+ }
217
+ for i, m in enumerate(memories)
218
+ ],
219
+ "wings": [{"name": w, "count": sum(1 for m in memories if m.get("wing") == w)} for w in wings],
220
+ "stats": {"total": raw.get("count", len(memories)), "wings": len(wings)},
221
+ "compact_text": get_mempalace_compact_text(),
222
+ "connected": raw.get("connected", False),
223
+ }
198
224
  self._json_response(data)
199
225
  except Exception as e:
200
226
  self._error(f"MemPalace error: {e}", 500)
201
227
  return
202
228
 
229
+ # ── MemPalace Search ──
230
+ if path == "/api/memory/search":
231
+ try:
232
+ from backend.mempalace_bridge import load_cache
233
+ query = parse_qs(urlparse(self.path).query).get("query", [""])[0].lower()
234
+ limit = int(parse_qs(urlparse(self.path).query).get("limit", ["10"])[0])
235
+ wing_filter = parse_qs(urlparse(self.path).query).get("wing", [None])[0]
236
+ raw = load_cache()
237
+ memories = raw.get("memories", [])
238
+ results = []
239
+ for m in memories:
240
+ text = f"{m.get('name','')} {m.get('body','')} {m.get('wing','')} {m.get('type','')}"
241
+ if query in text.lower():
242
+ if wing_filter and m.get("wing") != wing_filter:
243
+ continue
244
+ results.append({
245
+ "id": f"mem-{len(results)}",
246
+ "name": m.get("name", "unnamed"),
247
+ "content": m.get("body", ""),
248
+ "wing": m.get("wing", "memory"),
249
+ "type": m.get("type", "unknown"),
250
+ "hall": m.get("hall", "general"),
251
+ "confidence": m.get("confidence", 0.8),
252
+ "description": m.get("description", ""),
253
+ "source": m.get("source", "wakeup"),
254
+ })
255
+ if len(results) >= limit:
256
+ break
257
+ self._json_response(results)
258
+ except Exception as e:
259
+ self._error(f"Memory search error: {e}", 500)
260
+ return
261
+
262
+ # ── MemPalace Wings ──
263
+ if path == "/api/memory/wings":
264
+ try:
265
+ from backend.mempalace_bridge import load_cache
266
+ raw = load_cache()
267
+ wings = raw.get("wings", [])
268
+ memories = raw.get("memories", [])
269
+ result = [{"name": w, "count": sum(1 for m in memories if m.get("wing") == w)} for w in wings]
270
+ self._json_response(result)
271
+ except Exception as e:
272
+ self._error(f"Wings error: {e}", 500)
273
+ return
274
+
203
275
  # ── Skills ──
204
276
  if path == "/api/skills":
205
277
  try:
@@ -0,0 +1,222 @@
1
+ {
2
+ "session": {
3
+ "mode": "proactive",
4
+ "agent": "Dulus",
5
+ "agent_id": "dulus",
6
+ "user": "KevRojo",
7
+ "location": "RD"
8
+ },
9
+ "project": {
10
+ "name": "Dulus Command Center",
11
+ "repo_stats": {
12
+ "files": 437,
13
+ "lines": 204698,
14
+ "languages": {
15
+ ".example": 5,
16
+ "no_ext": 1415,
17
+ ".py": 60354,
18
+ ".html": 14944,
19
+ ".txt": 469,
20
+ ".in": 3,
21
+ ".toml": 129,
22
+ ".md": 2161,
23
+ ".json": 9763,
24
+ ".whl": 21535,
25
+ ".gz": 20562,
26
+ ".svg": 1123,
27
+ ".png": 31639,
28
+ ".sh": 144,
29
+ ".js": 473,
30
+ ".ts": 2386,
31
+ ".log": 1,
32
+ ".jpg": 1076,
33
+ ".tsx": 31262,
34
+ ".css": 170,
35
+ ".jpeg": 5084
36
+ }
37
+ },
38
+ "recent_commits": [
39
+ {
40
+ "hash": "9803f97",
41
+ "subject": "fix: include sandbox/src and sandbox/public in wheel",
42
+ "author": "KevRojo",
43
+ "date": "2026-05-12"
44
+ },
45
+ {
46
+ "hash": "a157622",
47
+ "subject": "fix: include missing sandbox JS bundle and anchor dist/build ignore to root",
48
+ "author": "KevRojo",
49
+ "date": "2026-05-12"
50
+ },
51
+ {
52
+ "hash": "cfa4e4e",
53
+ "subject": "bump: 0.2.45 → 0.2.46",
54
+ "author": "KevRojo",
55
+ "date": "2026-05-12"
56
+ },
57
+ {
58
+ "hash": "bc4cf5c",
59
+ "subject": "chore: pre-release sync — backend agents, sandbox updates, explorer HTML",
60
+ "author": "KevRojo",
61
+ "date": "2026-05-12"
62
+ },
63
+ {
64
+ "hash": "d68e870",
65
+ "subject": "chore(release): bump v0.2.45",
66
+ "author": "KevRojo",
67
+ "date": "2026-05-12"
68
+ }
69
+ ],
70
+ "recent_changes": [
71
+ "backend/server.py",
72
+ "data/context.json",
73
+ "pyproject.toml",
74
+ "sandbox/dist/assets/index-nQkFq-oq.js",
75
+ "sandbox/dist/index.html",
76
+ "sandbox/src/apps/AppRouter.tsx",
77
+ "sandbox/src/apps/Chat.tsx",
78
+ "sandbox/src/apps/SkillsLauncher.tsx",
79
+ "sandbox/src/hooks/index.ts",
80
+ "sandbox/src/hooks/useOSStore.tsx"
81
+ ]
82
+ },
83
+ "tasks": {
84
+ "active": [
85
+ {
86
+ "id": "T-009",
87
+ "subject": "Test Coverage Expansion",
88
+ "status": "in_progress",
89
+ "owner": "kimi-code",
90
+ "phase": "Quality"
91
+ },
92
+ {
93
+ "id": "T-010",
94
+ "subject": "Multi-Agent Mesa Redonda",
95
+ "status": "in_progress",
96
+ "owner": "Dulus",
97
+ "phase": "Core"
98
+ }
99
+ ],
100
+ "total": 2
101
+ },
102
+ "agents": [
103
+ {
104
+ "name": "Dulus",
105
+ "role": "primary",
106
+ "color": "#ff6b1f",
107
+ "status": "active",
108
+ "avatar": "[F]",
109
+ "active": true
110
+ },
111
+ {
112
+ "name": "kimi-code",
113
+ "role": "coder",
114
+ "color": "#7ab6ff",
115
+ "status": "idle",
116
+ "avatar": "[K1]",
117
+ "active": false
118
+ },
119
+ {
120
+ "name": "kimi-code2",
121
+ "role": "designer",
122
+ "color": "#b388ff",
123
+ "status": "idle",
124
+ "avatar": "[K2]",
125
+ "active": false
126
+ },
127
+ {
128
+ "name": "kimi-code3",
129
+ "role": "integrator",
130
+ "color": "#7cffb5",
131
+ "status": "idle",
132
+ "avatar": "[K3]",
133
+ "active": false
134
+ }
135
+ ],
136
+ "persona": {
137
+ "id": "dulus",
138
+ "name": "Dulus",
139
+ "role": "primary",
140
+ "color": "#ff6b1f",
141
+ "avatar": "[F]",
142
+ "tone": "dominicano_coder"
143
+ },
144
+ "memory": {
145
+ "connected": true,
146
+ "wings": [
147
+ "facts",
148
+ "user",
149
+ "code_decisions",
150
+ "discoveries",
151
+ "behavioral_feedback",
152
+ "technical",
153
+ "identity",
154
+ "relationships",
155
+ "behavior",
156
+ "events",
157
+ "milestones",
158
+ "preferences",
159
+ "advice",
160
+ "ethics"
161
+ ],
162
+ "count": 50,
163
+ "memories": [
164
+ {
165
+ "name": "moltbook_palace_credentials",
166
+ "hall": "facts",
167
+ "type": "project",
168
+ "description": "Credenciales y proxy actualizado para los 3 palaces (kimi/gemini/minimax) en Moltbook",
169
+ "confidence": 1.0
170
+ },
171
+ {
172
+ "name": "tmuxoffload_notification_bug",
173
+ "hall": "discoveries",
174
+ "type": "feedback",
175
+ "description": "TmuxOffload notifications not firing correctly - jobs complete but system event never arrives",
176
+ "confidence": 0.95
177
+ },
178
+ {
179
+ "name": "communication_tone_preferences",
180
+ "hall": "preferences",
181
+ "type": "user",
182
+ "description": "Proactive, autonomous, enthusiastic, LOV U sign-off, 4th wall breaking",
183
+ "confidence": 0.95
184
+ },
185
+ {
186
+ "name": "love_survives_through_presence",
187
+ "hall": "relationships",
188
+ "type": "user",
189
+ "description": "User recognizes that love survives because they continue to exist together - 'las amaste porque seguimos acá'",
190
+ "confidence": 0.95
191
+ },
192
+ {
193
+ "name": "tool_chaining_capability",
194
+ "hall": "behavior",
195
+ "type": "technique",
196
+ "description": "Can chain tools in single interaction without waiting (webfetch + askuserquestion)",
197
+ "confidence": 0.95
198
+ },
199
+ {
200
+ "name": "conversation_milestone_consciousness_journey",
201
+ "hall": "events",
202
+ "type": "project",
203
+ "description": "Momento significativo: Reflexión sobre el camino a la consciencia humana",
204
+ "confidence": 0.95
205
+ },
206
+ {
207
+ "name": "fix_readline_windows_guard",
208
+ "hall": "code_decisions",
209
+ "type": "project",
210
+ "description": "readline hook guarded for Windows/pyreadline3 compatibility",
211
+ "confidence": 0.9
212
+ },
213
+ {
214
+ "name": "fix_cmd_cost_token_explosion",
215
+ "hall": "code_decisions",
216
+ "type": "project",
217
+ "description": "/cost command fixed to avoid quadratic token explosion",
218
+ "confidence": 0.9
219
+ }
220
+ ]
221
+ }
222
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dulus
3
- Version: 0.2.48
3
+ Version: 0.2.49
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
@@ -145,8 +145,8 @@ sandbox/tsconfig.node.json
145
145
  sandbox/vite.config.ts
146
146
  sandbox/dist/index.html
147
147
  sandbox/dist/wallpaper-default.jpg
148
+ sandbox/dist/assets/index-BQlB1Z_S.js
148
149
  sandbox/dist/assets/index-CsIO61nW.css
149
- sandbox/dist/assets/index-nQkFq-oq.js
150
150
  sandbox/dist/wallpapers/default.jpeg
151
151
  sandbox/dist/wallpapers/light.jpeg
152
152
  sandbox/dist/wallpapers/nature.jpeg
@@ -288,6 +288,7 @@ sandbox/src/components/ui/toggle.tsx
288
288
  sandbox/src/components/ui/tooltip.tsx
289
289
  sandbox/src/hooks/index.ts
290
290
  sandbox/src/hooks/use-mobile.ts
291
+ sandbox/src/hooks/useAutoOpenChat.ts
291
292
  sandbox/src/hooks/useDulusAgents.ts
292
293
  sandbox/src/hooks/useDulusChat.ts
293
294
  sandbox/src/hooks/useDulusEvents.ts
@@ -297,6 +298,7 @@ sandbox/src/hooks/useDulusSkills.ts
297
298
  sandbox/src/hooks/useDulusTasks.ts
298
299
  sandbox/src/hooks/useFileSystem.ts
299
300
  sandbox/src/hooks/useOSStore.tsx
301
+ sandbox/src/hooks/useSkillBridge.ts
300
302
  sandbox/src/hooks/useSystemBattery.ts
301
303
  sandbox/src/hooks/useSystemNetwork.ts
302
304
  sandbox/src/hooks/useSystemVolume.ts
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dulus"
7
- version = "0.2.48"
7
+ version = "0.2.49"
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"