dulus 0.2.56__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-3.3.4/MANIFEST.in +7 -0
- {dulus-0.2.56 → dulus-3.3.4}/PKG-INFO +205 -97
- dulus-0.2.56/dulus.egg-info/PKG-INFO → dulus-3.3.4/README.md +185 -142
- {dulus-0.2.56 → dulus-3.3.4}/agent.py +61 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/agents_bridge.py +8 -3
- {dulus-0.2.56 → dulus-3.3.4}/backend/compressor.py +1 -1
- {dulus-0.2.56 → dulus-3.3.4}/batch_api.py +165 -0
- {dulus-0.2.56 → dulus-3.3.4}/compaction.py +280 -40
- {dulus-0.2.56 → dulus-3.3.4}/config.py +12 -3
- {dulus-0.2.56 → dulus-3.3.4}/context.py +101 -2
- {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/composio_plugin/tool_generator.py +2 -2
- {dulus-0.2.56 → 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-0.2.56 → dulus-3.3.4/docs}/README.md +223 -46
- 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.56 → dulus-3.3.4}/docs/dashboard/index.html +5 -8
- dulus-3.3.4/docs/dulus-bird.png +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/hero.svg +4 -3
- {dulus-0.2.56 → dulus-3.3.4}/docs/index.html +1686 -325
- {dulus-0.2.56 → dulus-3.3.4}/docs/news.md +40 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/preview.html +1 -1
- dulus-3.3.4/dulus.egg-info/PKG-INFO +817 -0
- dulus-3.3.4/dulus.egg-info/SOURCES.txt +258 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/requires.txt +22 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/top_level.txt +7 -1
- {dulus-0.2.56 → dulus-3.3.4}/dulus.py +2196 -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.56 → dulus-3.3.4}/gui/themes.py +31 -0
- {dulus-0.2.56 → dulus-3.3.4}/input.py +66 -9
- {dulus-0.2.56 → dulus-3.3.4}/license_manager.py +1 -1
- {dulus-0.2.56 → dulus-3.3.4}/offload_helper.py +58 -13
- dulus-3.3.4/personality_config.py +353 -0
- {dulus-0.2.56 → dulus-3.3.4}/plugin/autoadapter.py +84 -5
- {dulus-0.2.56 → dulus-3.3.4}/providers.py +1559 -272
- {dulus-0.2.56 → dulus-3.3.4}/pyproject.toml +47 -7
- {dulus-0.2.56 → 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.56 → dulus-3.3.4}/skill/clawhub.py +198 -0
- {dulus-0.2.56 → dulus-3.3.4}/skill/loader.py +36 -6
- dulus-3.3.4/soul.py +450 -0
- {dulus-0.2.56 → dulus-3.3.4}/tmux_offloader.py +23 -6
- {dulus-0.2.56 → dulus-3.3.4}/tools.py +226 -21
- {dulus-0.2.56 → dulus-3.3.4}/voice/audio_utils.py +25 -9
- {dulus-0.2.56 → dulus-3.3.4}/voice/recorder.py +8 -1
- {dulus-0.2.56 → dulus-3.3.4}/voice/stt.py +71 -23
- {dulus-0.2.56 → dulus-3.3.4}/voice/tts.py +93 -1
- dulus-3.3.4/voice/wake_word.py +429 -0
- dulus-3.3.4/webbridge/__init__.py +5 -0
- dulus-3.3.4/webbridge/core.py +694 -0
- dulus-3.3.4/webbridge/tools.py +453 -0
- {dulus-0.2.56 → dulus-3.3.4}/webchat_server.py +117 -23
- dulus-3.3.4/welcome.py +675 -0
- dulus-0.2.56/MANIFEST.in +0 -3
- dulus-0.2.56/data/context.json +0 -147
- dulus-0.2.56/docs/README.md +0 -510
- dulus-0.2.56/docs/api.html +0 -2894
- dulus-0.2.56/docs/architecture.md +0 -374
- dulus-0.2.56/docs/particle-playground.html +0 -328
- dulus-0.2.56/dulus.egg-info/SOURCES.txt +0 -359
- dulus-0.2.56/dulus_gui.py +0 -387
- dulus-0.2.56/gui/__init__.py +0 -18
- dulus-0.2.56/gui/main_window.py +0 -485
- dulus-0.2.56/sandbox/public/wallpaper-default.jpg +0 -0
- dulus-0.2.56/sandbox/public/wallpapers/default.jpeg +0 -0
- dulus-0.2.56/sandbox/public/wallpapers/light.jpeg +0 -0
- dulus-0.2.56/sandbox/public/wallpapers/nature.jpeg +0 -0
- dulus-0.2.56/sandbox/public/wallpapers/tech.jpeg +0 -0
- dulus-0.2.56/sandbox/src/App.tsx +0 -241
- dulus-0.2.56/sandbox/src/apps/AgentMonitor.tsx +0 -249
- dulus-0.2.56/sandbox/src/apps/ApiTester.tsx +0 -479
- dulus-0.2.56/sandbox/src/apps/AppRouter.tsx +0 -197
- dulus-0.2.56/sandbox/src/apps/ArchiveManager.tsx +0 -360
- dulus-0.2.56/sandbox/src/apps/AsciiArt.tsx +0 -393
- dulus-0.2.56/sandbox/src/apps/Base64Tool.tsx +0 -364
- dulus-0.2.56/sandbox/src/apps/Browser.tsx +0 -568
- dulus-0.2.56/sandbox/src/apps/Calculator.tsx +0 -358
- dulus-0.2.56/sandbox/src/apps/Calendar.tsx +0 -562
- dulus-0.2.56/sandbox/src/apps/Chat.tsx +0 -319
- dulus-0.2.56/sandbox/src/apps/Chess.tsx +0 -570
- dulus-0.2.56/sandbox/src/apps/Clock.tsx +0 -565
- dulus-0.2.56/sandbox/src/apps/CodeEditor.tsx +0 -467
- dulus-0.2.56/sandbox/src/apps/ColorPalette.tsx +0 -386
- dulus-0.2.56/sandbox/src/apps/ColorPicker.tsx +0 -359
- dulus-0.2.56/sandbox/src/apps/Contacts.tsx +0 -238
- dulus-0.2.56/sandbox/src/apps/DocumentViewer.tsx +0 -275
- dulus-0.2.56/sandbox/src/apps/Drawing.tsx +0 -413
- dulus-0.2.56/sandbox/src/apps/Email.tsx +0 -464
- dulus-0.2.56/sandbox/src/apps/FileManager.tsx +0 -413
- dulus-0.2.56/sandbox/src/apps/FlappyBird.tsx +0 -297
- dulus-0.2.56/sandbox/src/apps/FtpClient.tsx +0 -255
- dulus-0.2.56/sandbox/src/apps/Game2048.tsx +0 -280
- dulus-0.2.56/sandbox/src/apps/GitClient.tsx +0 -378
- dulus-0.2.56/sandbox/src/apps/ImageGallery.tsx +0 -276
- dulus-0.2.56/sandbox/src/apps/ImageViewer.tsx +0 -272
- dulus-0.2.56/sandbox/src/apps/JsonFormatter.tsx +0 -402
- dulus-0.2.56/sandbox/src/apps/MarkdownPreview.tsx +0 -293
- dulus-0.2.56/sandbox/src/apps/MatrixRain.tsx +0 -253
- dulus-0.2.56/sandbox/src/apps/MediaConverter.tsx +0 -253
- dulus-0.2.56/sandbox/src/apps/Memory.tsx +0 -269
- dulus-0.2.56/sandbox/src/apps/MemoryManager.tsx +0 -263
- dulus-0.2.56/sandbox/src/apps/Minesweeper.tsx +0 -346
- dulus-0.2.56/sandbox/src/apps/MusicPlayer.tsx +0 -306
- dulus-0.2.56/sandbox/src/apps/NetworkTools.tsx +0 -321
- dulus-0.2.56/sandbox/src/apps/Notes.tsx +0 -420
- dulus-0.2.56/sandbox/src/apps/PasswordManager.tsx +0 -212
- dulus-0.2.56/sandbox/src/apps/PhotoEditor.tsx +0 -342
- dulus-0.2.56/sandbox/src/apps/Pong.tsx +0 -349
- dulus-0.2.56/sandbox/src/apps/RegexTester.tsx +0 -432
- dulus-0.2.56/sandbox/src/apps/Reminders.tsx +0 -228
- dulus-0.2.56/sandbox/src/apps/RssReader.tsx +0 -245
- dulus-0.2.56/sandbox/src/apps/ScreenRecorder.tsx +0 -416
- dulus-0.2.56/sandbox/src/apps/Settings.tsx +0 -474
- dulus-0.2.56/sandbox/src/apps/SkillsLauncher.tsx +0 -316
- dulus-0.2.56/sandbox/src/apps/Snake.tsx +0 -274
- dulus-0.2.56/sandbox/src/apps/Solitaire.tsx +0 -445
- dulus-0.2.56/sandbox/src/apps/Spreadsheet.tsx +0 -441
- dulus-0.2.56/sandbox/src/apps/Sudoku.tsx +0 -386
- dulus-0.2.56/sandbox/src/apps/SystemMonitor.tsx +0 -360
- dulus-0.2.56/sandbox/src/apps/TaskManager.tsx +0 -392
- dulus-0.2.56/sandbox/src/apps/Terminal.tsx +0 -619
- dulus-0.2.56/sandbox/src/apps/Tetris.tsx +0 -441
- dulus-0.2.56/sandbox/src/apps/TextEditor.tsx +0 -446
- dulus-0.2.56/sandbox/src/apps/TicTacToe.tsx +0 -254
- dulus-0.2.56/sandbox/src/apps/Todo.tsx +0 -394
- dulus-0.2.56/sandbox/src/apps/VideoPlayer.tsx +0 -297
- dulus-0.2.56/sandbox/src/apps/VoiceRecorder.tsx +0 -382
- dulus-0.2.56/sandbox/src/apps/Weather.tsx +0 -462
- dulus-0.2.56/sandbox/src/apps/Whiteboard.tsx +0 -338
- dulus-0.2.56/sandbox/src/apps/registry.ts +0 -564
- dulus-0.2.56/sandbox/src/components/AppContainer.tsx +0 -26
- dulus-0.2.56/sandbox/src/components/AppLauncher.tsx +0 -241
- dulus-0.2.56/sandbox/src/components/BootSequence.tsx +0 -236
- dulus-0.2.56/sandbox/src/components/ContextMenu.tsx +0 -251
- dulus-0.2.56/sandbox/src/components/Desktop.tsx +0 -186
- dulus-0.2.56/sandbox/src/components/Dock.tsx +0 -199
- dulus-0.2.56/sandbox/src/components/LoginScreen.tsx +0 -302
- dulus-0.2.56/sandbox/src/components/NotImplemented.tsx +0 -55
- dulus-0.2.56/sandbox/src/components/NotificationCenter.tsx +0 -181
- dulus-0.2.56/sandbox/src/components/NotificationSystem.tsx +0 -136
- dulus-0.2.56/sandbox/src/components/TopPanel.tsx +0 -334
- dulus-0.2.56/sandbox/src/components/WindowFrame.tsx +0 -401
- dulus-0.2.56/sandbox/src/components/WindowManager.tsx +0 -25
- dulus-0.2.56/sandbox/src/components/ui/accordion.tsx +0 -64
- dulus-0.2.56/sandbox/src/components/ui/alert-dialog.tsx +0 -155
- dulus-0.2.56/sandbox/src/components/ui/alert.tsx +0 -66
- dulus-0.2.56/sandbox/src/components/ui/aspect-ratio.tsx +0 -11
- dulus-0.2.56/sandbox/src/components/ui/avatar.tsx +0 -51
- dulus-0.2.56/sandbox/src/components/ui/badge.tsx +0 -46
- dulus-0.2.56/sandbox/src/components/ui/breadcrumb.tsx +0 -109
- dulus-0.2.56/sandbox/src/components/ui/button-group.tsx +0 -83
- dulus-0.2.56/sandbox/src/components/ui/button.tsx +0 -62
- dulus-0.2.56/sandbox/src/components/ui/calendar.tsx +0 -220
- dulus-0.2.56/sandbox/src/components/ui/card.tsx +0 -92
- dulus-0.2.56/sandbox/src/components/ui/carousel.tsx +0 -239
- dulus-0.2.56/sandbox/src/components/ui/chart.tsx +0 -357
- dulus-0.2.56/sandbox/src/components/ui/checkbox.tsx +0 -32
- dulus-0.2.56/sandbox/src/components/ui/collapsible.tsx +0 -31
- dulus-0.2.56/sandbox/src/components/ui/command.tsx +0 -182
- dulus-0.2.56/sandbox/src/components/ui/context-menu.tsx +0 -252
- dulus-0.2.56/sandbox/src/components/ui/dialog.tsx +0 -141
- dulus-0.2.56/sandbox/src/components/ui/drawer.tsx +0 -135
- dulus-0.2.56/sandbox/src/components/ui/dropdown-menu.tsx +0 -255
- dulus-0.2.56/sandbox/src/components/ui/empty.tsx +0 -104
- dulus-0.2.56/sandbox/src/components/ui/field.tsx +0 -246
- dulus-0.2.56/sandbox/src/components/ui/form.tsx +0 -167
- dulus-0.2.56/sandbox/src/components/ui/hover-card.tsx +0 -44
- dulus-0.2.56/sandbox/src/components/ui/input-group.tsx +0 -170
- dulus-0.2.56/sandbox/src/components/ui/input-otp.tsx +0 -75
- dulus-0.2.56/sandbox/src/components/ui/input.tsx +0 -21
- dulus-0.2.56/sandbox/src/components/ui/item.tsx +0 -193
- dulus-0.2.56/sandbox/src/components/ui/kbd.tsx +0 -28
- dulus-0.2.56/sandbox/src/components/ui/label.tsx +0 -24
- dulus-0.2.56/sandbox/src/components/ui/menubar.tsx +0 -274
- dulus-0.2.56/sandbox/src/components/ui/navigation-menu.tsx +0 -168
- dulus-0.2.56/sandbox/src/components/ui/pagination.tsx +0 -127
- dulus-0.2.56/sandbox/src/components/ui/popover.tsx +0 -48
- dulus-0.2.56/sandbox/src/components/ui/progress.tsx +0 -29
- dulus-0.2.56/sandbox/src/components/ui/radio-group.tsx +0 -45
- dulus-0.2.56/sandbox/src/components/ui/resizable.tsx +0 -54
- dulus-0.2.56/sandbox/src/components/ui/scroll-area.tsx +0 -58
- dulus-0.2.56/sandbox/src/components/ui/select.tsx +0 -188
- dulus-0.2.56/sandbox/src/components/ui/separator.tsx +0 -28
- dulus-0.2.56/sandbox/src/components/ui/sheet.tsx +0 -137
- dulus-0.2.56/sandbox/src/components/ui/sidebar.tsx +0 -726
- dulus-0.2.56/sandbox/src/components/ui/skeleton.tsx +0 -13
- dulus-0.2.56/sandbox/src/components/ui/slider.tsx +0 -63
- dulus-0.2.56/sandbox/src/components/ui/sonner.tsx +0 -38
- dulus-0.2.56/sandbox/src/components/ui/spinner.tsx +0 -16
- dulus-0.2.56/sandbox/src/components/ui/switch.tsx +0 -31
- dulus-0.2.56/sandbox/src/components/ui/table.tsx +0 -114
- dulus-0.2.56/sandbox/src/components/ui/tabs.tsx +0 -66
- dulus-0.2.56/sandbox/src/components/ui/textarea.tsx +0 -18
- dulus-0.2.56/sandbox/src/components/ui/toggle-group.tsx +0 -81
- dulus-0.2.56/sandbox/src/components/ui/toggle.tsx +0 -45
- dulus-0.2.56/sandbox/src/components/ui/tooltip.tsx +0 -61
- dulus-0.2.56/sandbox/src/hooks/index.ts +0 -30
- dulus-0.2.56/sandbox/src/hooks/use-mobile.ts +0 -19
- dulus-0.2.56/sandbox/src/hooks/useAutoOpenChat.ts +0 -34
- dulus-0.2.56/sandbox/src/hooks/useDulusAgents.ts +0 -51
- dulus-0.2.56/sandbox/src/hooks/useDulusChat.ts +0 -73
- dulus-0.2.56/sandbox/src/hooks/useDulusEvents.ts +0 -116
- dulus-0.2.56/sandbox/src/hooks/useDulusHealth.ts +0 -52
- dulus-0.2.56/sandbox/src/hooks/useDulusMemory.ts +0 -78
- dulus-0.2.56/sandbox/src/hooks/useDulusSkills.ts +0 -60
- dulus-0.2.56/sandbox/src/hooks/useDulusTasks.ts +0 -90
- dulus-0.2.56/sandbox/src/hooks/useFileSystem.ts +0 -330
- dulus-0.2.56/sandbox/src/hooks/useOSStore.tsx +0 -553
- dulus-0.2.56/sandbox/src/hooks/useSkillBridge.ts +0 -72
- dulus-0.2.56/sandbox/src/hooks/useSystemBattery.ts +0 -77
- dulus-0.2.56/sandbox/src/hooks/useSystemNetwork.ts +0 -56
- dulus-0.2.56/sandbox/src/hooks/useSystemVolume.ts +0 -39
- dulus-0.2.56/sandbox/src/index.css +0 -169
- dulus-0.2.56/sandbox/src/lib/dulus-api.ts +0 -398
- dulus-0.2.56/sandbox/src/lib/utils.ts +0 -6
- dulus-0.2.56/sandbox/src/main.tsx +0 -5
- dulus-0.2.56/sandbox/src/types/index.ts +0 -252
- dulus-0.2.56/sandbox/src/utils/assets.ts +0 -15
- dulus-0.2.56/voice/wake_word.py +0 -374
- {dulus-0.2.56 → dulus-3.3.4}/LICENSE +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/context.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/githook.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/marketplace.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/personas.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/plugins.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/server.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/backend/tasks.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/checkpoint/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/checkpoint/hooks.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/checkpoint/store.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/checkpoint/types.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/claude_code_watcher.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/clipboard_utils.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/cloudsave.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/common.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/active_persona.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/marketplace.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/personas.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/plugins/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/plugins/composio/plugin.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/data/tasks.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/divider.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/generate.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.56/docs/uploads → dulus-3.3.4/docs}/particle-playground.html +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/personas/index.html +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/poetry-banner.png +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-agents.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-features.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-memory.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-models.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-perms.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/spinners.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/split-pane.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/client.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/config.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/dulus_mcp/types.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/agent_bridge.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/chat_widget.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/personas.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/session_utils.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/settings_dialog.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/sidebar.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/tasks_view.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/gui/tool_panel.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/audit.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/consolidator.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/context.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/offload.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/palace.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/scan.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/sessions.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/store.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/tools.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/types.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/memory/vector_search.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/multi_agent/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/multi_agent/subagent.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/multi_agent/tools.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/plugin/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/plugin/loader.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/plugin/recommend.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/plugin/store.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/plugin/types.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/README.md +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/components.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpaper-default.jpg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/default.jpeg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/light.jpeg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/nature.jpeg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/dist/wallpapers/tech.jpeg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/eslint.config.js +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/index.html +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/info.md +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/package-lock.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/package.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/postcss.config.js +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/tailwind.config.js +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/tsconfig.app.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/tsconfig.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/tsconfig.node.json +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/sandbox/vite.config.ts +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/setup.cfg +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/skill/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/skill/builtin.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/skill/executor.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/skill/tools.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/skills.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/spinner.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/string_utils.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/subagent.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/task/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/task/store.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/task/tools.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/task/types.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_afk_yolo.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_approval_runtime.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_background_task_tools.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_background_tasks.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_clipboard_utils.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_compaction.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_diff_view.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_diff_visualization.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_display_blocks.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_export_import.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_hook_engine.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_license.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_mcp.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_memory.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_notification_manager.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_plugin.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_session_fork.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_shell_mode.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_skills.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_steer_input.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_subagent.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_task.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_think_tool.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_todo_tool.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_todo_visualization.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_tool_registry.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_voice.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tests/test_wire_events.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tmux_tools.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/tool_registry.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/ui/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/ui/input.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/ui/render.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/voice/__init__.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/voice/keyterms.py +0 -0
- {dulus-0.2.56 → dulus-3.3.4}/webchat.py +0 -0
dulus-3.3.4/MANIFEST.in
ADDED
|
@@ -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,25 +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"
|
|
46
|
+
Provides-Extra: webbridge
|
|
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"
|
|
43
57
|
Provides-Extra: full
|
|
44
58
|
Requires-Dist: mempalace>=3.3.4; extra == "full"
|
|
45
59
|
Requires-Dist: sounddevice; extra == "full"
|
|
60
|
+
Requires-Dist: elevenlabs>=1.0.0; extra == "full"
|
|
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"
|
|
46
64
|
Dynamic: license-file
|
|
47
65
|
|
|
48
66
|
# ▲ DULUS
|
|
49
|
-
|
|
50
|
-
>
|
|
67
|
+
>
|
|
68
|
+
> `pip install dulus` → press Enter → working IA in 30 seconds. Try it.
|
|
51
69
|
|
|
52
70
|
SET /sticky_input ON since the first run for the best experience!
|
|
53
71
|
|
|
54
72
|
<p align="center">
|
|
55
|
-
|
|
73
|
+
|
|
74
|
+
<img width="700" height="665" alt="mascot-hero" src="https://github.com/user-attachments/assets/8b122834-552c-4bd4-b46d-3e17deb74ab5" />
|
|
75
|
+
|
|
56
76
|
</p>
|
|
57
77
|
|
|
78
|
+
<p align="center"><i>The Dulus (Cigua Palmera) — Dominican national bird. Named after the bird, not the rocket.</i></p>
|
|
79
|
+
|
|
58
80
|
<p align="center">
|
|
59
81
|
<a href="#quick-start"><b>Quick Start</b></a> ·
|
|
60
82
|
<a href="#models"><b>Models</b></a> ·
|
|
@@ -69,12 +91,31 @@ SET /sticky_input ON since the first run for the best experience!
|
|
|
69
91
|
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
|
|
70
92
|
<img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
|
|
71
93
|
<img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
|
|
72
|
-
<img src="https://img.shields.io/badge/version-
|
|
73
|
-
<img src="https://img.shields.io/badge/providers-
|
|
74
|
-
<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"/>
|
|
75
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>
|
|
76
99
|
</p>
|
|
77
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
|
+
-----
|
|
78
119
|
<p align="center">
|
|
79
120
|
<code>pip install dulus</code>
|
|
80
121
|
</p>
|
|
@@ -82,26 +123,33 @@ SET /sticky_input ON since the first run for the best experience!
|
|
|
82
123
|
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
83
124
|
|
|
84
125
|
<p align="center">
|
|
85
|
-
<a href="https://
|
|
126
|
+
<a href="https://dulus.ai/"><b>🌐 Visit the Dulus website →</b></a><br>
|
|
86
127
|
<sub>The site covers features, demos, and details not documented in this README.</sub>
|
|
87
128
|
</p>
|
|
88
129
|
|
|
89
130
|
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
90
131
|
|
|
91
|
-
## What
|
|
92
|
-
Talent cant be copied.
|
|
132
|
+
## 🔥 What's new
|
|
93
133
|
|
|
94
|
-
|
|
95
|
-
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`
|
|
96
135
|
|
|
97
|
-
|
|
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. 🦅🇩🇴
|
|
98
137
|
|
|
99
|
-
|
|
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.
|
|
100
146
|
|
|
147
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
101
148
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
|
105
153
|
|
|
106
154
|
|
|
107
155
|
Another reminder of a Dulus magic spell:
|
|
@@ -114,53 +162,79 @@ them:
|
|
|
114
162
|
|
|
115
163
|
dulus get the prices of NVDA, TSLA, SP500:
|
|
116
164
|
|
|
117
|
-
<img width="2094" height="1365" alt="image" src="https://github.com/user-attachments/assets/1551d651-9d69-4607-bac0-4adbde645783" />
|
|
118
|
-
|
|
119
165
|
Be creative!!!
|
|
120
166
|
|
|
121
167
|
Dulus adapt any python repository <3
|
|
168
|
+
---
|
|
122
169
|
|
|
123
|
-
<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>
|
|
124
171
|
|
|
172
|
+
## Quick Start
|
|
125
173
|
|
|
126
|
-
|
|
174
|
+
### Option A — One-liner installer (recommended)
|
|
127
175
|
|
|
128
|
-
|
|
129
|
-
> **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`).
|
|
130
|
-
> **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.
|
|
131
|
-
> **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.
|
|
132
|
-
> **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.
|
|
133
|
-
> **v0.2.18 — May 9, 2026** — `beautifulsoup4` added as default dep for web scraping flows.
|
|
134
|
-
> **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.
|
|
135
|
-
> **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.
|
|
136
|
-
> **v0.2.15 — May 9, 2026** — Banner image hosted locally so PyPI renders it correctly.
|
|
137
|
-
> **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.
|
|
138
|
-
> **v0.2.13 — May 8, 2026** — Internal robustness fixes for Ollama streaming.
|
|
139
|
-
> Type `/news` to see the full changelog.
|
|
176
|
+
**Linux / macOS / WSL / Termux:**
|
|
140
177
|
|
|
141
|
-
|
|
178
|
+
```bash
|
|
179
|
+
curl -fsSL https://raw.githubusercontent.com/KevRojo/Dulus/main/install.sh | bash
|
|
180
|
+
```
|
|
142
181
|
|
|
143
|
-
|
|
182
|
+
**Windows (PowerShell):**
|
|
144
183
|
|
|
145
|
-
|
|
184
|
+
```powershell
|
|
185
|
+
irm https://raw.githubusercontent.com/KevRojo/Dulus/main/install.ps1 | iex
|
|
186
|
+
```
|
|
146
187
|
|
|
147
|
-
|
|
188
|
+
The installer detects your OS, package manager, Python version, and WSLg
|
|
189
|
+
audio bridge, then asks which profile you want:
|
|
148
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.
|
|
149
199
|
|
|
150
|
-
|
|
200
|
+
It installs only what's missing and never silently runs `sudo` — you
|
|
201
|
+
choose between auto-install, "show me the command", or skip.
|
|
151
202
|
|
|
152
|
-
|
|
203
|
+
Power-user flags:
|
|
153
204
|
|
|
154
|
-
|
|
205
|
+
```bash
|
|
206
|
+
# Preview without changing anything
|
|
207
|
+
curl -fsSL .../install.sh | bash -s -- --dry-run
|
|
155
208
|
|
|
209
|
+
# Non-interactive install (CI / scripts)
|
|
210
|
+
curl -fsSL .../install.sh | bash -s -- --profile=full --pipx
|
|
156
211
|
|
|
157
|
-
|
|
212
|
+
# Latest pre-release
|
|
213
|
+
curl -fsSL .../install.sh | bash -s -- --pre
|
|
214
|
+
```
|
|
158
215
|
|
|
159
|
-
|
|
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
|
+
```
|
|
160
222
|
|
|
161
|
-
|
|
223
|
+
### Option B — Docker (zero local Python setup)
|
|
162
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
|
|
163
234
|
|
|
235
|
+
# 3. Or jump into the REPL inside the container
|
|
236
|
+
docker compose exec dulus dulus
|
|
237
|
+
```
|
|
164
238
|
|
|
165
239
|
### One-liner
|
|
166
240
|
|
|
@@ -171,12 +245,7 @@ pip install "dulus[memory]" && dulus # +MemPalace per-turn memory (pulls chro
|
|
|
171
245
|
|
|
172
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.
|
|
173
247
|
|
|
174
|
-
|
|
175
|
-
-----
|
|
176
|
-
|
|
177
|
-
<img width="2593" height="1044" alt="image" src="https://github.com/user-attachments/assets/114b9ab1-e49f-490a-97b8-872f70b859bd" />
|
|
178
|
-
|
|
179
|
-
-----
|
|
248
|
+
---
|
|
180
249
|
|
|
181
250
|
### From source (hacking on Dulus itself)
|
|
182
251
|
|
|
@@ -224,8 +293,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
|
|
|
224
293
|
|
|
225
294
|
---
|
|
226
295
|
|
|
227
|
-
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/terminal-boot.svg" alt="Dulus booting into session" width="100%"></p>
|
|
228
|
-
|
|
229
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>
|
|
230
297
|
|
|
231
298
|
### 💻 Dulus OS (Sandbox)
|
|
@@ -234,12 +301,6 @@ echo "explain this diff" | git diff | dulus -p --accept-all
|
|
|
234
301
|
|
|
235
302
|
<img width="1309" height="778" alt="image" src="https://github.com/user-attachments/assets/1c627990-7f87-489b-a0a2-14ad62fe2bb8" />
|
|
236
303
|
|
|
237
|
-
---
|
|
238
|
-
<img width="1608" height="1903" alt="image" src="https://github.com/user-attachments/assets/450defa2-437b-470d-891a-9285d9e5e312" />
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
<img width="3763" height="1975" alt="image" src="https://github.com/user-attachments/assets/10752aa2-6837-4097-a9a8-e02938992174" />
|
|
242
|
-
|
|
243
304
|
---
|
|
244
305
|
The dulus sandbox is an early feature, expect bugs
|
|
245
306
|
|
|
@@ -327,31 +388,33 @@ dulus --model nvidia-web/deepseek-r1
|
|
|
327
388
|
|
|
328
389
|
| Model | Type | ID |
|
|
329
390
|
|---|---|---|
|
|
330
|
-
| **DeepSeek
|
|
331
|
-
| **
|
|
332
|
-
| **
|
|
333
|
-
| **
|
|
334
|
-
| **
|
|
335
|
-
| **Mistral Nemotron** | NVIDIA-tuned | `nvidia-web/mistral-nemotron` |
|
|
336
|
-
| **
|
|
337
|
-
| **
|
|
338
|
-
| **
|
|
339
|
-
| **Llama
|
|
340
|
-
| **
|
|
341
|
-
| **
|
|
342
|
-
| **
|
|
343
|
-
| **
|
|
344
|
-
|
|
345
|
-
**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`:
|
|
346
407
|
|
|
347
408
|
```json
|
|
348
409
|
{
|
|
349
|
-
"
|
|
350
|
-
"deepseek-
|
|
351
|
-
"kimi-k2
|
|
352
|
-
"
|
|
353
|
-
"
|
|
354
|
-
"
|
|
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"
|
|
355
418
|
]
|
|
356
419
|
}
|
|
357
420
|
```
|
|
@@ -378,23 +441,6 @@ Dulus's **Auto-Adapter** reads a random Python repo and figures out its tools on
|
|
|
378
441
|
|
|
379
442
|
Adapt-and-install runs in under a second. New tools register **live**, no restart.
|
|
380
443
|
|
|
381
|
-
Example adapting Sherlock repo:
|
|
382
|
-
|
|
383
|
-
<img width="1765" height="166" alt="image" src="https://github.com/user-attachments/assets/c67dc15e-a2e3-4575-be34-8c9b54045510" />
|
|
384
|
-
|
|
385
|
-
-----
|
|
386
|
-
|
|
387
|
-
<img width="1327" height="751" alt="image" src="https://github.com/user-attachments/assets/676a0ef5-3699-4960-98a4-14a55fbef081" />
|
|
388
|
-
|
|
389
|
-
-----
|
|
390
|
-
|
|
391
|
-
<img width="885" height="301" alt="image" src="https://github.com/user-attachments/assets/52c02444-2606-41dc-bc33-ebe26ac41e5e" />
|
|
392
|
-
|
|
393
|
-
----
|
|
394
|
-
|
|
395
|
-
<img width="1006" height="271" alt="image" src="https://github.com/user-attachments/assets/d823428e-6344-4414-bf42-14ed3128f763" />
|
|
396
|
-
|
|
397
|
-
|
|
398
444
|
## MCP
|
|
399
445
|
|
|
400
446
|
Drop a `.mcp.json` in your project root (or `~/.dulus/mcp.json` for user-wide):
|
|
@@ -460,6 +506,32 @@ pip install sounddevice faster-whisper numpy
|
|
|
460
506
|
|
|
461
507
|
Then `/voice` in the REPL. Offline. Supports `/voice lang zh` and `/voice device` for mic selection.
|
|
462
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
|
+
|
|
463
535
|
## Telegram bridge
|
|
464
536
|
|
|
465
537
|
```
|
|
@@ -660,6 +732,8 @@ dulus/
|
|
|
660
732
|
└── tests/ # 263+ unit tests
|
|
661
733
|
```
|
|
662
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
|
+
|
|
663
737
|
---
|
|
664
738
|
|
|
665
739
|
## FAQ
|
|
@@ -689,6 +763,39 @@ git diff | dulus -p "write a commit message"
|
|
|
689
763
|
|
|
690
764
|
---
|
|
691
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
|
+
|
|
692
799
|
## License
|
|
693
800
|
|
|
694
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.
|
|
@@ -701,6 +808,7 @@ If Dulus saved you tokens, time, or sanity — throw some sats:
|
|
|
701
808
|
```
|
|
702
809
|
BTC: 1JzatQDn9fMLnKTd3KYgztsLHC95bJEzSN
|
|
703
810
|
```
|
|
811
|
+
On x: @KevRojo
|
|
704
812
|
|
|
705
813
|
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
706
814
|
|