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.
- {dulus-0.2.48/dulus.egg-info → dulus-0.2.49}/PKG-INFO +1 -1
- {dulus-0.2.48 → dulus-0.2.49}/backend/server.py +75 -3
- dulus-0.2.49/data/context.json +222 -0
- {dulus-0.2.48 → dulus-0.2.49/dulus.egg-info}/PKG-INFO +1 -1
- {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/SOURCES.txt +3 -1
- {dulus-0.2.48 → dulus-0.2.49}/pyproject.toml +1 -1
- dulus-0.2.48/sandbox/dist/assets/index-nQkFq-oq.js → dulus-0.2.49/sandbox/dist/assets/index-BQlB1Z_S.js +46 -46
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/index.html +1 -1
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/AppRouter.tsx +2 -2
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Chat.tsx +22 -2
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/SkillsLauncher.tsx +43 -13
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/index.ts +3 -0
- dulus-0.2.49/sandbox/src/hooks/useAutoOpenChat.ts +34 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useOSStore.tsx +20 -1
- dulus-0.2.49/sandbox/src/hooks/useSkillBridge.ts +45 -0
- dulus-0.2.48/data/context.json +0 -140
- {dulus-0.2.48 → dulus-0.2.49}/LICENSE +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/MANIFEST.in +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/README.md +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/agent.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/agents_bridge.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/compressor.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/context.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/githook.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/marketplace.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/personas.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/plugins.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/backend/tasks.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/batch_api.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/checkpoint/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/checkpoint/hooks.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/checkpoint/store.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/checkpoint/types.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/claude_code_watcher.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/clipboard_utils.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/cloudsave.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/common.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/compaction.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/config.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/context.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/active_persona.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/marketplace.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/personas.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/plugins/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/plugin.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/data/tasks.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/README.md +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/api.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/architecture.md +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/dashboard/index.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/divider.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/generate.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/hero.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/index.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/news.md +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/particle-playground.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/personas/index.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/poetry-banner.png +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/preview.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-agents.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-features.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-memory.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-models.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-perms.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/spinners.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/split-pane.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/docs/uploads/particle-playground.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/requires.txt +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus.egg-info/top_level.txt +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus_gui.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/client.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/config.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/dulus_mcp/types.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/agent_bridge.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/chat_widget.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/main_window.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/personas.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/session_utils.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/settings_dialog.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/sidebar.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/tasks_view.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/themes.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/gui/tool_panel.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/input.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/license_manager.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/audit.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/consolidator.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/context.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/offload.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/palace.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/scan.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/sessions.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/store.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/types.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/memory/vector_search.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/multi_agent/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/multi_agent/subagent.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/multi_agent/tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/offload_helper.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/plugin/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/plugin/autoadapter.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/plugin/loader.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/plugin/recommend.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/plugin/store.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/plugin/types.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/providers.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/README.md +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/components.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/assets/index-CsIO61nW.css +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpaper-default.jpg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/default.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/light.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/nature.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/dist/wallpapers/tech.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/eslint.config.js +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/index.html +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/info.md +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/package-lock.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/package.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/postcss.config.js +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpaper-default.jpg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/default.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/light.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/nature.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/public/wallpapers/tech.jpeg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/App.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/AgentMonitor.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ApiTester.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ArchiveManager.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/AsciiArt.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Base64Tool.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Browser.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Calculator.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Calendar.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Chess.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Clock.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/CodeEditor.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ColorPalette.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ColorPicker.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Contacts.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/DocumentViewer.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Drawing.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Email.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/FileManager.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/FlappyBird.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/FtpClient.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Game2048.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/GitClient.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ImageGallery.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ImageViewer.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/JsonFormatter.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MarkdownPreview.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MatrixRain.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MediaConverter.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Memory.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MemoryManager.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Minesweeper.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/MusicPlayer.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/NetworkTools.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Notes.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/PasswordManager.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/PhotoEditor.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Pong.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/RegexTester.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Reminders.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/RssReader.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/ScreenRecorder.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Settings.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Snake.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Solitaire.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Spreadsheet.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Sudoku.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/SystemMonitor.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/TaskManager.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Terminal.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Tetris.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/TextEditor.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/TicTacToe.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Todo.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/VideoPlayer.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/VoiceRecorder.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Weather.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/Whiteboard.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/apps/registry.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/AppContainer.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/AppLauncher.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/BootSequence.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ContextMenu.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/Desktop.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/Dock.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/LoginScreen.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/NotImplemented.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/NotificationCenter.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/NotificationSystem.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/TopPanel.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/WindowFrame.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/WindowManager.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/accordion.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/alert-dialog.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/alert.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/aspect-ratio.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/avatar.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/badge.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/breadcrumb.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/button-group.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/button.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/calendar.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/card.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/carousel.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/chart.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/checkbox.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/collapsible.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/command.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/context-menu.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/dialog.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/drawer.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/dropdown-menu.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/empty.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/field.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/form.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/hover-card.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/input-group.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/input-otp.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/input.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/item.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/kbd.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/label.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/menubar.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/navigation-menu.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/pagination.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/popover.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/progress.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/radio-group.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/resizable.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/scroll-area.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/select.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/separator.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/sheet.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/sidebar.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/skeleton.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/slider.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/sonner.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/spinner.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/switch.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/table.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/tabs.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/textarea.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/toggle-group.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/toggle.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/components/ui/tooltip.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/use-mobile.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusAgents.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusChat.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusEvents.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusHealth.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusMemory.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusSkills.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useDulusTasks.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useFileSystem.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useSystemBattery.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useSystemNetwork.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/hooks/useSystemVolume.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/index.css +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/lib/dulus-api.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/lib/utils.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/main.tsx +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/types/index.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/src/utils/assets.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/tailwind.config.js +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/tsconfig.app.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/tsconfig.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/tsconfig.node.json +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/sandbox/vite.config.ts +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/setup.cfg +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/skill/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/skill/builtin.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/skill/clawhub.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/skill/executor.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/skill/loader.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/skill/tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/skills.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/spinner.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/string_utils.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/subagent.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/task/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/task/store.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/task/tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/task/types.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_afk_yolo.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_approval_runtime.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_background_task_tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_background_tasks.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_clipboard_utils.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_compaction.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_diff_view.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_diff_visualization.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_display_blocks.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_export_import.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_hook_engine.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_license.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_mcp.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_memory.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_notification_manager.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_plugin.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_session_fork.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_shell_mode.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_skills.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_steer_input.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_subagent.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_task.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_think_tool.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_todo_tool.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_todo_visualization.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_tool_registry.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_voice.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tests/test_wire_events.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tmux_offloader.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tmux_tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tool_registry.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/tools.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/ui/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/ui/input.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/ui/render.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/voice/__init__.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/voice/keyterms.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/voice/recorder.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/voice/stt.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/voice/tts.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/webchat.py +0 -0
- {dulus-0.2.48 → dulus-0.2.49}/webchat_server.py +0 -0
|
@@ -161,7 +161,10 @@ class DulusHandler(SimpleHTTPRequestHandler):
|
|
|
161
161
|
|
|
162
162
|
# ── Agents ──
|
|
163
163
|
if path == "/api/agents":
|
|
164
|
-
|
|
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
|
-
|
|
197
|
-
|
|
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
|
+
}
|
|
@@ -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.
|
|
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"
|