dulus 3.3.4__tar.gz → 3.4.0__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.4.0/PKG-INFO +167 -0
- dulus-3.4.0/README.md +102 -0
- dulus-3.4.0/dulus.egg-info/PKG-INFO +167 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus.py +12175 -12056
- {dulus-3.3.4 → dulus-3.4.0}/providers.py +5453 -5183
- {dulus-3.3.4 → dulus-3.4.0}/pyproject.toml +1 -1
- dulus-3.3.4/PKG-INFO +0 -817
- dulus-3.3.4/README.md +0 -752
- dulus-3.3.4/dulus.egg-info/PKG-INFO +0 -817
- {dulus-3.3.4 → dulus-3.4.0}/LICENSE +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/MANIFEST.in +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/agent.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/agents_bridge.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/compressor.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/context.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/githook.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/marketplace.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/mempalace_bridge.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/personas.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/plugins.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/server.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/backend/tasks.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/batch_api.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/checkpoint/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/checkpoint/hooks.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/checkpoint/store.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/checkpoint/types.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/claude_code_watcher.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/clipboard_utils.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/cloudsave.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/common.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/compaction.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/config.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/context.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/active_persona.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/marketplace.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/personas.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/plugins/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/plugins/composio/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/plugins/composio/plugin.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/data/tasks.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/API.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/BRAND_GUIDE.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/CHANGELOG.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/CONTRIBUTING.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/DEPLOYMENT.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/FAQ.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/GETTING_STARTED.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/INVESTOR_BRIEF.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_AR.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_EN.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_ES.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_FR.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_JA.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_KO.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_PT.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_RU.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/README_ZH.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/SECURITY.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/api.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/architecture.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/azure-speech-template.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/dashboard/index.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/divider.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/dulus-bird.png +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/generate.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/hero.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/index.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/news.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/nvidia-models.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/particle-playground.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/personas/index.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/poetry-banner.png +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/preview.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-agents.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-brainstorm.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-bridges.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-features.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-freetier.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-memory.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-models.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-perms.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-plugins.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-quickstart.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/sec-ssj.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/spinners.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/split-pane.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/docs/terminal-boot.svg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus.egg-info/SOURCES.txt +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus.egg-info/requires.txt +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus.egg-info/top_level.txt +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_gui.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_mcp/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_mcp/client.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_mcp/config.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_mcp/tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_mcp/types.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/add_dir_manager.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/afk_mode.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/approval_runtime.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/background_tasks.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/clipboard_utils.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/diff_visualizer.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/export_import.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/hook_engine.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/notification_manager.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/session_fork.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/shell_mode.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/todo_visualizer.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/wire_events.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/dulus_tools/yolo_mode.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/governance.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/agent_bridge.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/chat_widget.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/main_window.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/personas.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/sandbox_server.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/session_utils.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/settings_dialog.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/sidebar.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/tasks_view.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/themes.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/gui/tool_panel.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/input.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/license_manager.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/audit.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/consolidator.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/context.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/offload.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/palace.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/scan.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/sessions.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/store.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/types.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/memory/vector_search.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/multi_agent/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/multi_agent/subagent.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/multi_agent/tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/offload_helper.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/personality_config.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/plugin/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/plugin/autoadapter.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/plugin/loader.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/plugin/recommend.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/plugin/store.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/plugin/types.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/README.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/components.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/index.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/wallpaper-default.jpg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/wallpapers/default.jpeg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/wallpapers/light.jpeg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/wallpapers/nature.jpeg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/dist/wallpapers/tech.jpeg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/eslint.config.js +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/index.html +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/info.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/package-lock.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/package.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/postcss.config.js +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/tailwind.config.js +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/tsconfig.app.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/tsconfig.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/tsconfig.node.json +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox/vite.config.ts +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/sandbox_bootstrap.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/setup.cfg +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/builtin.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/LICENSE-obsidian-skills +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/README.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/defuddle/SKILL.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/json-canvas/SKILL.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/obsidian-bases/SKILL.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/obsidian-cli/SKILL.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/clawhub.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/executor.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/loader.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skill/tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/skills.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/soul.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/spinner.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/string_utils.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/subagent.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/task/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/task/store.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/task/tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/task/types.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_afk_yolo.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_approval_runtime.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_background_task_tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_background_tasks.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_checkpoint.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_clipboard_utils.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_compaction.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_diff_view.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_diff_visualization.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_display_blocks.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_export_import.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_hook_engine.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_injection_fix.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_license.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_mcp.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_memory.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_notification_manager.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_plugin.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_session_fork.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_shell_mode.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_skills.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_steer_input.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_subagent.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_task.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_telegram_buffer.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_think_tool.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_todo_tool.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_todo_visualization.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_tool_registry.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_voice.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tests/test_wire_events.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tmux_offloader.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tmux_tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tool_registry.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/ui/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/ui/input.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/ui/render.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/voice/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/voice/audio_utils.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/voice/keyterms.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/voice/recorder.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/voice/stt.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/voice/tts.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/voice/wake_word.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/webbridge/__init__.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/webbridge/core.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/webbridge/tools.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/webchat.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/webchat_server.py +0 -0
- {dulus-3.3.4 → dulus-3.4.0}/welcome.py +0 -0
dulus-3.4.0/PKG-INFO
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dulus
|
|
3
|
+
Version: 3.4.0
|
|
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
|
+
Author: KevRojo
|
|
6
|
+
License: GPL-3.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/KevRojo/Dulus
|
|
8
|
+
Project-URL: Repository, https://github.com/KevRojo/Dulus
|
|
9
|
+
Project-URL: Issues, https://github.com/KevRojo/Dulus/issues
|
|
10
|
+
Keywords: ai,cli,llm,claude,gemini,nvidia,openai,kimi,deepseek,qwen,ollama,agent,tts,voice
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Terminals
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
License-File: license_manager.py
|
|
26
|
+
Requires-Dist: anthropic>=0.40.0
|
|
27
|
+
Requires-Dist: openai>=1.30.0
|
|
28
|
+
Requires-Dist: httpx>=0.27.0
|
|
29
|
+
Requires-Dist: requests>=2.31.0
|
|
30
|
+
Requires-Dist: rich>=13.0.0
|
|
31
|
+
Requires-Dist: prompt_toolkit>=3.0.0
|
|
32
|
+
Requires-Dist: Flask>=3.1.3
|
|
33
|
+
Requires-Dist: bubblewrap-cli>=1.0.0
|
|
34
|
+
Requires-Dist: customtkinter>=5.2.0
|
|
35
|
+
Requires-Dist: Pillow>=10.0.0
|
|
36
|
+
Requires-Dist: typing-extensions>=4.10.0
|
|
37
|
+
Requires-Dist: composio>=1.0.0rc2
|
|
38
|
+
Requires-Dist: beautifulsoup4>=4.12.0
|
|
39
|
+
Requires-Dist: sentry-sdk>=2.0.0
|
|
40
|
+
Requires-Dist: pytesseract>=0.3.10
|
|
41
|
+
Provides-Extra: memory
|
|
42
|
+
Requires-Dist: mempalace>=3.3.4; extra == "memory"
|
|
43
|
+
Provides-Extra: voice
|
|
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"
|
|
57
|
+
Provides-Extra: full
|
|
58
|
+
Requires-Dist: mempalace>=3.3.4; extra == "full"
|
|
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"
|
|
64
|
+
Dynamic: license-file
|
|
65
|
+
|
|
66
|
+
# ▲ DULUS
|
|
67
|
+
>
|
|
68
|
+
> `pip install dulus` → press Enter → working IA in 30 seconds. Try it.
|
|
69
|
+
|
|
70
|
+
SET /sticky_input ON since the first run for the best experience!
|
|
71
|
+
|
|
72
|
+
<p align="center">
|
|
73
|
+
|
|
74
|
+
<img width="700" height="665" alt="mascot-hero" src="https://github.com/user-attachments/assets/8b122834-552c-4bd4-b46d-3e17deb74ab5" />
|
|
75
|
+
|
|
76
|
+
</p>
|
|
77
|
+
|
|
78
|
+
<p align="center"><i>The Dulus (Cigua Palmera) — Dominican national bird. Named after the bird, not the rocket.</i></p>
|
|
79
|
+
|
|
80
|
+
<p align="center">
|
|
81
|
+
<a href="#quick-start"><b>Quick Start</b></a> ·
|
|
82
|
+
<a href="#models"><b>Models</b></a> ·
|
|
83
|
+
<a href="#features"><b>Features</b></a> ·
|
|
84
|
+
<a href="#permissions"><b>Permissions</b></a> ·
|
|
85
|
+
<a href="#mcp"><b>MCP</b></a> ·
|
|
86
|
+
<a href="#plugins"><b>Plugins</b></a>
|
|
87
|
+
</p>
|
|
88
|
+
|
|
89
|
+
<p align="center">
|
|
90
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="pypi"/></a>
|
|
91
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
|
|
92
|
+
<img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
|
|
93
|
+
<img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
|
|
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"/>
|
|
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>
|
|
99
|
+
</p>
|
|
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
|
+
-----
|
|
119
|
+
<p align="center">
|
|
120
|
+
<code>pip install dulus</code>
|
|
121
|
+
</p>
|
|
122
|
+
|
|
123
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
124
|
+
|
|
125
|
+
<p align="center">
|
|
126
|
+
<a href="https://dulus.ai/"><b>🌐 Visit the Dulus website →</b></a><br>
|
|
127
|
+
<sub>The site covers features, demos, and details not documented in this README.</sub>
|
|
128
|
+
</p>
|
|
129
|
+
|
|
130
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
131
|
+
|
|
132
|
+
## 🔥 What's new
|
|
133
|
+
|
|
134
|
+
> Full changelog: [`docs/news.md`](docs/news.md) · Inside the REPL: `/news`
|
|
135
|
+
|
|
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. 🦅🇩🇴
|
|
137
|
+
|
|
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.
|
|
146
|
+
|
|
147
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
148
|
+
|
|
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
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
Another reminder of a Dulus magic spell:
|
|
156
|
+
Wanna get stock prices, history , etc?
|
|
157
|
+
|
|
158
|
+
/plugin install yfinance@https://github.com/ranaroussi/yfinance
|
|
159
|
+
|
|
160
|
+
them:
|
|
161
|
+
/plugin reload
|
|
162
|
+
|
|
163
|
+
dulus get the prices of NVDA, TSLA, SP500:
|
|
164
|
+
|
|
165
|
+
Be creative!!!
|
|
166
|
+
|
|
167
|
+
Dulus adapt any python repository <3
|
dulus-3.4.0/README.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# ▲ DULUS
|
|
2
|
+
>
|
|
3
|
+
> `pip install dulus` → press Enter → working IA in 30 seconds. Try it.
|
|
4
|
+
|
|
5
|
+
SET /sticky_input ON since the first run for the best experience!
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
|
|
9
|
+
<img width="700" height="665" alt="mascot-hero" src="https://github.com/user-attachments/assets/8b122834-552c-4bd4-b46d-3e17deb74ab5" />
|
|
10
|
+
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center"><i>The Dulus (Cigua Palmera) — Dominican national bird. Named after the bird, not the rocket.</i></p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="#quick-start"><b>Quick Start</b></a> ·
|
|
17
|
+
<a href="#models"><b>Models</b></a> ·
|
|
18
|
+
<a href="#features"><b>Features</b></a> ·
|
|
19
|
+
<a href="#permissions"><b>Permissions</b></a> ·
|
|
20
|
+
<a href="#mcp"><b>MCP</b></a> ·
|
|
21
|
+
<a href="#plugins"><b>Plugins</b></a>
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="pypi"/></a>
|
|
26
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
|
|
27
|
+
<img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
|
|
28
|
+
<img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
|
|
29
|
+
<img src="https://img.shields.io/badge/version-v3.3.3-ff6b1f?style=flat-square&labelColor=07070a" alt="version"/>
|
|
30
|
+
<img src="https://img.shields.io/badge/providers-100%2B%20via%20LiteLLM-ff6b1f?style=flat-square&labelColor=07070a" alt="providers"/>
|
|
31
|
+
<img src="https://img.shields.io/badge/tools-30%2B-ff6b1f?style=flat-square&labelColor=07070a" alt="tools"/>
|
|
32
|
+
<img src="https://img.shields.io/badge/tests-263+-ff6b1f?style=flat-square&labelColor=07070a" alt="tests"/>
|
|
33
|
+
<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>
|
|
34
|
+
</p>
|
|
35
|
+
|
|
36
|
+
<p align="center">
|
|
37
|
+
🌐 <b>Multilingual</b> ·
|
|
38
|
+
<a href="docs/README_EN.md">English</a> ·
|
|
39
|
+
<a href="docs/README_ES.md">Español</a> ·
|
|
40
|
+
<a href="docs/README_FR.md">Français</a> ·
|
|
41
|
+
<a href="docs/README_ZH.md">中文</a> ·
|
|
42
|
+
<a href="docs/README_JA.md">日本語</a> ·
|
|
43
|
+
<a href="docs/README_KO.md">한국어</a> ·
|
|
44
|
+
<a href="docs/README_PT.md">Português</a> ·
|
|
45
|
+
<a href="docs/README_RU.md">Русский</a> ·
|
|
46
|
+
<a href="docs/README_AR.md">العربية</a>
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
> **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.
|
|
50
|
+
>
|
|
51
|
+
> **$DULUS AI token Solana):** [`9R8rrjXxcfQPmLTCLhmVpjr2uesjjkcgkinE6Lwdpump`](https://dexscreener.com/solana/9R8rrjXxcfQPmLTCLhmVpjr2uesjjkcgkinE6Lwdpump)
|
|
52
|
+
|
|
53
|
+
-----
|
|
54
|
+
<p align="center">
|
|
55
|
+
<code>pip install dulus</code>
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
59
|
+
|
|
60
|
+
<p align="center">
|
|
61
|
+
<a href="https://dulus.ai/"><b>🌐 Visit the Dulus website →</b></a><br>
|
|
62
|
+
<sub>The site covers features, demos, and details not documented in this README.</sub>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
66
|
+
|
|
67
|
+
## 🔥 What's new
|
|
68
|
+
|
|
69
|
+
> Full changelog: [`docs/news.md`](docs/news.md) · Inside the REPL: `/news`
|
|
70
|
+
|
|
71
|
+
- **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. 🦅🇩🇴
|
|
72
|
+
|
|
73
|
+
- **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.
|
|
74
|
+
- **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.
|
|
75
|
+
- **v0.2.91** — **CORS on the daemon.** The Android Sandbox APK now connects every app live — same daemon, finally cross-origin reachable.
|
|
76
|
+
- **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.
|
|
77
|
+
- **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.
|
|
78
|
+
- **v0.2.89** — **`kepano/obsidian-skills` bundled.** Dulus writes Obsidian-flavored markdown by default. Open `~/.dulus/memory/` as an Obsidian vault → instant graph view.
|
|
79
|
+
- **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.
|
|
80
|
+
- **v0.2.85** — **Slim wheel 11.4 MB → 2.5 MB.** Smaller than the original baseline.
|
|
81
|
+
|
|
82
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
83
|
+
|
|
84
|
+
## What is this
|
|
85
|
+
|
|
86
|
+
Dulus Reduce your IA costs by 60% parsing webchats and claude-code directly. Write poetry while Anthropic only see text.
|
|
87
|
+
Use claude-code as an API without the new 'extra-usage' wall <3
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
Another reminder of a Dulus magic spell:
|
|
91
|
+
Wanna get stock prices, history , etc?
|
|
92
|
+
|
|
93
|
+
/plugin install yfinance@https://github.com/ranaroussi/yfinance
|
|
94
|
+
|
|
95
|
+
them:
|
|
96
|
+
/plugin reload
|
|
97
|
+
|
|
98
|
+
dulus get the prices of NVDA, TSLA, SP500:
|
|
99
|
+
|
|
100
|
+
Be creative!!!
|
|
101
|
+
|
|
102
|
+
Dulus adapt any python repository <3
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dulus
|
|
3
|
+
Version: 3.4.0
|
|
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
|
+
Author: KevRojo
|
|
6
|
+
License: GPL-3.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/KevRojo/Dulus
|
|
8
|
+
Project-URL: Repository, https://github.com/KevRojo/Dulus
|
|
9
|
+
Project-URL: Issues, https://github.com/KevRojo/Dulus/issues
|
|
10
|
+
Keywords: ai,cli,llm,claude,gemini,nvidia,openai,kimi,deepseek,qwen,ollama,agent,tts,voice
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Terminals
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
License-File: license_manager.py
|
|
26
|
+
Requires-Dist: anthropic>=0.40.0
|
|
27
|
+
Requires-Dist: openai>=1.30.0
|
|
28
|
+
Requires-Dist: httpx>=0.27.0
|
|
29
|
+
Requires-Dist: requests>=2.31.0
|
|
30
|
+
Requires-Dist: rich>=13.0.0
|
|
31
|
+
Requires-Dist: prompt_toolkit>=3.0.0
|
|
32
|
+
Requires-Dist: Flask>=3.1.3
|
|
33
|
+
Requires-Dist: bubblewrap-cli>=1.0.0
|
|
34
|
+
Requires-Dist: customtkinter>=5.2.0
|
|
35
|
+
Requires-Dist: Pillow>=10.0.0
|
|
36
|
+
Requires-Dist: typing-extensions>=4.10.0
|
|
37
|
+
Requires-Dist: composio>=1.0.0rc2
|
|
38
|
+
Requires-Dist: beautifulsoup4>=4.12.0
|
|
39
|
+
Requires-Dist: sentry-sdk>=2.0.0
|
|
40
|
+
Requires-Dist: pytesseract>=0.3.10
|
|
41
|
+
Provides-Extra: memory
|
|
42
|
+
Requires-Dist: mempalace>=3.3.4; extra == "memory"
|
|
43
|
+
Provides-Extra: voice
|
|
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"
|
|
57
|
+
Provides-Extra: full
|
|
58
|
+
Requires-Dist: mempalace>=3.3.4; extra == "full"
|
|
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"
|
|
64
|
+
Dynamic: license-file
|
|
65
|
+
|
|
66
|
+
# ▲ DULUS
|
|
67
|
+
>
|
|
68
|
+
> `pip install dulus` → press Enter → working IA in 30 seconds. Try it.
|
|
69
|
+
|
|
70
|
+
SET /sticky_input ON since the first run for the best experience!
|
|
71
|
+
|
|
72
|
+
<p align="center">
|
|
73
|
+
|
|
74
|
+
<img width="700" height="665" alt="mascot-hero" src="https://github.com/user-attachments/assets/8b122834-552c-4bd4-b46d-3e17deb74ab5" />
|
|
75
|
+
|
|
76
|
+
</p>
|
|
77
|
+
|
|
78
|
+
<p align="center"><i>The Dulus (Cigua Palmera) — Dominican national bird. Named after the bird, not the rocket.</i></p>
|
|
79
|
+
|
|
80
|
+
<p align="center">
|
|
81
|
+
<a href="#quick-start"><b>Quick Start</b></a> ·
|
|
82
|
+
<a href="#models"><b>Models</b></a> ·
|
|
83
|
+
<a href="#features"><b>Features</b></a> ·
|
|
84
|
+
<a href="#permissions"><b>Permissions</b></a> ·
|
|
85
|
+
<a href="#mcp"><b>MCP</b></a> ·
|
|
86
|
+
<a href="#plugins"><b>Plugins</b></a>
|
|
87
|
+
</p>
|
|
88
|
+
|
|
89
|
+
<p align="center">
|
|
90
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://img.shields.io/pypi/v/dulus.svg?style=flat-square&color=ff6b1f&labelColor=07070a&label=pypi" alt="pypi"/></a>
|
|
91
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="downloads"/></a>
|
|
92
|
+
<img src="https://img.shields.io/badge/python-3.11+-ff6b1f?style=flat-square&labelColor=07070a" alt="python"/>
|
|
93
|
+
<img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="license"/>
|
|
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"/>
|
|
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>
|
|
99
|
+
</p>
|
|
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
|
+
-----
|
|
119
|
+
<p align="center">
|
|
120
|
+
<code>pip install dulus</code>
|
|
121
|
+
</p>
|
|
122
|
+
|
|
123
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
124
|
+
|
|
125
|
+
<p align="center">
|
|
126
|
+
<a href="https://dulus.ai/"><b>🌐 Visit the Dulus website →</b></a><br>
|
|
127
|
+
<sub>The site covers features, demos, and details not documented in this README.</sub>
|
|
128
|
+
</p>
|
|
129
|
+
|
|
130
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
131
|
+
|
|
132
|
+
## 🔥 What's new
|
|
133
|
+
|
|
134
|
+
> Full changelog: [`docs/news.md`](docs/news.md) · Inside the REPL: `/news`
|
|
135
|
+
|
|
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. 🦅🇩🇴
|
|
137
|
+
|
|
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.
|
|
146
|
+
|
|
147
|
+
<p align="center"><img src="https://raw.githubusercontent.com/KevRojo/Dulus/main/docs/divider.svg" alt="" width="100%"></p>
|
|
148
|
+
|
|
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
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
Another reminder of a Dulus magic spell:
|
|
156
|
+
Wanna get stock prices, history , etc?
|
|
157
|
+
|
|
158
|
+
/plugin install yfinance@https://github.com/ranaroussi/yfinance
|
|
159
|
+
|
|
160
|
+
them:
|
|
161
|
+
/plugin reload
|
|
162
|
+
|
|
163
|
+
dulus get the prices of NVDA, TSLA, SP500:
|
|
164
|
+
|
|
165
|
+
Be creative!!!
|
|
166
|
+
|
|
167
|
+
Dulus adapt any python repository <3
|