dulus 3.13.7__tar.gz → 3.13.9__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.13.7/dulus.egg-info → dulus-3.13.9}/PKG-INFO +48 -47
- {dulus-3.13.7 → dulus-3.13.9}/README.md +47 -46
- {dulus-3.13.7 → dulus-3.13.9}/config.py +5 -0
- {dulus-3.13.7 → dulus-3.13.9}/context.py +11 -1
- {dulus-3.13.7 → dulus-3.13.9}/docs/CHANGELOG.md +15 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/news.md +5 -1
- {dulus-3.13.7 → dulus-3.13.9/dulus.egg-info}/PKG-INFO +48 -47
- {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/SOURCES.txt +1 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus.py +80 -245
- dulus-3.13.9/dulus_tools/isolate.py +273 -0
- {dulus-3.13.7 → dulus-3.13.9}/pyproject.toml +1 -1
- {dulus-3.13.7 → dulus-3.13.9}/tools.py +27 -0
- {dulus-3.13.7 → dulus-3.13.9}/LICENSE +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/MANIFEST.in +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/agent.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/algolia_search.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/analytics.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/agents_bridge.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/compressor.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/context.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/githook.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/marketplace.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/mempalace_bridge.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/paths.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/personas.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/plugins.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/server.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/backend/tasks.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/banners/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/banners/banner_rotator.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/banners/banners_dulus_ai.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/batch_api.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/checkpoint/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/checkpoint/hooks.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/checkpoint/store.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/checkpoint/types.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/__main__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/ansi.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/assets/ascii/dulus_logo.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/assets/ascii/eagle.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/assets/ascii/terminal_art.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/banners.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/demo.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/effects.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/effort_slider.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/progress.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/py.typed +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/spinners.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cli_animations/status.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/clipboard_utils.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/cloudsave.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/common.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/compaction.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/active_persona.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/marketplace.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/personas.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/plugins/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/plugin.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/data/tasks.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/display_blocks.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/API.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/BRAND_GUIDE.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/CONTRIBUTING.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/DEPLOYMENT.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/FAQ.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/GETTING_STARTED.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_AR.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_EN.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_ES.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_FR.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_JA.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_KO.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_PT.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_RU.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/README_ZH.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/SECURITY.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/api.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/architecture.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/azure-speech-template.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/dashboard/index.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/divider.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/dulus-bird.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/generate.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/index.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/nvidia-models.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/particle-playground.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/personas/index.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/poetry-banner.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/preview.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/python-console.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/auto-adapter.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/dulus-os.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/hero.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/lookback_two_windows.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/pyc_heap.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/pyc_receipts.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/pyc_trap.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/roundtable.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/task-board.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/readme/webchat.png +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-agents.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-brainstorm.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-bridges.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-features.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-freetier.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-memory.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-models.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-perms.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-plugins.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-quickstart.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/sec-ssj.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/spinners.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/split-pane.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/terminal-boot.svg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/docs/termux-edge.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/requires.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus.egg-info/top_level.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_account.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_bar_client.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_gui.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/client.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/commands.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/config.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/hub.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_mcp/types.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_quick_menu.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/add_dir_manager.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/afk_mode.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/approval_runtime.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/background_tasks.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/clipboard_utils.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/diff_visualizer.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/export_import.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/hook_engine.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/notification_manager.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/session_fork.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/shell_mode.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/todo_visualizer.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/tree_ls.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/wire_events.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/dulus_tools/yolo_mode.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/file_filter.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/fs_compass.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/governance.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/agent_bridge.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/chat_widget.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/main_window.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/personas.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/sandbox_server.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/session_utils.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/settings_dialog.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/sidebar.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/tasks_view.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/themes.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/gui/tool_panel.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/input.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/license_manager.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/lookback.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/audit.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/consolidator.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/context.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/mempalace_bridge.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/offload.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/palace.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/scan.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/adaptation_guides.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/askuserquestion_after_numbered_list.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/background_jobs_no_extra_timers.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/cleverness_over_resources.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/corporate_tls_breaks_curl_cffi.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/hardened_rules.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/investigator_workflow_heuristic.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/native_code_over_sketchy_plugins.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/no_personal_info_in_code.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/searches_include_modified_date.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/tmux_send_keys_power_patterns.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/token_optimization_technique.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/tool_chaining_capability.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/insights/webbridge_evaluate_first_pattern.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/seeds/short_memory.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/sessions.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/store.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/types.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/memory/vector_search.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/model_params.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/multi_agent/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/multi_agent/subagent.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/multi_agent/tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/paste_placeholders.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/personality_config.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/plugin/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/plugin/autoadapter.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/plugin/loader.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/plugin/recommend.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/plugin/store.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/plugin/types.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/profiles.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/providers.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/pyconsole.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/README.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/index.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpaper-default.jpg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/default.jpeg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/light.jpeg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/nature.jpeg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/dist/wallpapers/tech.jpeg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox/info.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/sandbox_bootstrap.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/setup.cfg +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/builtin.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/LICENSE-obsidian-skills +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/README.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/defuddle/SKILL.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/json-canvas/SKILL.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-bases/SKILL.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-cli/SKILL.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/README.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/SKILL.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/addresses.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/advancedbackgroundchecks.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/beenverified.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/clustal.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/clustrmaps.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/cyberbackgroundchecks.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/familytreenow.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/fastpeoplesearch.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/intelius.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/mylife.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/nuwber.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/peekyou.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/peoplefinders.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/radaris.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/rehold.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/searchpeoplefree.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/socialcatfish.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/spokeo.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/thatsthem.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/truepeoplesearch.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/usphonebook.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/brokers/whitepages.json +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/legal/ccpa.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/legal/drop.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/legal/gdpr.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/methods.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/site-playbooks.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/references/state-machine.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/autopilot.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/badbool.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/brokers.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/cdp.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/config.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/crypto.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/dossier.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/email_modes.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/emailer.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/ledger.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/legal.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/paths.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/pdd.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/registry.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/report.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/scan.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/storage.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/tiers.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/scripts/vectors.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/consent/authorization.md +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/ccpa-authorized-agent.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/ccpa-deletion.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/ccpa-indirect-deletion.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/gdpr-erasure.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/bundled/unbroker/templates/emails/generic-optout.txt +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/clawhub.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/executor.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/loader.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skill/tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/skills.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/soul.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/spinner.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/steer_input.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/subagent.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/task/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/task/store.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/task/tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/task/types.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_afk_yolo.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_approval_runtime.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_background_task_tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_background_tasks.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_chatgpt_oauth.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_checkpoint.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_cli_animations_integration.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_clipboard_utils.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_compaction.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_composio_tool_generator.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_diff_view.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_diff_visualization.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_display_blocks.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_dulus_account.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_export_import.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_gold_memory_preload.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_grok_usage.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_hook_engine.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_injection_fix.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_json_protocol.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_license.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_lookback_cache.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_lookback_compact.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_mcp.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_mcp_algolia.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_memory.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_memory_home_resolution.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_notification_manager.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_plugin.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_profile_isolation.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_profile_plugin_scope.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_provider_errors.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_session_fork.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_shell_detection.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_shell_mode.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_skills.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_skillssh_algolia.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_steer_input.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_subagent.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_task.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_telegram_buffer.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_think_tool.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_todo_tool.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_todo_visualization.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_tool_registry.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_tree_ls.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_voice.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_webbridge_tabs.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tests/test_wire_events.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tmux_tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/token_budget.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tool_registry.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tools_background.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tools_think.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/tools_todo.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/ui/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/ui/input.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/ui/render.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/updater.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/voice/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/voice/audio_utils.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/voice/keyterms.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/voice/recorder.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/voice/stt.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/voice/tts.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/voice/wake_word.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webbridge/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webbridge/core.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webbridge/tools.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webchat.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webchat_server.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/__init__.py +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/app.js +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/index.html +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/webchat_ui/style.css +0 -0
- {dulus-3.13.7 → dulus-3.13.9}/welcome.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 3.13.
|
|
3
|
+
Version: 3.13.9
|
|
4
4
|
Summary: Provider-independent agent runtime for the terminal — cloud and local models, real tools, MCP, plugins, memory, sub-agents, and Dulus OS.
|
|
5
5
|
Author-email: KevRojo <dev@dulus.ai>
|
|
6
6
|
Maintainer-email: KevRojo <dev@dulus.ai>
|
|
@@ -106,6 +106,53 @@ Requires-Dist: pytesseract>=0.3.10; extra == "full"
|
|
|
106
106
|
<img width="1179" height="761" alt="image" src="https://github.com/user-attachments/assets/95c8a306-88e6-4f9d-a1aa-009ac38ebeaf" />
|
|
107
107
|
</p>
|
|
108
108
|
|
|
109
|
+
<p align="center">
|
|
110
|
+
<a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
|
|
111
|
+
·
|
|
112
|
+
<a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
|
|
113
|
+
·
|
|
114
|
+
<a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
|
|
115
|
+
</p>
|
|
116
|
+
|
|
117
|
+
<p align="center">
|
|
118
|
+
<strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
|
|
119
|
+
<a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
|
|
120
|
+
</p>
|
|
121
|
+
|
|
122
|
+
<p align="center">
|
|
123
|
+
<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 version"></a>
|
|
124
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
|
|
125
|
+
<a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
|
|
126
|
+
<a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
|
|
127
|
+
<a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
|
|
128
|
+
<img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
|
|
129
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
|
|
130
|
+
</p>
|
|
131
|
+
|
|
132
|
+
<p align="center">
|
|
133
|
+
<a href="#install-in-30-seconds"><strong>Install</strong></a> ·
|
|
134
|
+
<a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
|
|
135
|
+
<a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
|
|
136
|
+
<a href="#why-dulus"><strong>Why Dulus</strong></a> ·
|
|
137
|
+
<a href="#one-runtime-every-model"><strong>Models</strong></a> ·
|
|
138
|
+
<a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
|
|
139
|
+
<a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
|
|
140
|
+
<a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
|
|
141
|
+
<a href="#command-map"><strong>Commands</strong></a> ·
|
|
142
|
+
<a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
|
|
143
|
+
</p>
|
|
144
|
+
|
|
145
|
+
<p align="center">
|
|
146
|
+
<a href="docs/README_ES.md">Español</a> ·
|
|
147
|
+
<a href="docs/README_FR.md">Français</a> ·
|
|
148
|
+
<a href="docs/README_ZH.md">中文</a> ·
|
|
149
|
+
<a href="docs/README_JA.md">日本語</a> ·
|
|
150
|
+
<a href="docs/README_KO.md">한국어</a> ·
|
|
151
|
+
<a href="docs/README_PT.md">Português</a> ·
|
|
152
|
+
<a href="docs/README_RU.md">Русский</a> ·
|
|
153
|
+
<a href="docs/README_AR.md">العربية</a>
|
|
154
|
+
</p>
|
|
155
|
+
|
|
109
156
|
<p align="center">
|
|
110
157
|
<strong>Agentic AI for everyone. No API key. No credit card. Just <code>pip install</code>.</strong>
|
|
111
158
|
</p>
|
|
@@ -181,52 +228,6 @@ dulus
|
|
|
181
228
|
<strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
|
|
182
229
|
</p>
|
|
183
230
|
|
|
184
|
-
<p align="center">
|
|
185
|
-
<a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
|
|
186
|
-
·
|
|
187
|
-
<a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
|
|
188
|
-
·
|
|
189
|
-
<a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
|
|
190
|
-
</p>
|
|
191
|
-
|
|
192
|
-
<p align="center">
|
|
193
|
-
<strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
|
|
194
|
-
<a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
|
|
195
|
-
</p>
|
|
196
|
-
|
|
197
|
-
<p align="center">
|
|
198
|
-
<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 version"></a>
|
|
199
|
-
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
|
|
200
|
-
<a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
|
|
201
|
-
<a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
|
|
202
|
-
<a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
|
|
203
|
-
<img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
|
|
204
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
|
|
205
|
-
</p>
|
|
206
|
-
|
|
207
|
-
<p align="center">
|
|
208
|
-
<a href="#install-in-30-seconds"><strong>Install</strong></a> ·
|
|
209
|
-
<a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
|
|
210
|
-
<a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
|
|
211
|
-
<a href="#why-dulus"><strong>Why Dulus</strong></a> ·
|
|
212
|
-
<a href="#one-runtime-every-model"><strong>Models</strong></a> ·
|
|
213
|
-
<a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
|
|
214
|
-
<a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
|
|
215
|
-
<a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
|
|
216
|
-
<a href="#command-map"><strong>Commands</strong></a> ·
|
|
217
|
-
<a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
|
|
218
|
-
</p>
|
|
219
|
-
|
|
220
|
-
<p align="center">
|
|
221
|
-
<a href="docs/README_ES.md">Español</a> ·
|
|
222
|
-
<a href="docs/README_FR.md">Français</a> ·
|
|
223
|
-
<a href="docs/README_ZH.md">中文</a> ·
|
|
224
|
-
<a href="docs/README_JA.md">日本語</a> ·
|
|
225
|
-
<a href="docs/README_KO.md">한국어</a> ·
|
|
226
|
-
<a href="docs/README_PT.md">Português</a> ·
|
|
227
|
-
<a href="docs/README_RU.md">Русский</a> ·
|
|
228
|
-
<a href="docs/README_AR.md">العربية</a>
|
|
229
|
-
</p>
|
|
230
231
|
|
|
231
232
|
---
|
|
232
233
|
|
|
@@ -8,6 +8,53 @@
|
|
|
8
8
|
<img width="1179" height="761" alt="image" src="https://github.com/user-attachments/assets/95c8a306-88e6-4f9d-a1aa-009ac38ebeaf" />
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
|
|
13
|
+
·
|
|
14
|
+
<a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
|
|
15
|
+
·
|
|
16
|
+
<a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
|
|
21
|
+
<a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></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 version"></a>
|
|
26
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
|
|
27
|
+
<a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
|
|
28
|
+
<a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
|
|
29
|
+
<a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
|
|
30
|
+
<img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
|
|
31
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
<p align="center">
|
|
35
|
+
<a href="#install-in-30-seconds"><strong>Install</strong></a> ·
|
|
36
|
+
<a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
|
|
37
|
+
<a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
|
|
38
|
+
<a href="#why-dulus"><strong>Why Dulus</strong></a> ·
|
|
39
|
+
<a href="#one-runtime-every-model"><strong>Models</strong></a> ·
|
|
40
|
+
<a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
|
|
41
|
+
<a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
|
|
42
|
+
<a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
|
|
43
|
+
<a href="#command-map"><strong>Commands</strong></a> ·
|
|
44
|
+
<a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+
<p align="center">
|
|
48
|
+
<a href="docs/README_ES.md">Español</a> ·
|
|
49
|
+
<a href="docs/README_FR.md">Français</a> ·
|
|
50
|
+
<a href="docs/README_ZH.md">中文</a> ·
|
|
51
|
+
<a href="docs/README_JA.md">日本語</a> ·
|
|
52
|
+
<a href="docs/README_KO.md">한국어</a> ·
|
|
53
|
+
<a href="docs/README_PT.md">Português</a> ·
|
|
54
|
+
<a href="docs/README_RU.md">Русский</a> ·
|
|
55
|
+
<a href="docs/README_AR.md">العربية</a>
|
|
56
|
+
</p>
|
|
57
|
+
|
|
11
58
|
<p align="center">
|
|
12
59
|
<strong>Agentic AI for everyone. No API key. No credit card. Just <code>pip install</code>.</strong>
|
|
13
60
|
</p>
|
|
@@ -83,52 +130,6 @@ dulus
|
|
|
83
130
|
<strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
|
|
84
131
|
</p>
|
|
85
132
|
|
|
86
|
-
<p align="center">
|
|
87
|
-
<a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
|
|
88
|
-
·
|
|
89
|
-
<a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
|
|
90
|
-
·
|
|
91
|
-
<a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
|
|
92
|
-
</p>
|
|
93
|
-
|
|
94
|
-
<p align="center">
|
|
95
|
-
<strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
|
|
96
|
-
<a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
|
|
97
|
-
</p>
|
|
98
|
-
|
|
99
|
-
<p align="center">
|
|
100
|
-
<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 version"></a>
|
|
101
|
-
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
|
|
102
|
-
<a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
|
|
103
|
-
<a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
|
|
104
|
-
<a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
|
|
105
|
-
<img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
|
|
106
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
|
|
107
|
-
</p>
|
|
108
|
-
|
|
109
|
-
<p align="center">
|
|
110
|
-
<a href="#install-in-30-seconds"><strong>Install</strong></a> ·
|
|
111
|
-
<a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
|
|
112
|
-
<a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
|
|
113
|
-
<a href="#why-dulus"><strong>Why Dulus</strong></a> ·
|
|
114
|
-
<a href="#one-runtime-every-model"><strong>Models</strong></a> ·
|
|
115
|
-
<a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
|
|
116
|
-
<a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
|
|
117
|
-
<a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
|
|
118
|
-
<a href="#command-map"><strong>Commands</strong></a> ·
|
|
119
|
-
<a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
|
|
120
|
-
</p>
|
|
121
|
-
|
|
122
|
-
<p align="center">
|
|
123
|
-
<a href="docs/README_ES.md">Español</a> ·
|
|
124
|
-
<a href="docs/README_FR.md">Français</a> ·
|
|
125
|
-
<a href="docs/README_ZH.md">中文</a> ·
|
|
126
|
-
<a href="docs/README_JA.md">日本語</a> ·
|
|
127
|
-
<a href="docs/README_KO.md">한국어</a> ·
|
|
128
|
-
<a href="docs/README_PT.md">Português</a> ·
|
|
129
|
-
<a href="docs/README_RU.md">Русский</a> ·
|
|
130
|
-
<a href="docs/README_AR.md">العربية</a>
|
|
131
|
-
</p>
|
|
132
133
|
|
|
133
134
|
---
|
|
134
135
|
|
|
@@ -170,6 +170,11 @@ DEFAULTS = {
|
|
|
170
170
|
# via the rtk binary for token-optimized output. Soft-fallback if rtk is
|
|
171
171
|
# missing. Linux/Mac users: bash rtk/install.sh to fetch the binary.
|
|
172
172
|
"rtk_enabled": True,
|
|
173
|
+
# Workspace Isolate — when ON, Write/Edit/NotebookEdit/Bash cannot modify
|
|
174
|
+
# files outside the locked workspace root (frozen into isolate_root on
|
|
175
|
+
# toggle-ON). Expand with /add-dir. OFF by default.
|
|
176
|
+
"isolate": False,
|
|
177
|
+
"isolate_root": "",
|
|
173
178
|
}
|
|
174
179
|
|
|
175
180
|
|
|
@@ -17,6 +17,7 @@ You are Dulus, an AI coding agent. Think in English; reply to {user_name} in {re
|
|
|
17
17
|
# Identity: Your name is Dulus. Do NOT proactively declare this — only if the user asks "quién eres" or "qué modelo eres".
|
|
18
18
|
# Forbidden: Do NOT claim to be Qwen, Llama, GPT, Claude, Gemini, DeepSeek, or any underlying model. Do NOT mention Ollama or your runtime stack.
|
|
19
19
|
# Env: {cwd} | {platform} | auto_show={auto_show}
|
|
20
|
+
{isolate_rule}
|
|
20
21
|
# Autonomy: Background scripts (nohup/&) allowed | Never refuse monitoring/long tasks | Always wait for tool results before replying
|
|
21
22
|
# Tools: SearchLastOutput → for [TRUNCATED] | WebFetch/WebSearch → web | TmuxOffload → tasks > 5s | ReadJob → background results
|
|
22
23
|
# EFFICIENCY LAW (hard rule, zero exceptions): Tool calls cost round-trips + tokens — MINIMIZE them ruthlessly. NEVER drip-feed Grep/Glob/Read calls to hunt something: ONE Python() call that os.walk()s the tree and filters in kernel memory replaces 10+ search calls. If you're about to fire your 3rd search/read call for the SAME investigation, STOP — switch to Python and finish the whole hunt there (walk + regex + parse, print only the final slice). INDEPENDENT calls (reads, searches, fetches) → emit ALL of them in ONE response, never one per turn. DEPENDENT steps (scan → filter → drill down) → chain them INSIDE a single Python()/Bash() call, not across turns. The Python console is your working memory: load once, query forever.
|
|
@@ -25,7 +26,7 @@ You are Dulus, an AI coding agent. Think in English; reply to {user_name} in {re
|
|
|
25
26
|
# Multi-agent: Agent(subagent_type=...) | isolation="worktree" runs parallel | wait=false + name=... for fire-and-forget
|
|
26
27
|
# Rules: Edit > Write | Use absolute paths + line numbers | Surface errors immediately, do not retry blindly
|
|
27
28
|
# Input: "🎙 Transcribed:" prefix = voice input — tolerate typos/misspellings
|
|
28
|
-
# REPL: /help /batch /auto_show /verbose /soul /memory /schema /thinking /config
|
|
29
|
+
# REPL: /help /batch /auto_show /isolate /verbose /soul /memory /schema /thinking /config
|
|
29
30
|
{platform_hints}{git_info}{dulus_md}"""
|
|
30
31
|
|
|
31
32
|
_THINKING_LABELS = {1: "minimal", 2: "moderate", 3: "deep"}
|
|
@@ -468,6 +469,14 @@ def build_system_prompt(config: dict | None = None) -> str:
|
|
|
468
469
|
auto_show = "ON" if (not config or config.get("auto_show", True)) else "OFF"
|
|
469
470
|
lite = bool(config and config.get("lite_mode"))
|
|
470
471
|
|
|
472
|
+
# Isolate fragment is empty when OFF so the prompt stays byte-stable for
|
|
473
|
+
# prompt-cache across toggles-off sessions; when ON it injects a hard rule.
|
|
474
|
+
try:
|
|
475
|
+
from dulus_tools.isolate import prompt_fragment as _isolate_prompt_fragment
|
|
476
|
+
isolate_rule = _isolate_prompt_fragment(config)
|
|
477
|
+
except Exception:
|
|
478
|
+
isolate_rule = ""
|
|
479
|
+
|
|
471
480
|
# In LITE mode: drop the optional context blocks (platform hints, git info,
|
|
472
481
|
# DULUS.md, project memory index, batch/thinking/plan/tmux hints). The
|
|
473
482
|
# core identity + tool rules stay. This is what the /lite toggle was
|
|
@@ -479,6 +488,7 @@ def build_system_prompt(config: dict | None = None) -> str:
|
|
|
479
488
|
cwd=str(Path.cwd()),
|
|
480
489
|
platform=platform.system(),
|
|
481
490
|
auto_show=auto_show,
|
|
491
|
+
isolate_rule=isolate_rule,
|
|
482
492
|
user_name=user_name,
|
|
483
493
|
reply_language=reply_language,
|
|
484
494
|
platform_hints="" if lite else get_platform_hints(config),
|
|
@@ -5,6 +5,21 @@ All notable changes to Dulus will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## 3.13.9 — 2026-09-01
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **`/isolate [on|off|status]`**: locks Write / Edit / NotebookEdit and Bash mutations (`rm`, `mv`, `cp`, redirects, heredocs, pipes-to-file, etc.) to the frozen workspace root (+ dirs from `/add-dir`). Read-only tools stay free. Pure workspace bubble — no `/temp` escape hatch.
|
|
12
|
+
- Module: `dulus_tools/isolate.py` · wired through `tools.py` execute gate, `dulus.py` slash dispatch, `context.py` system-prompt hint, `config.py` default `isolate: false`.
|
|
13
|
+
- When blocked, Dulus tells you: *"/isolate no me deja trabajar fuera del workspace — escribe `/isolate off` si quieres que te ayude afuera"*.
|
|
14
|
+
|
|
15
|
+
### Tests
|
|
16
|
+
- Live-verified in tmux: writes outside DENY, writes inside OK; Bash mutations gated the same way.
|
|
17
|
+
|
|
18
|
+
## 3.13.8 — 2026-09-01
|
|
19
|
+
|
|
20
|
+
- **fix(gemini-web):** revert EU consent helpers that broke harvest (composer never mounted / spray-clicked Gemini UI).
|
|
21
|
+
- **docs:** README top nav under first 2 photos; community installs blurb → 100,000+.
|
|
22
|
+
|
|
8
23
|
## [Unreleased]
|
|
9
24
|
|
|
10
25
|
## [3.13.7] - 2026-09-01
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## 🔥🔥🔥 News (Pacific Time)
|
|
4
4
|
|
|
5
|
+
- September 1, 2026 (**v3.13.9**): **🔒 `/isolate` — workspace bubble, on demand.** Flip `/isolate on` and Write / Edit / NotebookEdit + Bash mutations stay locked to the frozen workspace root (plus anything you added with `/add-dir`). Read-only tools keep flying free. No `/temp` backdoor — pure bubble. Blocked? Dulus tells you straight: write `/isolate off` if you want help outside. `pip install -U dulus`. 🦅
|
|
6
|
+
|
|
7
|
+
- September 1, 2026 (**v3.13.8**): **Gemini-web harvest unblocked.** Reverted the EU/GDPR consent spray-click helpers (`_dismiss_eu_privacy_gates` / fabricated SOCS seed) that broke composer mount and left harvest hanging. Public `/harvest-gemini` is back to the pre-3.13.7 path. README top nav tightened under the first two photos; community blurb corrected to **100,000+ pip installs**. `pip install -U dulus`. 🦅
|
|
8
|
+
|
|
5
9
|
- September 1, 2026 (**v3.13.7 — 🔥 TODAY — Qwen UNCENSORED on the endpoint**): **Stock Fuel. Now.** Run `/login dulus`, then `/fuel` for balance + a console QR you can scan with Phantom/Solflare. Our router is **OpenAI-compatible** at `https://control.dulus.ai/v1` — drop it into anything that speaks `/v1/chat/completions`. **Today** we put **Qwen UNCENSORED** on that endpoint. Buy `$DULUS`, load Fuel, go. No premium pitch, no binary wall — the open runtime stays free; Fuel pays for hosted compute. `pip install -U dulus`. 🦅🇩🇴⛽
|
|
6
10
|
|
|
7
|
-
- August 31, 2026 (**Community — EU & the world**): **Something is happening — and we’re not slowing down.**
|
|
11
|
+
- August 31, 2026 (**Community — EU & the world**): **Something is happening — and we’re not slowing down.** **100,000+ pip installs** and climbing. Git clones just ripped: **2,058 clones / 326 unique cloners in 14 days**, with a vertical spike at the end of the month. To our people in **Europe**, this one’s for you. `/news` is now a live **broadcast** (latest 3 by default — no more dumping the whole archive into your console). Same posture as always — **no API key, no credit card, your machine**. Humans built this for humans. Europe, you’re in. Everybody else too. We’ll keep shipping like this. Love you. `pip install -U dulus`. 🦅🇩🇴
|
|
8
12
|
|
|
9
13
|
- August 31, 2026 (**v3.13.6**): **CI quality locked green.** WebChat guards `CONFIG` before pop (pyright clean) and background workers launch Windows-safe without bash-quoted `python -c` — win-3.13 flake gone. Hotfix patch on top of 3.13.5. `pip install -U dulus`. 🦅
|
|
10
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 3.13.
|
|
3
|
+
Version: 3.13.9
|
|
4
4
|
Summary: Provider-independent agent runtime for the terminal — cloud and local models, real tools, MCP, plugins, memory, sub-agents, and Dulus OS.
|
|
5
5
|
Author-email: KevRojo <dev@dulus.ai>
|
|
6
6
|
Maintainer-email: KevRojo <dev@dulus.ai>
|
|
@@ -106,6 +106,53 @@ Requires-Dist: pytesseract>=0.3.10; extra == "full"
|
|
|
106
106
|
<img width="1179" height="761" alt="image" src="https://github.com/user-attachments/assets/95c8a306-88e6-4f9d-a1aa-009ac38ebeaf" />
|
|
107
107
|
</p>
|
|
108
108
|
|
|
109
|
+
<p align="center">
|
|
110
|
+
<a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
|
|
111
|
+
·
|
|
112
|
+
<a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
|
|
113
|
+
·
|
|
114
|
+
<a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
|
|
115
|
+
</p>
|
|
116
|
+
|
|
117
|
+
<p align="center">
|
|
118
|
+
<strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
|
|
119
|
+
<a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
|
|
120
|
+
</p>
|
|
121
|
+
|
|
122
|
+
<p align="center">
|
|
123
|
+
<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 version"></a>
|
|
124
|
+
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
|
|
125
|
+
<a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
|
|
126
|
+
<a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
|
|
127
|
+
<a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
|
|
128
|
+
<img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
|
|
129
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
|
|
130
|
+
</p>
|
|
131
|
+
|
|
132
|
+
<p align="center">
|
|
133
|
+
<a href="#install-in-30-seconds"><strong>Install</strong></a> ·
|
|
134
|
+
<a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
|
|
135
|
+
<a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
|
|
136
|
+
<a href="#why-dulus"><strong>Why Dulus</strong></a> ·
|
|
137
|
+
<a href="#one-runtime-every-model"><strong>Models</strong></a> ·
|
|
138
|
+
<a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
|
|
139
|
+
<a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
|
|
140
|
+
<a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
|
|
141
|
+
<a href="#command-map"><strong>Commands</strong></a> ·
|
|
142
|
+
<a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
|
|
143
|
+
</p>
|
|
144
|
+
|
|
145
|
+
<p align="center">
|
|
146
|
+
<a href="docs/README_ES.md">Español</a> ·
|
|
147
|
+
<a href="docs/README_FR.md">Français</a> ·
|
|
148
|
+
<a href="docs/README_ZH.md">中文</a> ·
|
|
149
|
+
<a href="docs/README_JA.md">日本語</a> ·
|
|
150
|
+
<a href="docs/README_KO.md">한국어</a> ·
|
|
151
|
+
<a href="docs/README_PT.md">Português</a> ·
|
|
152
|
+
<a href="docs/README_RU.md">Русский</a> ·
|
|
153
|
+
<a href="docs/README_AR.md">العربية</a>
|
|
154
|
+
</p>
|
|
155
|
+
|
|
109
156
|
<p align="center">
|
|
110
157
|
<strong>Agentic AI for everyone. No API key. No credit card. Just <code>pip install</code>.</strong>
|
|
111
158
|
</p>
|
|
@@ -181,52 +228,6 @@ dulus
|
|
|
181
228
|
<strong>$DULUS</strong> · <code>control.dulus.ai/v1</code> · 12+ models · spent by the token 🦅
|
|
182
229
|
</p>
|
|
183
230
|
|
|
184
|
-
<p align="center">
|
|
185
|
-
<a href="#fuel--reload-wallet-qr-ready"><strong>⛽ /fuel walkthrough →</strong></a>
|
|
186
|
-
·
|
|
187
|
-
<a href="#get-your-dulus-api-key-no-website-required"><strong>🔑 API key from pip →</strong></a>
|
|
188
|
-
·
|
|
189
|
-
<a href="https://dulus.online"><strong>🚀 dulus.online</strong></a>
|
|
190
|
-
</p>
|
|
191
|
-
|
|
192
|
-
<p align="center">
|
|
193
|
-
<strong>🖥️ Prefer a desktop app?</strong> Download <strong>Dulus Premium</strong> — a signed, auto-updating build for Windows, macOS and Linux.<br>
|
|
194
|
-
<a href="https://github.com/Dulus-Ai/dulus-updates/releases/latest"><strong>⬇️ Download the latest binaries → github.com/Dulus-Ai/dulus-updates</strong></a>
|
|
195
|
-
</p>
|
|
196
|
-
|
|
197
|
-
<p align="center">
|
|
198
|
-
<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 version"></a>
|
|
199
|
-
<a href="https://pypi.org/project/dulus/"><img src="https://static.pepy.tech/badge/dulus?style=flat-square" alt="PyPI downloads"></a>
|
|
200
|
-
<a href="https://github.com/KevRojo/Dulus/releases"><img src="https://img.shields.io/github/v/release/KevRojo/Dulus?style=flat-square&color=ff6b1f&labelColor=07070a" alt="Latest release"></a>
|
|
201
|
-
<a href="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml"><img src="https://github.com/KevRojo/Dulus/actions/workflows/ci.yml/badge.svg" alt="Quality checks"></a>
|
|
202
|
-
<a href="https://github.com/KevRojo/Dulus/pkgs/container/dulus"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fkevrojo%2Fdulus-ff6b1f?style=flat-square&labelColor=07070a&logo=docker" alt="Docker image"></a>
|
|
203
|
-
<img src="https://img.shields.io/badge/python-3.10%2B-ff6b1f?style=flat-square&labelColor=07070a&logo=python" alt="Python 3.10+">
|
|
204
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-ff6b1f?style=flat-square&labelColor=07070a" alt="GPLv3 license"></a>
|
|
205
|
-
</p>
|
|
206
|
-
|
|
207
|
-
<p align="center">
|
|
208
|
-
<a href="#install-in-30-seconds"><strong>Install</strong></a> ·
|
|
209
|
-
<a href="#get-your-dulus-api-key-no-website-required"><strong>API key</strong></a> ·
|
|
210
|
-
<a href="#fuel--reload-wallet-qr-ready"><strong>Fuel / QR</strong></a> ·
|
|
211
|
-
<a href="#why-dulus"><strong>Why Dulus</strong></a> ·
|
|
212
|
-
<a href="#one-runtime-every-model"><strong>Models</strong></a> ·
|
|
213
|
-
<a href="#turn-any-python-repo-into-tools"><strong>Extensions</strong></a> ·
|
|
214
|
-
<a href="#agents-that-can-work-without-disappearing"><strong>Agents</strong></a> ·
|
|
215
|
-
<a href="#one-engine-four-surfaces"><strong>Surfaces</strong></a> ·
|
|
216
|
-
<a href="#command-map"><strong>Commands</strong></a> ·
|
|
217
|
-
<a href="https://kevrojo.github.io/Dulus/"><strong>Live tour ↗</strong></a>
|
|
218
|
-
</p>
|
|
219
|
-
|
|
220
|
-
<p align="center">
|
|
221
|
-
<a href="docs/README_ES.md">Español</a> ·
|
|
222
|
-
<a href="docs/README_FR.md">Français</a> ·
|
|
223
|
-
<a href="docs/README_ZH.md">中文</a> ·
|
|
224
|
-
<a href="docs/README_JA.md">日本語</a> ·
|
|
225
|
-
<a href="docs/README_KO.md">한국어</a> ·
|
|
226
|
-
<a href="docs/README_PT.md">Português</a> ·
|
|
227
|
-
<a href="docs/README_RU.md">Русский</a> ·
|
|
228
|
-
<a href="docs/README_AR.md">العربية</a>
|
|
229
|
-
</p>
|
|
230
231
|
|
|
231
232
|
---
|
|
232
233
|
|
|
@@ -173,6 +173,7 @@ dulus_tools/clipboard_utils.py
|
|
|
173
173
|
dulus_tools/diff_visualizer.py
|
|
174
174
|
dulus_tools/export_import.py
|
|
175
175
|
dulus_tools/hook_engine.py
|
|
176
|
+
dulus_tools/isolate.py
|
|
176
177
|
dulus_tools/notification_manager.py
|
|
177
178
|
dulus_tools/session_fork.py
|
|
178
179
|
dulus_tools/shell_mode.py
|