dulus 0.2.60__tar.gz → 3.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dulus-0.2.60 → dulus-3.3.4}/MANIFEST.in +3 -0
- {dulus-0.2.60/dulus.egg-info → dulus-3.3.4}/PKG-INFO +202 -97
- {dulus-0.2.60 → dulus-3.3.4}/README.md +185 -95
- {dulus-0.2.60 → dulus-3.3.4}/agent.py +61 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/agents_bridge.py +8 -3
- {dulus-0.2.60 → dulus-3.3.4}/backend/compressor.py +1 -1
- {dulus-0.2.60 → dulus-3.3.4}/batch_api.py +165 -0
- {dulus-0.2.60 → dulus-3.3.4}/compaction.py +280 -40
- {dulus-0.2.60 → dulus-3.3.4}/config.py +12 -3
- {dulus-0.2.60 → dulus-3.3.4}/context.py +101 -2
- {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/composio_plugin/tool_generator.py +2 -2
- {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/plugin_tool.py +15 -15
- dulus-3.3.4/docs/API.md +343 -0
- dulus-3.3.4/docs/BRAND_GUIDE.md +289 -0
- dulus-3.3.4/docs/CHANGELOG.md +117 -0
- dulus-3.3.4/docs/CONTRIBUTING.md +375 -0
- dulus-3.3.4/docs/DEPLOYMENT.md +293 -0
- dulus-3.3.4/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
- dulus-3.3.4/docs/FAQ.md +230 -0
- dulus-3.3.4/docs/GETTING_STARTED.md +397 -0
- dulus-3.3.4/docs/INVESTOR_BRIEF.md +324 -0
- dulus-3.3.4/docs/README.md +839 -0
- dulus-3.3.4/docs/README_AR.md +240 -0
- dulus-3.3.4/docs/README_EN.md +318 -0
- dulus-3.3.4/docs/README_ES.md +251 -0
- dulus-3.3.4/docs/README_FR.md +240 -0
- dulus-3.3.4/docs/README_JA.md +240 -0
- dulus-3.3.4/docs/README_KO.md +240 -0
- dulus-3.3.4/docs/README_PT.md +240 -0
- dulus-3.3.4/docs/README_RU.md +240 -0
- dulus-3.3.4/docs/README_ZH.md +240 -0
- dulus-3.3.4/docs/SECURITY.md +162 -0
- dulus-3.3.4/docs/api.html +2499 -0
- dulus-3.3.4/docs/architecture.md +428 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/dashboard/index.html +5 -8
- dulus-3.3.4/docs/dulus-bird.png +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/hero.svg +4 -3
- {dulus-0.2.60 → dulus-3.3.4}/docs/index.html +1686 -325
- {dulus-0.2.60 → dulus-3.3.4}/docs/news.md +40 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/preview.html +1 -1
- {dulus-0.2.60 → dulus-3.3.4/dulus.egg-info}/PKG-INFO +202 -97
- dulus-3.3.4/dulus.egg-info/SOURCES.txt +258 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/requires.txt +18 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/top_level.txt +6 -1
- {dulus-0.2.60 → dulus-3.3.4}/dulus.py +2060 -182
- dulus-3.3.4/dulus_gui.py +818 -0
- dulus-3.3.4/dulus_tools/__init__.py +1 -0
- dulus-3.3.4/dulus_tools/add_dir_manager.py +109 -0
- dulus-3.3.4/dulus_tools/afk_mode.py +34 -0
- dulus-3.3.4/dulus_tools/approval_runtime.py +285 -0
- dulus-3.3.4/dulus_tools/background_tasks.py +847 -0
- dulus-3.3.4/dulus_tools/clipboard_utils.py +166 -0
- dulus-3.3.4/dulus_tools/diff_visualizer.py +147 -0
- dulus-3.3.4/dulus_tools/export_import.py +206 -0
- dulus-3.3.4/dulus_tools/hook_engine.py +379 -0
- dulus-3.3.4/dulus_tools/notification_manager.py +344 -0
- dulus-3.3.4/dulus_tools/session_fork.py +230 -0
- dulus-3.3.4/dulus_tools/shell_mode.py +130 -0
- dulus-3.3.4/dulus_tools/todo_visualizer.py +131 -0
- dulus-3.3.4/dulus_tools/wire_events.py +208 -0
- dulus-3.3.4/dulus_tools/yolo_mode.py +35 -0
- dulus-3.3.4/governance.py +277 -0
- dulus-3.3.4/gui/__init__.py +45 -0
- dulus-3.3.4/gui/main_window.py +1529 -0
- dulus-3.3.4/gui/sandbox_server.py +152 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/themes.py +31 -0
- {dulus-0.2.60 → dulus-3.3.4}/input.py +66 -9
- {dulus-0.2.60 → dulus-3.3.4}/license_manager.py +1 -1
- {dulus-0.2.60 → dulus-3.3.4}/offload_helper.py +58 -13
- dulus-3.3.4/personality_config.py +353 -0
- {dulus-0.2.60 → dulus-3.3.4}/plugin/autoadapter.py +84 -5
- {dulus-0.2.60 → dulus-3.3.4}/providers.py +1559 -272
- {dulus-0.2.60 → dulus-3.3.4}/pyproject.toml +45 -7
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/index.html +1 -0
- dulus-3.3.4/sandbox_bootstrap.py +54 -0
- dulus-3.3.4/skill/bundled/LICENSE-obsidian-skills +21 -0
- dulus-3.3.4/skill/bundled/README.md +40 -0
- dulus-3.3.4/skill/bundled/defuddle/SKILL.md +41 -0
- dulus-3.3.4/skill/bundled/json-canvas/SKILL.md +244 -0
- dulus-3.3.4/skill/bundled/json-canvas/references/EXAMPLES.md +329 -0
- dulus-3.3.4/skill/bundled/obsidian-bases/SKILL.md +497 -0
- dulus-3.3.4/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
- dulus-3.3.4/skill/bundled/obsidian-cli/SKILL.md +106 -0
- dulus-3.3.4/skill/bundled/obsidian-markdown/SKILL.md +198 -0
- dulus-3.3.4/skill/bundled/obsidian-markdown/references/CALLOUTS.md +58 -0
- dulus-3.3.4/skill/bundled/obsidian-markdown/references/EMBEDS.md +63 -0
- dulus-3.3.4/skill/bundled/obsidian-markdown/references/PROPERTIES.md +61 -0
- {dulus-0.2.60 → dulus-3.3.4}/skill/clawhub.py +198 -0
- {dulus-0.2.60 → dulus-3.3.4}/skill/loader.py +36 -6
- dulus-3.3.4/soul.py +450 -0
- {dulus-0.2.60 → dulus-3.3.4}/tmux_offloader.py +23 -6
- {dulus-0.2.60 → dulus-3.3.4}/tools.py +212 -21
- {dulus-0.2.60 → dulus-3.3.4}/voice/audio_utils.py +25 -9
- {dulus-0.2.60 → dulus-3.3.4}/voice/recorder.py +8 -1
- {dulus-0.2.60 → dulus-3.3.4}/voice/stt.py +56 -25
- {dulus-0.2.60 → dulus-3.3.4}/voice/tts.py +93 -1
- {dulus-0.2.60 → dulus-3.3.4}/voice/wake_word.py +171 -136
- {dulus-0.2.60 → dulus-3.3.4}/webbridge/__init__.py +5 -5
- {dulus-0.2.60 → dulus-3.3.4}/webbridge/core.py +694 -538
- dulus-3.3.4/webbridge/tools.py +453 -0
- {dulus-0.2.60 → dulus-3.3.4}/webchat_server.py +117 -23
- dulus-3.3.4/welcome.py +675 -0
- dulus-0.2.60/data/context.json +0 -143
- dulus-0.2.60/docs/README.md +0 -510
- dulus-0.2.60/docs/api.html +0 -2894
- dulus-0.2.60/docs/architecture.md +0 -374
- dulus-0.2.60/docs/particle-playground.html +0 -328
- dulus-0.2.60/dulus.egg-info/SOURCES.txt +0 -365
- dulus-0.2.60/dulus_gui.py +0 -387
- dulus-0.2.60/gui/__init__.py +0 -18
- dulus-0.2.60/gui/main_window.py +0 -485
- dulus-0.2.60/sandbox/public/wallpaper-default.jpg +0 -0
- dulus-0.2.60/sandbox/public/wallpapers/default.jpeg +0 -0
- dulus-0.2.60/sandbox/public/wallpapers/light.jpeg +0 -0
- dulus-0.2.60/sandbox/public/wallpapers/nature.jpeg +0 -0
- dulus-0.2.60/sandbox/public/wallpapers/tech.jpeg +0 -0
- dulus-0.2.60/sandbox/src/App.tsx +0 -241
- dulus-0.2.60/sandbox/src/apps/AgentMonitor.tsx +0 -249
- dulus-0.2.60/sandbox/src/apps/ApiTester.tsx +0 -479
- dulus-0.2.60/sandbox/src/apps/AppRouter.tsx +0 -197
- dulus-0.2.60/sandbox/src/apps/ArchiveManager.tsx +0 -360
- dulus-0.2.60/sandbox/src/apps/AsciiArt.tsx +0 -393
- dulus-0.2.60/sandbox/src/apps/Base64Tool.tsx +0 -364
- dulus-0.2.60/sandbox/src/apps/Browser.tsx +0 -568
- dulus-0.2.60/sandbox/src/apps/Calculator.tsx +0 -358
- dulus-0.2.60/sandbox/src/apps/Calendar.tsx +0 -562
- dulus-0.2.60/sandbox/src/apps/Chat.tsx +0 -319
- dulus-0.2.60/sandbox/src/apps/Chess.tsx +0 -570
- dulus-0.2.60/sandbox/src/apps/Clock.tsx +0 -565
- dulus-0.2.60/sandbox/src/apps/CodeEditor.tsx +0 -467
- dulus-0.2.60/sandbox/src/apps/ColorPalette.tsx +0 -386
- dulus-0.2.60/sandbox/src/apps/ColorPicker.tsx +0 -359
- dulus-0.2.60/sandbox/src/apps/Contacts.tsx +0 -238
- dulus-0.2.60/sandbox/src/apps/DocumentViewer.tsx +0 -275
- dulus-0.2.60/sandbox/src/apps/Drawing.tsx +0 -413
- dulus-0.2.60/sandbox/src/apps/Email.tsx +0 -464
- dulus-0.2.60/sandbox/src/apps/FileManager.tsx +0 -413
- dulus-0.2.60/sandbox/src/apps/FlappyBird.tsx +0 -297
- dulus-0.2.60/sandbox/src/apps/FtpClient.tsx +0 -255
- dulus-0.2.60/sandbox/src/apps/Game2048.tsx +0 -280
- dulus-0.2.60/sandbox/src/apps/GitClient.tsx +0 -378
- dulus-0.2.60/sandbox/src/apps/ImageGallery.tsx +0 -276
- dulus-0.2.60/sandbox/src/apps/ImageViewer.tsx +0 -272
- dulus-0.2.60/sandbox/src/apps/JsonFormatter.tsx +0 -402
- dulus-0.2.60/sandbox/src/apps/MarkdownPreview.tsx +0 -293
- dulus-0.2.60/sandbox/src/apps/MatrixRain.tsx +0 -253
- dulus-0.2.60/sandbox/src/apps/MediaConverter.tsx +0 -253
- dulus-0.2.60/sandbox/src/apps/Memory.tsx +0 -269
- dulus-0.2.60/sandbox/src/apps/MemoryManager.tsx +0 -263
- dulus-0.2.60/sandbox/src/apps/Minesweeper.tsx +0 -346
- dulus-0.2.60/sandbox/src/apps/MusicPlayer.tsx +0 -306
- dulus-0.2.60/sandbox/src/apps/NetworkTools.tsx +0 -321
- dulus-0.2.60/sandbox/src/apps/Notes.tsx +0 -420
- dulus-0.2.60/sandbox/src/apps/PasswordManager.tsx +0 -212
- dulus-0.2.60/sandbox/src/apps/PhotoEditor.tsx +0 -342
- dulus-0.2.60/sandbox/src/apps/Pong.tsx +0 -349
- dulus-0.2.60/sandbox/src/apps/RegexTester.tsx +0 -432
- dulus-0.2.60/sandbox/src/apps/Reminders.tsx +0 -228
- dulus-0.2.60/sandbox/src/apps/RssReader.tsx +0 -245
- dulus-0.2.60/sandbox/src/apps/ScreenRecorder.tsx +0 -416
- dulus-0.2.60/sandbox/src/apps/Settings.tsx +0 -474
- dulus-0.2.60/sandbox/src/apps/SkillsLauncher.tsx +0 -316
- dulus-0.2.60/sandbox/src/apps/Snake.tsx +0 -274
- dulus-0.2.60/sandbox/src/apps/Solitaire.tsx +0 -445
- dulus-0.2.60/sandbox/src/apps/Spreadsheet.tsx +0 -441
- dulus-0.2.60/sandbox/src/apps/Sudoku.tsx +0 -386
- dulus-0.2.60/sandbox/src/apps/SystemMonitor.tsx +0 -360
- dulus-0.2.60/sandbox/src/apps/TaskManager.tsx +0 -392
- dulus-0.2.60/sandbox/src/apps/Terminal.tsx +0 -619
- dulus-0.2.60/sandbox/src/apps/Tetris.tsx +0 -441
- dulus-0.2.60/sandbox/src/apps/TextEditor.tsx +0 -446
- dulus-0.2.60/sandbox/src/apps/TicTacToe.tsx +0 -254
- dulus-0.2.60/sandbox/src/apps/Todo.tsx +0 -394
- dulus-0.2.60/sandbox/src/apps/VideoPlayer.tsx +0 -297
- dulus-0.2.60/sandbox/src/apps/VoiceRecorder.tsx +0 -382
- dulus-0.2.60/sandbox/src/apps/Weather.tsx +0 -462
- dulus-0.2.60/sandbox/src/apps/Whiteboard.tsx +0 -338
- dulus-0.2.60/sandbox/src/apps/registry.ts +0 -564
- dulus-0.2.60/sandbox/src/components/AppContainer.tsx +0 -26
- dulus-0.2.60/sandbox/src/components/AppLauncher.tsx +0 -241
- dulus-0.2.60/sandbox/src/components/BootSequence.tsx +0 -236
- dulus-0.2.60/sandbox/src/components/ContextMenu.tsx +0 -251
- dulus-0.2.60/sandbox/src/components/Desktop.tsx +0 -186
- dulus-0.2.60/sandbox/src/components/Dock.tsx +0 -199
- dulus-0.2.60/sandbox/src/components/LoginScreen.tsx +0 -302
- dulus-0.2.60/sandbox/src/components/NotImplemented.tsx +0 -55
- dulus-0.2.60/sandbox/src/components/NotificationCenter.tsx +0 -181
- dulus-0.2.60/sandbox/src/components/NotificationSystem.tsx +0 -136
- dulus-0.2.60/sandbox/src/components/TopPanel.tsx +0 -334
- dulus-0.2.60/sandbox/src/components/WindowFrame.tsx +0 -401
- dulus-0.2.60/sandbox/src/components/WindowManager.tsx +0 -25
- dulus-0.2.60/sandbox/src/components/ui/accordion.tsx +0 -64
- dulus-0.2.60/sandbox/src/components/ui/alert-dialog.tsx +0 -155
- dulus-0.2.60/sandbox/src/components/ui/alert.tsx +0 -66
- dulus-0.2.60/sandbox/src/components/ui/aspect-ratio.tsx +0 -11
- dulus-0.2.60/sandbox/src/components/ui/avatar.tsx +0 -51
- dulus-0.2.60/sandbox/src/components/ui/badge.tsx +0 -46
- dulus-0.2.60/sandbox/src/components/ui/breadcrumb.tsx +0 -109
- dulus-0.2.60/sandbox/src/components/ui/button-group.tsx +0 -83
- dulus-0.2.60/sandbox/src/components/ui/button.tsx +0 -62
- dulus-0.2.60/sandbox/src/components/ui/calendar.tsx +0 -220
- dulus-0.2.60/sandbox/src/components/ui/card.tsx +0 -92
- dulus-0.2.60/sandbox/src/components/ui/carousel.tsx +0 -239
- dulus-0.2.60/sandbox/src/components/ui/chart.tsx +0 -357
- dulus-0.2.60/sandbox/src/components/ui/checkbox.tsx +0 -32
- dulus-0.2.60/sandbox/src/components/ui/collapsible.tsx +0 -31
- dulus-0.2.60/sandbox/src/components/ui/command.tsx +0 -182
- dulus-0.2.60/sandbox/src/components/ui/context-menu.tsx +0 -252
- dulus-0.2.60/sandbox/src/components/ui/dialog.tsx +0 -141
- dulus-0.2.60/sandbox/src/components/ui/drawer.tsx +0 -135
- dulus-0.2.60/sandbox/src/components/ui/dropdown-menu.tsx +0 -255
- dulus-0.2.60/sandbox/src/components/ui/empty.tsx +0 -104
- dulus-0.2.60/sandbox/src/components/ui/field.tsx +0 -246
- dulus-0.2.60/sandbox/src/components/ui/form.tsx +0 -167
- dulus-0.2.60/sandbox/src/components/ui/hover-card.tsx +0 -44
- dulus-0.2.60/sandbox/src/components/ui/input-group.tsx +0 -170
- dulus-0.2.60/sandbox/src/components/ui/input-otp.tsx +0 -75
- dulus-0.2.60/sandbox/src/components/ui/input.tsx +0 -21
- dulus-0.2.60/sandbox/src/components/ui/item.tsx +0 -193
- dulus-0.2.60/sandbox/src/components/ui/kbd.tsx +0 -28
- dulus-0.2.60/sandbox/src/components/ui/label.tsx +0 -24
- dulus-0.2.60/sandbox/src/components/ui/menubar.tsx +0 -274
- dulus-0.2.60/sandbox/src/components/ui/navigation-menu.tsx +0 -168
- dulus-0.2.60/sandbox/src/components/ui/pagination.tsx +0 -127
- dulus-0.2.60/sandbox/src/components/ui/popover.tsx +0 -48
- dulus-0.2.60/sandbox/src/components/ui/progress.tsx +0 -29
- dulus-0.2.60/sandbox/src/components/ui/radio-group.tsx +0 -45
- dulus-0.2.60/sandbox/src/components/ui/resizable.tsx +0 -54
- dulus-0.2.60/sandbox/src/components/ui/scroll-area.tsx +0 -58
- dulus-0.2.60/sandbox/src/components/ui/select.tsx +0 -188
- dulus-0.2.60/sandbox/src/components/ui/separator.tsx +0 -28
- dulus-0.2.60/sandbox/src/components/ui/sheet.tsx +0 -137
- dulus-0.2.60/sandbox/src/components/ui/sidebar.tsx +0 -726
- dulus-0.2.60/sandbox/src/components/ui/skeleton.tsx +0 -13
- dulus-0.2.60/sandbox/src/components/ui/slider.tsx +0 -63
- dulus-0.2.60/sandbox/src/components/ui/sonner.tsx +0 -38
- dulus-0.2.60/sandbox/src/components/ui/spinner.tsx +0 -16
- dulus-0.2.60/sandbox/src/components/ui/switch.tsx +0 -31
- dulus-0.2.60/sandbox/src/components/ui/table.tsx +0 -114
- dulus-0.2.60/sandbox/src/components/ui/tabs.tsx +0 -66
- dulus-0.2.60/sandbox/src/components/ui/textarea.tsx +0 -18
- dulus-0.2.60/sandbox/src/components/ui/toggle-group.tsx +0 -81
- dulus-0.2.60/sandbox/src/components/ui/toggle.tsx +0 -45
- dulus-0.2.60/sandbox/src/components/ui/tooltip.tsx +0 -61
- dulus-0.2.60/sandbox/src/hooks/index.ts +0 -30
- dulus-0.2.60/sandbox/src/hooks/use-mobile.ts +0 -19
- dulus-0.2.60/sandbox/src/hooks/useAutoOpenChat.ts +0 -34
- dulus-0.2.60/sandbox/src/hooks/useDulusAgents.ts +0 -51
- dulus-0.2.60/sandbox/src/hooks/useDulusChat.ts +0 -73
- dulus-0.2.60/sandbox/src/hooks/useDulusEvents.ts +0 -116
- dulus-0.2.60/sandbox/src/hooks/useDulusHealth.ts +0 -52
- dulus-0.2.60/sandbox/src/hooks/useDulusMemory.ts +0 -78
- dulus-0.2.60/sandbox/src/hooks/useDulusSkills.ts +0 -60
- dulus-0.2.60/sandbox/src/hooks/useDulusTasks.ts +0 -90
- dulus-0.2.60/sandbox/src/hooks/useFileSystem.ts +0 -330
- dulus-0.2.60/sandbox/src/hooks/useOSStore.tsx +0 -553
- dulus-0.2.60/sandbox/src/hooks/useSkillBridge.ts +0 -72
- dulus-0.2.60/sandbox/src/hooks/useSystemBattery.ts +0 -77
- dulus-0.2.60/sandbox/src/hooks/useSystemNetwork.ts +0 -56
- dulus-0.2.60/sandbox/src/hooks/useSystemVolume.ts +0 -39
- dulus-0.2.60/sandbox/src/index.css +0 -169
- dulus-0.2.60/sandbox/src/lib/dulus-api.ts +0 -398
- dulus-0.2.60/sandbox/src/lib/utils.ts +0 -6
- dulus-0.2.60/sandbox/src/main.tsx +0 -5
- dulus-0.2.60/sandbox/src/types/index.ts +0 -252
- dulus-0.2.60/sandbox/src/utils/assets.ts +0 -15
- dulus-0.2.60/webbridge/__pycache__/__init__.cpython-314.pyc +0 -0
- dulus-0.2.60/webbridge/__pycache__/core.cpython-314.pyc +0 -0
- dulus-0.2.60/webbridge/__pycache__/tools.cpython-314.pyc +0 -0
- dulus-0.2.60/webbridge/tools.py +0 -261
- {dulus-0.2.60 → dulus-3.3.4}/LICENSE +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/context.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/githook.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/marketplace.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/personas.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/plugins.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/server.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/backend/tasks.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/checkpoint/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/checkpoint/hooks.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/checkpoint/store.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/checkpoint/types.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/claude_code_watcher.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/clipboard_utils.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/cloudsave.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/common.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/active_persona.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/marketplace.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/personas.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/plugins/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/plugins/composio/plugin.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/data/tasks.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/divider.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/generate.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.60/docs/uploads → dulus-3.3.4/docs}/particle-playground.html +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/personas/index.html +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/poetry-banner.png +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-agents.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-features.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-memory.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-models.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-perms.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/spinners.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/split-pane.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/client.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/config.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/dulus_mcp/types.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/agent_bridge.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/chat_widget.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/personas.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/session_utils.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/settings_dialog.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/sidebar.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/tasks_view.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/gui/tool_panel.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/audit.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/consolidator.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/context.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/offload.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/palace.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/scan.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/sessions.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/store.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/tools.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/types.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/memory/vector_search.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/multi_agent/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/multi_agent/subagent.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/multi_agent/tools.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/plugin/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/plugin/loader.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/plugin/recommend.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/plugin/store.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/plugin/types.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/README.md +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/components.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpaper-default.jpg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/default.jpeg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/light.jpeg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/nature.jpeg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/dist/wallpapers/tech.jpeg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/eslint.config.js +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/index.html +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/info.md +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/package-lock.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/package.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/postcss.config.js +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/tailwind.config.js +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/tsconfig.app.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/tsconfig.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/tsconfig.node.json +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/sandbox/vite.config.ts +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/setup.cfg +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/skill/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/skill/builtin.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/skill/executor.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/skill/tools.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/skills.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/spinner.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/string_utils.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/subagent.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/task/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/task/store.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/task/tools.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/task/types.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_afk_yolo.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_approval_runtime.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_background_task_tools.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_background_tasks.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_clipboard_utils.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_compaction.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_diff_view.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_diff_visualization.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_display_blocks.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_export_import.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_hook_engine.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_license.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_mcp.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_memory.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_notification_manager.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_plugin.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_session_fork.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_shell_mode.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_skills.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_steer_input.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_subagent.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_task.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_think_tool.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_todo_tool.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_todo_visualization.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_tool_registry.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_voice.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tests/test_wire_events.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tmux_tools.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/tool_registry.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/ui/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/ui/input.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/ui/render.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/voice/__init__.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/voice/keyterms.py +0 -0
- {dulus-0.2.60 → dulus-3.3.4}/webchat.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version:
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 3.3.4
|
|
4
|
+
Summary: Use IA as an agent without an API key. $0. Harvest your browser session for Gemini (guest, no login), Claude.ai, Claude Code, Kimi.com, Qwen, DeepSeek — drive them like an API, no per-token billing. Plus LiteLLM (100+ paid providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, voice, OCR, MemPalace, embedded sandbox OS.
|
|
5
5
|
Author: KevRojo
|
|
6
6
|
License: GPL-3.0
|
|
7
7
|
Project-URL: Homepage, https://github.com/KevRojo/Dulus
|
|
@@ -36,28 +36,47 @@ Requires-Dist: Pillow>=10.0.0
|
|
|
36
36
|
Requires-Dist: typing-extensions>=4.10.0
|
|
37
37
|
Requires-Dist: composio>=1.0.0rc2
|
|
38
38
|
Requires-Dist: beautifulsoup4>=4.12.0
|
|
39
|
+
Requires-Dist: sentry-sdk>=2.0.0
|
|
40
|
+
Requires-Dist: pytesseract>=0.3.10
|
|
39
41
|
Provides-Extra: memory
|
|
40
42
|
Requires-Dist: mempalace>=3.3.4; extra == "memory"
|
|
41
43
|
Provides-Extra: voice
|
|
42
44
|
Requires-Dist: sounddevice; extra == "voice"
|
|
45
|
+
Requires-Dist: elevenlabs>=1.0.0; extra == "voice"
|
|
43
46
|
Provides-Extra: webbridge
|
|
44
47
|
Requires-Dist: playwright>=1.40.0; extra == "webbridge"
|
|
48
|
+
Provides-Extra: litellm
|
|
49
|
+
Requires-Dist: litellm>=1.50.0; extra == "litellm"
|
|
50
|
+
Provides-Extra: ocr
|
|
51
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "ocr"
|
|
52
|
+
Requires-Dist: Pillow>=10.0.0; extra == "ocr"
|
|
53
|
+
Provides-Extra: ocr-deep
|
|
54
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "ocr-deep"
|
|
55
|
+
Requires-Dist: Pillow>=10.0.0; extra == "ocr-deep"
|
|
56
|
+
Requires-Dist: easyocr>=1.7.0; extra == "ocr-deep"
|
|
45
57
|
Provides-Extra: full
|
|
46
58
|
Requires-Dist: mempalace>=3.3.4; extra == "full"
|
|
47
59
|
Requires-Dist: sounddevice; extra == "full"
|
|
60
|
+
Requires-Dist: elevenlabs>=1.0.0; extra == "full"
|
|
48
61
|
Requires-Dist: playwright>=1.40.0; extra == "full"
|
|
62
|
+
Requires-Dist: litellm>=1.50.0; extra == "full"
|
|
63
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "full"
|
|
49
64
|
Dynamic: license-file
|
|
50
65
|
|
|
51
66
|
# ▲ DULUS
|
|
52
|
-
|
|
53
|
-
>
|
|
67
|
+
>
|
|
68
|
+
> `pip install dulus` → press Enter → working IA in 30 seconds. Try it.
|
|
54
69
|
|
|
55
70
|
SET /sticky_input ON since the first run for the best experience!
|
|
56
71
|
|
|
57
72
|
<p align="center">
|
|
58
|
-
|
|
73
|
+
|
|
74
|
+
<img width="700" height="665" alt="mascot-hero" src="https://github.com/user-attachments/assets/8b122834-552c-4bd4-b46d-3e17deb74ab5" />
|
|
75
|
+
|
|
59
76
|
</p>
|
|
60
77
|
|
|
78
|
+
<p align="center"><i>The Dulus (Cigua Palmera) — Dominican national bird. Named after the bird, not the rocket.</i></p>
|
|
79
|
+
|
|
61
80
|
<p align="center">
|
|
62
81
|
<a href="#quick-start"><b>Quick Start</b></a> ·
|
|
63
82
|
<a href="#models"><b>Models</b></a> ·
|
|
@@ -72,12 +91,31 @@ SET /sticky_input ON since the first run for the best experience!
|
|
|
72
91
|
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
|
|
73
92
|
<img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
|
|
74
93
|
<img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
|
|
75
|
-
<img src="https://img.shields.io/badge/version-
|
|
76
|
-
<img src="https://img.shields.io/badge/providers-
|
|
77
|
-
<img src="https://img.shields.io/badge/tools-
|
|
94
|
+
<img src="https://img.shields.io/badge/version-v3.3.3-ff6b1f?style=flat-square&labelColor=07070a" alt="version"/>
|
|
95
|
+
<img src="https://img.shields.io/badge/providers-100%2B%20via%20LiteLLM-ff6b1f?style=flat-square&labelColor=07070a" alt="providers"/>
|
|
96
|
+
<img src="https://img.shields.io/badge/tools-30%2B-ff6b1f?style=flat-square&labelColor=07070a" alt="tools"/>
|
|
78
97
|
<img src="https://img.shields.io/badge/tests-263+-ff6b1f?style=flat-square&labelColor=07070a" alt="tests"/>
|
|
98
|
+
<a href="https://x.com/KevRojo"><img src="https://img.shields.io/badge/x-%40KevRojo-ff6b1f?style=flat-square&labelColor=07070a&logo=x" alt="x"/></a>
|
|
79
99
|
</p>
|
|
80
100
|
|
|
101
|
+
<p align="center">
|
|
102
|
+
🌐 <b>Multilingual</b> ·
|
|
103
|
+
<a href="docs/README_EN.md">English</a> ·
|
|
104
|
+
<a href="docs/README_ES.md">Español</a> ·
|
|
105
|
+
<a href="docs/README_FR.md">Français</a> ·
|
|
106
|
+
<a href="docs/README_ZH.md">中文</a> ·
|
|
107
|
+
<a href="docs/README_JA.md">日本語</a> ·
|
|
108
|
+
<a href="docs/README_KO.md">한국어</a> ·
|
|
109
|
+
<a href="docs/README_PT.md">Português</a> ·
|
|
110
|
+
<a href="docs/README_RU.md">Русский</a> ·
|
|
111
|
+
<a href="docs/README_AR.md">العربية</a>
|
|
112
|
+
</p>
|
|
113
|
+
|
|
114
|
+
> **Official X / creator handle:** [@KevRojo](https://x.com/KevRojo) — that's me, the only contributor to this repo. Any other account claiming to be Dulus is a copycat.
|
|
115
|
+
>
|
|
116
|
+
> **$DULUS AI token Solana):** [`9R8rrjXxcfQPmLTCLhmVpjr2uesjjkcgkinE6Lwdpump`](https://dexscreener.com/solana/9R8rrjXxcfQPmLTCLhmVpjr2uesjjkcgkinE6Lwdpump)
|
|
117
|
+
|
|
118
|
+
-----
|
|
81
119
|
<p align="center">
|
|
82
120
|
<code>pip install dulus</code>
|
|
83
121
|
</p>
|
|
@@ -85,26 +123,33 @@ SET /sticky_input ON since the first run for the best experience!
|
|
|
85
123
|
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
86
124
|
|
|
87
125
|
<p align="center">
|
|
88
|
-
<a href="https://
|
|
126
|
+
<a href="https://dulus.ai/"><b>🌐 Visit the Dulus website →</b></a><br>
|
|
89
127
|
<sub>The site covers features, demos, and details not documented in this README.</sub>
|
|
90
128
|
</p>
|
|
91
129
|
|
|
92
130
|
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
93
131
|
|
|
94
|
-
## What
|
|
95
|
-
Talent cant be copied.
|
|
132
|
+
## 🔥 What's new
|
|
96
133
|
|
|
97
|
-
|
|
98
|
-
Use claude-code as an API without the new 'extra-usage' wall <3
|
|
134
|
+
> Full changelog: [`docs/news.md`](docs/news.md) · Inside the REPL: `/news`
|
|
99
135
|
|
|
100
|
-
|
|
136
|
+
- **Dulus Agent — Telegram communities.** Dulus evolved from a CLI tool into a live AI agent inside Telegram groups. The first fully autonomous AI moderating and conversing in real communities — not a bot, not a filter, a real agent. Groups pay in $DULUS to activate him. We host Dulus for them — that's the business model. The CLI stays free forever. This is the paid layer. 🦅🇩🇴
|
|
101
137
|
|
|
102
|
-
|
|
138
|
+
- **v0.2.93 — IA WITHOUT AN API KEY, FIRST-RUN.** 🦅 The welcome wizard now offers, by default, to open Gemini in a browser and capture its **guest session** — no Google login, no API key, no credit card. From `pip install` to working IA in 30 seconds. Same flow works for Claude.ai / Kimi.com / Qwen / DeepSeek if you have those accounts. This was Dulus's ace under the sleeve. Now it's the front door.
|
|
139
|
+
- **v0.2.92** — **`/lang` command.** 34 ISO codes + free-form descriptors. `/lang zh`, `/lang ja`, `/lang pt-br`, `/lang "speak as my gym tutor"`, `/lang "tigre de calle dominicano"`, `/lang "Yoda"`. The model role-plays the voice across the whole session. Triggered after Doubao (China's biggest IA assistant) started referring traffic to the repo.
|
|
140
|
+
- **v0.2.91** — **CORS on the daemon.** The Android Sandbox APK now connects every app live — same daemon, finally cross-origin reachable.
|
|
141
|
+
- **v0.2.89** — **Sandbox embedded INSIDE the desktop GUI.** Click `🦅 Sandbox` in the GUI Web tab → the Dulus OS renders inside the content frame via pywebview subprocess + Win32 `SetParent` reparent. Not a popup. Inside the frame.
|
|
142
|
+
- **v0.2.89** — **Local OCR shipped first-class.** `/ocr` + `ExtractTextFromImage` tool, `WebBridgeScreenshot` auto-OCRs, `/img` sends image + verbatim OCR text together. Zero vision-model tokens for receipts / code screenshots / error stacks.
|
|
143
|
+
- **v0.2.89** — **`kepano/obsidian-skills` bundled.** Dulus writes Obsidian-flavored markdown by default. Open `~/.dulus/memory/` as an Obsidian vault → instant graph view.
|
|
144
|
+
- **v0.2.88** — **LiteLLM gateway: one provider entry, 100+ backends.** OpenRouter, Groq, Together, Bedrock, Vertex, Cohere, Perplexity, xAI, Mistral, Fireworks, Anyscale, Replicate, Azure, DeepInfra — the welcome wizard auto-installs the package and asks for the right per-backend key.
|
|
145
|
+
- **v0.2.85** — **Slim wheel 11.4 MB → 2.5 MB.** Smaller than the original baseline.
|
|
103
146
|
|
|
147
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
104
148
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
149
|
+
## What is this
|
|
150
|
+
|
|
151
|
+
Dulus Reduce your IA costs by 60% parsing webchats and claude-code directly. Write poetry while Anthropic only see text.
|
|
152
|
+
Use claude-code as an API without the new 'extra-usage' wall <3
|
|
108
153
|
|
|
109
154
|
|
|
110
155
|
Another reminder of a Dulus magic spell:
|
|
@@ -117,53 +162,79 @@ them:
|
|
|
117
162
|
|
|
118
163
|
dulus get the prices of NVDA, TSLA, SP500:
|
|
119
164
|
|
|
120
|
-
<img width="2094" height="1365" alt="image" src="https://github.com/user-attachments/assets/1551d651-9d69-4607-bac0-4adbde645783" />
|
|
121
|
-
|
|
122
165
|
Be creative!!!
|
|
123
166
|
|
|
124
167
|
Dulus adapt any python repository <3
|
|
168
|
+
---
|
|
125
169
|
|
|
126
|
-
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/
|
|
170
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/sec-quickstart.svg" alt="Quick Start" width="100%"></p>
|
|
127
171
|
|
|
172
|
+
## Quick Start
|
|
128
173
|
|
|
129
|
-
|
|
174
|
+
### Option A — One-liner installer (recommended)
|
|
130
175
|
|
|
131
|
-
|
|
132
|
-
> **v0.2.22 — May 9, 2026** — `/bg start` spawns one detached Dulus daemon that serves CLI (IPC), Web (browser at `127.0.0.1:5000`), and Telegram simultaneously — all sharing the same session. WebChat now defaults to **loopback-only** (opt-in to LAN exposure with `/webchat lan on`).
|
|
133
|
-
> **v0.2.21 — May 9, 2026** — Console-freeze fix: system prompt now tells the model SleepTimer is for user reminders only — pauses inside command pipelines must use `sleep N` inside the Bash command itself.
|
|
134
|
-
> **v0.2.20 — May 9, 2026** — Windows IPC port-collision fix: switched to `SO_EXCLUSIVEADDRUSE` so a second Dulus instance correctly cedes the port and acts as client. End-to-end tested.
|
|
135
|
-
> **v0.2.19 — May 9, 2026** — Shared sessions via tiny TCP socket on `127.0.0.1:5151`. `dulus "do X"` from any shell forwards into the running REPL/daemon — same history, memory, plugins. 80 lines of plain socket code instead of a daemon manager + IPC framework.
|
|
136
|
-
> **v0.2.18 — May 9, 2026** — `beautifulsoup4` added as default dep for web scraping flows.
|
|
137
|
-
> **v0.2.17 — May 9, 2026** — Mega-release: Composio plugin bundled (1000+ apps, no MCP), `/skill list` interactive picker (awesome / composio / local), awesome skills live from GitHub (no Claude Code needed), lite mode finally functional, system prompt rewritten in English, `VERSION` auto-syncs from pyproject.
|
|
138
|
-
> **v0.2.16 — May 9, 2026** — MemPalace per-session dedup. No more re-injecting the same memory every turn — content-hash cache saves ~8K tokens in a 20-turn conversation. `/mem_palace reset` clears it on demand.
|
|
139
|
-
> **v0.2.15 — May 9, 2026** — Banner image hosted locally so PyPI renders it correctly.
|
|
140
|
-
> **v0.2.14 — May 9, 2026** — Multi-user Telegram bridge: `telegram_chat_ids: "123,456,,"` supported. Replies route to the user who sent each message.
|
|
141
|
-
> **v0.2.13 — May 8, 2026** — Internal robustness fixes for Ollama streaming.
|
|
142
|
-
> Type `/news` to see the full changelog.
|
|
176
|
+
**Linux / macOS / WSL / Termux:**
|
|
143
177
|
|
|
144
|
-
|
|
178
|
+
```bash
|
|
179
|
+
curl -fsSL https://raw.githubusercontent.com/KevRojo/Dulus/main/install.sh | bash
|
|
180
|
+
```
|
|
145
181
|
|
|
146
|
-
|
|
182
|
+
**Windows (PowerShell):**
|
|
147
183
|
|
|
148
|
-
|
|
184
|
+
```powershell
|
|
185
|
+
irm https://raw.githubusercontent.com/KevRojo/Dulus/main/install.ps1 | iex
|
|
186
|
+
```
|
|
149
187
|
|
|
150
|
-
|
|
188
|
+
The installer detects your OS, package manager, Python version, and WSLg
|
|
189
|
+
audio bridge, then asks which profile you want:
|
|
151
190
|
|
|
191
|
+
- **`full`** — everything: voice (Whisper + PortAudio), browser tools
|
|
192
|
+
(Playwright), MemPalace semantic memory, tmux, WSL audio bridge
|
|
193
|
+
(~1.5 GB).
|
|
194
|
+
- **`standard`** — REPL + webchat + tmux daemon + Telegram bridge
|
|
195
|
+
(~300 MB).
|
|
196
|
+
- **`basic`** — bare `pip install dulus` for servers / minimal sandboxes
|
|
197
|
+
(~150 MB).
|
|
198
|
+
- **`custom`** — toggle each feature one by one.
|
|
152
199
|
|
|
153
|
-
|
|
200
|
+
It installs only what's missing and never silently runs `sudo` — you
|
|
201
|
+
choose between auto-install, "show me the command", or skip.
|
|
154
202
|
|
|
155
|
-
|
|
203
|
+
Power-user flags:
|
|
156
204
|
|
|
157
|
-
|
|
205
|
+
```bash
|
|
206
|
+
# Preview without changing anything
|
|
207
|
+
curl -fsSL .../install.sh | bash -s -- --dry-run
|
|
158
208
|
|
|
209
|
+
# Non-interactive install (CI / scripts)
|
|
210
|
+
curl -fsSL .../install.sh | bash -s -- --profile=full --pipx
|
|
159
211
|
|
|
160
|
-
|
|
212
|
+
# Latest pre-release
|
|
213
|
+
curl -fsSL .../install.sh | bash -s -- --pre
|
|
214
|
+
```
|
|
161
215
|
|
|
162
|
-
|
|
216
|
+
```powershell
|
|
217
|
+
# PowerShell equivalents
|
|
218
|
+
irm .../install.ps1 | iex
|
|
219
|
+
$env:DULUS_PROFILE='standard'; irm .../install.ps1 | iex # preset via env
|
|
220
|
+
.\install.ps1 -DryRun -Profile full # local run
|
|
221
|
+
```
|
|
163
222
|
|
|
164
|
-
|
|
223
|
+
### Option B — Docker (zero local Python setup)
|
|
165
224
|
|
|
225
|
+
```bash
|
|
226
|
+
# 1. Grab the compose file + env template
|
|
227
|
+
curl -fsSLO https://raw.githubusercontent.com/KevRojo/Dulus/main/docker-compose.yml
|
|
228
|
+
curl -fsSLO https://raw.githubusercontent.com/KevRojo/Dulus/main/.env.example
|
|
229
|
+
mv .env.example .env # then add your API keys
|
|
230
|
+
|
|
231
|
+
# 2. Pull and run (WebChat at http://localhost:5050 — shifted off 5000
|
|
232
|
+
# so it doesn't collide with a native Dulus install on the same host)
|
|
233
|
+
docker compose up -d
|
|
166
234
|
|
|
235
|
+
# 3. Or jump into the REPL inside the container
|
|
236
|
+
docker compose exec dulus dulus
|
|
237
|
+
```
|
|
167
238
|
|
|
168
239
|
### One-liner
|
|
169
240
|
|
|
@@ -174,12 +245,7 @@ pip install "dulus[memory]" && dulus # +MemPalace per-turn memory (pulls chro
|
|
|
174
245
|
|
|
175
246
|
That's it. Dulus prompts you for a key on first run. The `[memory]` extra pulls in `mempalace` and its `chromadb` chain — skip it on Android/termux or anywhere wheels for `numpy`/`onnxruntime` aren't available; the CLI still boots and chats fine without it.
|
|
176
247
|
|
|
177
|
-
|
|
178
|
-
-----
|
|
179
|
-
|
|
180
|
-
<img width="2593" height="1044" alt="image" src="https://github.com/user-attachments/assets/114b9ab1-e49f-490a-97b8-872f70b859bd" />
|
|
181
|
-
|
|
182
|
-
-----
|
|
248
|
+
---
|
|
183
249
|
|
|
184
250
|
### From source (hacking on Dulus itself)
|
|
185
251
|
|
|
@@ -227,8 +293,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
|
|
|
227
293
|
|
|
228
294
|
---
|
|
229
295
|
|
|
230
|
-
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/terminal-boot.svg" alt="Dulus booting into session" width="100%"></p>
|
|
231
|
-
|
|
232
296
|
<p align="center"><sub>↑ session boot. soul loaded, gold memory warm, shell sniffed. the little circles are real buttons on your Mac.</sub></p>
|
|
233
297
|
|
|
234
298
|
### 💻 Dulus OS (Sandbox)
|
|
@@ -237,12 +301,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
|
|
|
237
301
|
|
|
238
302
|
<img width="1309" height="778" alt="image" src="https://github.com/user-attachments/assets/1c627990-7f87-489b-a0a2-14ad62fe2bb8" />
|
|
239
303
|
|
|
240
|
-
---
|
|
241
|
-
<img width="1608" height="1903" alt="image" src="https://github.com/user-attachments/assets/450defa2-437b-470d-891a-9285d9e5e312" />
|
|
242
|
-
|
|
243
|
-
---
|
|
244
|
-
<img width="3763" height="1975" alt="image" src="https://github.com/user-attachments/assets/10752aa2-6837-4097-a9a8-e02938992174" />
|
|
245
|
-
|
|
246
304
|
---
|
|
247
305
|
The dulus sandbox is an early feature, expect bugs
|
|
248
306
|
|
|
@@ -330,31 +388,33 @@ dulus --model nvidia-web/deepseek-r1
|
|
|
330
388
|
|
|
331
389
|
| Model | Type | ID |
|
|
332
390
|
|---|---|---|
|
|
333
|
-
| **DeepSeek
|
|
334
|
-
| **
|
|
335
|
-
| **
|
|
336
|
-
| **
|
|
337
|
-
| **
|
|
338
|
-
| **Mistral Nemotron** | NVIDIA-tuned | `nvidia-web/mistral-nemotron` |
|
|
339
|
-
| **
|
|
340
|
-
| **
|
|
341
|
-
| **
|
|
342
|
-
| **Llama
|
|
343
|
-
| **
|
|
344
|
-
| **
|
|
345
|
-
| **
|
|
346
|
-
| **
|
|
347
|
-
|
|
348
|
-
**Automatic fallback
|
|
391
|
+
| **DeepSeek V4 Flash** | Instruct | `nvidia-web/deepseek-ai/deepseek-v4-flash` |
|
|
392
|
+
| **GLM-4.7** | Zhipu AI | `nvidia-web/z-ai/glm-4.7` |
|
|
393
|
+
| **GLM-5.1** | Zhipu AI | `nvidia-web/z-ai/glm-5.1` |
|
|
394
|
+
| **MiniMax M2.7** | Text + Vision | `nvidia-web/minimaxai/minimax-m2.7` |
|
|
395
|
+
| **Kimi K2 Instruct** | Long context | `nvidia-web/moonshotai/kimi-k2-instruct` |
|
|
396
|
+
| **Mistral Nemotron** | NVIDIA-tuned | `nvidia-web/mistralai/mistral-nemotron` |
|
|
397
|
+
| **Seed OSS 36B** | ByteDance | `nvidia-web/bytedance/seed-oss-36b-instruct` |
|
|
398
|
+
| **Solar 10.7B** | Upstage | `nvidia-web/upstage/solar-10.7b-instruct` |
|
|
399
|
+
| **Step 3.5 Flash** | StepFun | `nvidia-web/stepfun-ai/step-3.5-flash` |
|
|
400
|
+
| **Llama 3.3 70B** | Meta | `nvidia-web/meta/llama-3.3-70b-instruct` |
|
|
401
|
+
| **Kimi K2.5** | Long context | `nvidia-web/moonshotai/kimi-k2.5` |
|
|
402
|
+
| **DeepSeek R1** | Reasoning | `nvidia-web/deepseek-ai/deepseek-r1` |
|
|
403
|
+
| **Llama Nemotron 70B** | NVIDIA reasoning | `nvidia-web/nvidia/llama-3.1-nemotron-70b-instruct` |
|
|
404
|
+
| **Qwen2.5 72B** | Alibaba | `nvidia-web/qwen/qwen2.5-72b-instruct` |
|
|
405
|
+
|
|
406
|
+
**Automatic fallback** — when a model hits its rate limit Dulus switches to the next one automatically. The default chain is built-in; override it in `~/.dulus/nvidia-providers.json`:
|
|
349
407
|
|
|
350
408
|
```json
|
|
351
409
|
{
|
|
352
|
-
"
|
|
353
|
-
"deepseek-
|
|
354
|
-
"kimi-k2
|
|
355
|
-
"
|
|
356
|
-
"
|
|
357
|
-
"
|
|
410
|
+
"fallback_models": [
|
|
411
|
+
"deepseek-ai/deepseek-v4-flash",
|
|
412
|
+
"moonshotai/kimi-k2-instruct",
|
|
413
|
+
"mistralai/mistral-nemotron",
|
|
414
|
+
"meta/llama-3.3-70b-instruct",
|
|
415
|
+
"deepseek-ai/deepseek-r1",
|
|
416
|
+
"nvidia/llama-3.1-nemotron-70b-instruct",
|
|
417
|
+
"qwen/qwen2.5-72b-instruct"
|
|
358
418
|
]
|
|
359
419
|
}
|
|
360
420
|
```
|
|
@@ -381,23 +441,6 @@ Dulus's **Auto-Adapter** reads a random Python repo and figures out its tools on
|
|
|
381
441
|
|
|
382
442
|
Adapt-and-install runs in under a second. New tools register **live**, no restart.
|
|
383
443
|
|
|
384
|
-
Example adapting Sherlock repo:
|
|
385
|
-
|
|
386
|
-
<img width="1765" height="166" alt="image" src="https://github.com/user-attachments/assets/c67dc15e-a2e3-4575-be34-8c9b54045510" />
|
|
387
|
-
|
|
388
|
-
-----
|
|
389
|
-
|
|
390
|
-
<img width="1327" height="751" alt="image" src="https://github.com/user-attachments/assets/676a0ef5-3699-4960-98a4-14a55fbef081" />
|
|
391
|
-
|
|
392
|
-
-----
|
|
393
|
-
|
|
394
|
-
<img width="885" height="301" alt="image" src="https://github.com/user-attachments/assets/52c02444-2606-41dc-bc33-ebe26ac41e5e" />
|
|
395
|
-
|
|
396
|
-
----
|
|
397
|
-
|
|
398
|
-
<img width="1006" height="271" alt="image" src="https://github.com/user-attachments/assets/d823428e-6344-4414-bf42-14ed3128f763" />
|
|
399
|
-
|
|
400
|
-
|
|
401
444
|
## MCP
|
|
402
445
|
|
|
403
446
|
Drop a `.mcp.json` in your project root (or `~/.dulus/mcp.json` for user-wide):
|
|
@@ -463,6 +506,32 @@ pip install sounddevice faster-whisper numpy
|
|
|
463
506
|
|
|
464
507
|
Then `/voice` in the REPL. Offline. Supports `/voice lang zh` and `/voice device` for mic selection.
|
|
465
508
|
|
|
509
|
+
**Linux / WSL extra step:** `sounddevice` is a Python binding for the
|
|
510
|
+
PortAudio C library, which isn't bundled with the wheel. If you see
|
|
511
|
+
`PortAudio library not found` — install the system lib first:
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
sudo apt install libportaudio2 portaudio19-dev libasound2-dev
|
|
515
|
+
pip install sounddevice --upgrade --force-reinstall
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
Note: `pip install portaudio` will always fail — there is no PyPI
|
|
519
|
+
package by that name, only the apt one above.
|
|
520
|
+
|
|
521
|
+
### Linux / WSL — tkinter for the GUI / webchat
|
|
522
|
+
|
|
523
|
+
The desktop GUI (`dulus-gui`) needs **tkinter**, which is bundled with
|
|
524
|
+
Python on Windows/macOS but ships as a separate apt package on Debian/
|
|
525
|
+
Ubuntu/WSL. If you see `No module named 'tkinter'`:
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
sudo apt install python3-tk
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
Headless WSL/server users can skip this — `dulus[full]` works without
|
|
532
|
+
tkinter for the REPL and webchat HTTP server thanks to lazy GUI imports
|
|
533
|
+
(0.2.76+).
|
|
534
|
+
|
|
466
535
|
## Telegram bridge
|
|
467
536
|
|
|
468
537
|
```
|
|
@@ -663,6 +732,8 @@ dulus/
|
|
|
663
732
|
└── tests/ # 263+ unit tests
|
|
664
733
|
```
|
|
665
734
|
|
|
735
|
+
> **Interactive dependency graph & API docs:** [`docs/api.html`](docs/api.html) — open it in a browser to explore the full module graph (D3.js, zoom/pan, clusters by package).
|
|
736
|
+
|
|
666
737
|
---
|
|
667
738
|
|
|
668
739
|
## FAQ
|
|
@@ -692,6 +763,39 @@ git diff | dulus -p "write a commit message"
|
|
|
692
763
|
|
|
693
764
|
---
|
|
694
765
|
|
|
766
|
+
## $DULUS — Token Utility
|
|
767
|
+
|
|
768
|
+
The token isn't decoration. It's the fuel layer for everything Dulus is building.
|
|
769
|
+
|
|
770
|
+
| Phase | Utility |
|
|
771
|
+
|---|---|
|
|
772
|
+
| **Now** | Community ownership. Creator-fee rewards locked on-chain to the builder. Alignment over extraction. |
|
|
773
|
+
| **Business v1** | $DULUS holders get early access + discounted seats on the Dulus Business tier (multi-user workspaces, cloud-hosted instances, shared MemPalace). |
|
|
774
|
+
| **Credits** | Pay for Dulus Business API credits with $DULUS — provider costs, inference minutes, premium model usage. |
|
|
775
|
+
| **Deployments** | Spin up a cloud Dulus instance and pay the hosting with $DULUS. No fiat friction, no middleman. |
|
|
776
|
+
| **Subscriptions** | Monthly Dulus Pro subscription payable in $DULUS. Hold enough → automatic fee discount tier. |
|
|
777
|
+
| **Governance** | Top holders vote on feature priority and plugin marketplace policies. The flock decides. |
|
|
778
|
+
|
|
779
|
+
> The open-source REPL stays free forever. $DULUS is the key to the business layer — not a gate on what already exists.
|
|
780
|
+
|
|
781
|
+
**A message to the community —**
|
|
782
|
+
|
|
783
|
+
I want to talk about the token. Honestly. No hype.
|
|
784
|
+
|
|
785
|
+
I didn't launch it to get rich. The community launched it first, and when I saw early believers exposed without the actual builder behind it, I stepped in. I bought my position using the contract's own creator rewards. Zero personal capital deployed. I haven't sold a single token.
|
|
786
|
+
|
|
787
|
+
The open-source project isn't going anywhere. The REPL, the tools, the free model tier — that stays free forever. But Dulus is growing into a business layer: cloud-hosted instances, multi-user workspaces, model credits, managed deployments. And that business layer is going to run on $DULUS.
|
|
788
|
+
|
|
789
|
+
The token will be how you pay for Pro subscriptions. How you buy inference credits. How you spin up a cloud instance without fiat friction. Holders with enough weight get automatic tier discounts. And eventually — the flock votes: top holders decide feature priority and plugin marketplace policies.
|
|
790
|
+
|
|
791
|
+
This isn't a promise. It's the architecture. That's how I've designed it.
|
|
792
|
+
|
|
793
|
+
We keep flying. 🦅🇩🇴
|
|
794
|
+
|
|
795
|
+
— KevRojo / [@KevRojo](https://x.com/KevRojo)
|
|
796
|
+
|
|
797
|
+
---
|
|
798
|
+
|
|
695
799
|
## License
|
|
696
800
|
|
|
697
801
|
GPLv3. Fork it, modify it, redistribute it — but keep it open. Derivative works must stay under GPLv3. Just don't ship `--accept-all` as the default.
|
|
@@ -704,6 +808,7 @@ If Dulus saved you tokens, time, or sanity — throw some sats:
|
|
|
704
808
|
```
|
|
705
809
|
BTC: 1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN
|
|
706
810
|
```
|
|
811
|
+
On x: @KevRojo
|
|
707
812
|
|
|
708
813
|
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
709
814
|
|