dulus 3.10.2__tar.gz → 3.10.3__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.10.2/dulus.egg-info → dulus-3.10.3}/PKG-INFO +1 -1
- {dulus-3.10.2 → dulus-3.10.3/dulus.egg-info}/PKG-INFO +1 -1
- {dulus-3.10.2 → dulus-3.10.3}/dulus.py +172 -0
- {dulus-3.10.2 → dulus-3.10.3}/pyproject.toml +1 -1
- {dulus-3.10.2 → dulus-3.10.3}/LICENSE +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/MANIFEST.in +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/README.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/agent.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/analytics.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/agents_bridge.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/compressor.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/context.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/githook.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/marketplace.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/mempalace_bridge.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/personas.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/plugins.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/server.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/backend/tasks.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/batch_api.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/checkpoint/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/checkpoint/hooks.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/checkpoint/store.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/checkpoint/types.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/claude_code_watcher.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/clipboard_utils.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/cloudsave.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/common.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/compaction.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/config.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/context.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/active_persona.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/marketplace.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/personas.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/plugins/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/plugins/composio/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/plugins/composio/plugin.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/data/tasks.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/display_blocks.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/API.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/BRAND_GUIDE.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/CHANGELOG.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/CONTRIBUTING.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/DEPLOYMENT.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/FAQ.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/GETTING_STARTED.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/INVESTOR_BRIEF.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_AR.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_EN.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_ES.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_FR.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_JA.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_KO.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_PT.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_RU.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/README_ZH.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/SECURITY.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/api.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/architecture.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/azure-speech-template.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/dashboard/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/divider.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/dulus-bird.png +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/generate.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/hero.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/news.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/nvidia-models.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/particle-playground.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/personas/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/poetry-banner.png +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/preview.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-agents.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-brainstorm.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-bridges.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-features.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-freetier.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-memory.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-models.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-perms.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-plugins.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-quickstart.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/sec-ssj.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/spinners.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/split-pane.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/docs/terminal-boot.svg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus.egg-info/SOURCES.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus.egg-info/requires.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus.egg-info/top_level.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_gui.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_gui_web.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_mcp/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_mcp/client.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_mcp/commands.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_mcp/config.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_mcp/hub.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_mcp/tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_mcp/types.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/add_dir_manager.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/afk_mode.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/approval_runtime.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/background_tasks.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/clipboard_utils.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/diff_visualizer.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/export_import.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/hook_engine.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/notification_manager.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/session_fork.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/shell_mode.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/todo_visualizer.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/tree_ls.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/wire_events.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/dulus_tools/yolo_mode.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/file_filter.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/governance.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/agent_bridge.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/chat_widget.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/App.tsx +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/THIRD_PARTY_NOTICES.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/dist/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/dist/standalone.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/index.tsx +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/metadata.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/package-lock.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/package.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/types.ts +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/utils.ts +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/vertex-ai-proxy-interceptor.js +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/dulus_orchestrator/vite.config.ts +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/main_window.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/personas.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/sandbox_server.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/session_utils.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/settings_dialog.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/sidebar.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/tasks_view.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/themes.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/gui/tool_panel.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/input.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/license_manager.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/audit.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/consolidator.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/context.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/offload.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/palace.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/scan.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/sessions.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/store.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/types.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/memory/vector_search.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/multi_agent/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/multi_agent/subagent.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/multi_agent/tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/offload_helper.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/paste_placeholders.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/personality_config.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/plugin/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/plugin/autoadapter.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/plugin/loader.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/plugin/recommend.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/plugin/store.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/plugin/types.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/profiles.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/providers.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/README.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/components.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/wallpaper-default.jpg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/wallpapers/default.jpeg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/wallpapers/light.jpeg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/wallpapers/nature.jpeg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/dist/wallpapers/tech.jpeg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/eslint.config.js +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/info.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/package-lock.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/package.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/postcss.config.js +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/tailwind.config.js +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/tsconfig.app.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/tsconfig.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/tsconfig.node.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox/vite.config.ts +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/sandbox_bootstrap.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/setup.cfg +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/builtin.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/LICENSE-obsidian-skills +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/README.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/defuddle/SKILL.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/json-canvas/SKILL.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/obsidian-bases/SKILL.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/obsidian-cli/SKILL.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/README.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/SKILL.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/addresses.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/advancedbackgroundchecks.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/beenverified.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/clustal.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/clustrmaps.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/cyberbackgroundchecks.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/familytreenow.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/fastpeoplesearch.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/intelius.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/mylife.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/nuwber.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/peekyou.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/peoplefinders.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/radaris.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/rehold.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/searchpeoplefree.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/socialcatfish.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/spokeo.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/thatsthem.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/truepeoplesearch.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/usphonebook.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/brokers/whitepages.json +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/legal/ccpa.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/legal/drop.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/legal/gdpr.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/methods.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/site-playbooks.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/references/state-machine.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/autopilot.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/badbool.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/brokers.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/cdp.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/config.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/crypto.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/dossier.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/email_modes.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/emailer.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/ledger.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/legal.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/paths.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/pdd.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/registry.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/report.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/scan.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/storage.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/tiers.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/scripts/vectors.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/templates/consent/authorization.md +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/templates/emails/ccpa-authorized-agent.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/templates/emails/ccpa-deletion.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/templates/emails/ccpa-indirect-deletion.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/templates/emails/gdpr-erasure.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/bundled/unbroker/templates/emails/generic-optout.txt +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/clawhub.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/executor.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/loader.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skill/tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/skills.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/soul.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/spinner.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/steer_input.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/string_utils.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/subagent.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/task/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/task/store.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/task/tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/task/types.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_afk_yolo.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_approval_runtime.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_background_task_tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_background_tasks.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_checkpoint.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_clipboard_utils.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_compaction.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_diff_view.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_diff_visualization.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_display_blocks.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_export_import.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_hook_engine.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_injection_fix.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_license.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_mcp.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_memory.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_notification_manager.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_plugin.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_session_fork.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_shell_mode.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_skills.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_steer_input.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_subagent.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_task.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_telegram_buffer.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_think_tool.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_todo_tool.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_todo_visualization.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_tool_registry.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_tree_ls.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_voice.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tests/test_wire_events.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tmux_offloader.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tmux_tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tool_registry.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tools_background.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tools_think.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/tools_todo.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/ui/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/ui/input.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/ui/render.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/updater.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/voice/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/voice/audio_utils.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/voice/keyterms.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/voice/recorder.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/voice/stt.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/voice/tts.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/voice/wake_word.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webbridge/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webbridge/core.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webbridge/tools.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webchat.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webchat_server.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webchat_ui/__init__.py +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webchat_ui/app.js +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webchat_ui/index.html +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/webchat_ui/style.css +0 -0
- {dulus-3.10.2 → dulus-3.10.3}/welcome.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 3.10.
|
|
3
|
+
Version: 3.10.3
|
|
4
4
|
Summary: Use IA as an agent without an API key. $0. Harvest your browser session for Gemini (guest, no login), Claude.ai, Claude Code, Kimi.com, Qwen, DeepSeek — drive them like an API, no per-token billing. Plus LiteLLM (100+ paid providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, voice, OCR, MemPalace, embedded sandbox OS.
|
|
5
5
|
Author: KevRojo
|
|
6
6
|
License: GPL-3.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 3.10.
|
|
3
|
+
Version: 3.10.3
|
|
4
4
|
Summary: Use IA as an agent without an API key. $0. Harvest your browser session for Gemini (guest, no login), Claude.ai, Claude Code, Kimi.com, Qwen, DeepSeek — drive them like an API, no per-token billing. Plus LiteLLM (100+ paid providers), local models via Ollama, /lang in 34 languages, Mesa Redonda, voice, OCR, MemPalace, embedded sandbox OS.
|
|
5
5
|
Author: KevRojo
|
|
6
6
|
License: GPL-3.0
|
|
@@ -121,6 +121,7 @@ Slash commands in REPL:
|
|
|
121
121
|
/roundtable Start a multi-model roundtable discussion
|
|
122
122
|
/fork Fork session at a given turn
|
|
123
123
|
/undo Undo last turn
|
|
124
|
+
/workspace [cmd] Manage Dulus workspaces (switch/list/default)
|
|
124
125
|
/add-dir [path] Manage additional workspace directories
|
|
125
126
|
/import <file> Import conversation from file or session
|
|
126
127
|
/harvest Harvest Claude.ai cookies (alias: /harvest-claude)
|
|
@@ -854,6 +855,7 @@ _HELP_PAGES = [
|
|
|
854
855
|
("/cost", "Show API cost this session"),
|
|
855
856
|
("/fork", "Fork session at a given turn"),
|
|
856
857
|
("/undo", "Undo last turn"),
|
|
858
|
+
("/workspace [cmd]", "Manage Dulus workspaces (switch/list/default)"),
|
|
857
859
|
("/import <file>","Import conversation from file/session"),
|
|
858
860
|
("/add-dir [path]","Manage additional workspace directories"),
|
|
859
861
|
("/batch", "Manage Kimi Batch tasks"),
|
|
@@ -4012,6 +4014,167 @@ def cmd_cwd(args: str, _state, config) -> bool:
|
|
|
4012
4014
|
err(str(e))
|
|
4013
4015
|
return True
|
|
4014
4016
|
|
|
4017
|
+
|
|
4018
|
+
# ── Workspace manager ───────────────────────────────────────────────────────
|
|
4019
|
+
|
|
4020
|
+
_WORKSPACES_DIR: Path = Path.home() / ".dulus" / "workspaces"
|
|
4021
|
+
_DEFAULT_WORKSPACE: str = "workspace1"
|
|
4022
|
+
|
|
4023
|
+
|
|
4024
|
+
def _workspace_path(name: str) -> Path:
|
|
4025
|
+
return _WORKSPACES_DIR / name
|
|
4026
|
+
|
|
4027
|
+
|
|
4028
|
+
def _ensure_workspace(name: str) -> Path:
|
|
4029
|
+
"""Create workspace dir if missing and return its path."""
|
|
4030
|
+
ws = _workspace_path(name)
|
|
4031
|
+
ws.mkdir(parents=True, exist_ok=True)
|
|
4032
|
+
return ws
|
|
4033
|
+
|
|
4034
|
+
|
|
4035
|
+
def _list_workspaces() -> list[str]:
|
|
4036
|
+
if not _WORKSPACES_DIR.exists():
|
|
4037
|
+
return []
|
|
4038
|
+
return sorted(p.name for p in _WORKSPACES_DIR.iterdir() if p.is_dir())
|
|
4039
|
+
|
|
4040
|
+
|
|
4041
|
+
def _current_workspace_name() -> str | None:
|
|
4042
|
+
"""Return the workspace name if cwd is inside ~/.dulus/workspaces/."""
|
|
4043
|
+
try:
|
|
4044
|
+
cwd = Path.cwd().resolve()
|
|
4045
|
+
root = _WORKSPACES_DIR.resolve()
|
|
4046
|
+
if root in cwd.parents or cwd == root:
|
|
4047
|
+
rel = cwd.relative_to(root)
|
|
4048
|
+
first = rel.parts[0] if rel.parts else None
|
|
4049
|
+
if first and _workspace_path(first).is_dir():
|
|
4050
|
+
return first
|
|
4051
|
+
except Exception:
|
|
4052
|
+
pass
|
|
4053
|
+
return None
|
|
4054
|
+
|
|
4055
|
+
|
|
4056
|
+
def _activate_workspace(name: str, config: dict) -> bool:
|
|
4057
|
+
"""Change cwd into workspace, create it if missing, and persist as last used."""
|
|
4058
|
+
from config import save_config
|
|
4059
|
+
ws = _ensure_workspace(name)
|
|
4060
|
+
try:
|
|
4061
|
+
os.chdir(ws)
|
|
4062
|
+
config["workspace_last"] = name
|
|
4063
|
+
save_config(config)
|
|
4064
|
+
# Directory changed — git info is stale
|
|
4065
|
+
if _git_prompt is not None:
|
|
4066
|
+
_git_prompt.reset_git_cache()
|
|
4067
|
+
return True
|
|
4068
|
+
except Exception as e:
|
|
4069
|
+
err(f"No pude cambiar al workspace '{name}': {e}")
|
|
4070
|
+
return False
|
|
4071
|
+
|
|
4072
|
+
|
|
4073
|
+
def _apply_workspace(config: dict) -> None:
|
|
4074
|
+
"""At boot, move cwd into the last-used workspace (or workspace1)."""
|
|
4075
|
+
last = config.get("workspace_last") or _DEFAULT_WORKSPACE
|
|
4076
|
+
ws = _workspace_path(last)
|
|
4077
|
+
if not ws.exists():
|
|
4078
|
+
_ensure_workspace(last)
|
|
4079
|
+
try:
|
|
4080
|
+
os.chdir(ws)
|
|
4081
|
+
if config.get("verbose", False):
|
|
4082
|
+
info(f"Workspace activo: {last}")
|
|
4083
|
+
except Exception as e:
|
|
4084
|
+
warn(f"No pude entrar al workspace '{last}': {e}")
|
|
4085
|
+
|
|
4086
|
+
|
|
4087
|
+
def cmd_workspace(args: str, _state, config) -> bool:
|
|
4088
|
+
"""Manage Dulus workspaces under ~/.dulus/workspaces.
|
|
4089
|
+
|
|
4090
|
+
/workspace — show current workspace + cwd
|
|
4091
|
+
/workspace current — same as above
|
|
4092
|
+
/workspace list — list workspaces
|
|
4093
|
+
/workspace switch <name> — change to workspace (creates if missing)
|
|
4094
|
+
/workspace default [name] — show or set the startup workspace
|
|
4095
|
+
/workspace create <name> — create a workspace without switching
|
|
4096
|
+
/workspace delete <name> — delete a workspace (must be empty)
|
|
4097
|
+
"""
|
|
4098
|
+
from config import save_config
|
|
4099
|
+
parts = args.strip().split(None, 1)
|
|
4100
|
+
subcmd = parts[0].lower() if parts else "current"
|
|
4101
|
+
rest = parts[1].strip() if len(parts) > 1 else ""
|
|
4102
|
+
|
|
4103
|
+
if subcmd in ("current", "cwd", ""):
|
|
4104
|
+
current = _current_workspace_name()
|
|
4105
|
+
if current:
|
|
4106
|
+
info(f"Workspace: {current}")
|
|
4107
|
+
else:
|
|
4108
|
+
info("No estás dentro de un workspace de Dulus.")
|
|
4109
|
+
info(f"Working directory: {os.getcwd()}")
|
|
4110
|
+
return True
|
|
4111
|
+
|
|
4112
|
+
if subcmd == "list":
|
|
4113
|
+
workspaces = _list_workspaces()
|
|
4114
|
+
current = _current_workspace_name()
|
|
4115
|
+
if not workspaces:
|
|
4116
|
+
info("No hay workspaces todavía. Usa /workspace create <nombre>.")
|
|
4117
|
+
return True
|
|
4118
|
+
info(f"Workspaces en {_WORKSPACES_DIR}:")
|
|
4119
|
+
for w in workspaces:
|
|
4120
|
+
mark = " → " if w == current else " "
|
|
4121
|
+
print(f"{mark}{w}")
|
|
4122
|
+
return True
|
|
4123
|
+
|
|
4124
|
+
if subcmd == "switch":
|
|
4125
|
+
if not rest:
|
|
4126
|
+
err("Uso: /workspace switch <nombre>")
|
|
4127
|
+
return True
|
|
4128
|
+
name = rest.split()[0]
|
|
4129
|
+
if _activate_workspace(name, config):
|
|
4130
|
+
ok(f"Workspace cambiado a: {name}")
|
|
4131
|
+
return True
|
|
4132
|
+
|
|
4133
|
+
if subcmd == "default":
|
|
4134
|
+
if not rest:
|
|
4135
|
+
current_default = config.get("workspace_last") or _DEFAULT_WORKSPACE
|
|
4136
|
+
info(f"Workspace por defecto: {current_default}")
|
|
4137
|
+
return True
|
|
4138
|
+
name = rest.split()[0]
|
|
4139
|
+
_ensure_workspace(name)
|
|
4140
|
+
config["workspace_last"] = name
|
|
4141
|
+
save_config(config)
|
|
4142
|
+
ok(f"Workspace por defecto ahora: {name}")
|
|
4143
|
+
return True
|
|
4144
|
+
|
|
4145
|
+
if subcmd == "create":
|
|
4146
|
+
if not rest:
|
|
4147
|
+
err("Uso: /workspace create <nombre>")
|
|
4148
|
+
return True
|
|
4149
|
+
name = rest.split()[0]
|
|
4150
|
+
_ensure_workspace(name)
|
|
4151
|
+
ok(f"Workspace creado: {name}")
|
|
4152
|
+
return True
|
|
4153
|
+
|
|
4154
|
+
if subcmd == "delete":
|
|
4155
|
+
if not rest:
|
|
4156
|
+
err("Uso: /workspace delete <nombre>")
|
|
4157
|
+
return True
|
|
4158
|
+
name = rest.split()[0]
|
|
4159
|
+
target = _workspace_path(name)
|
|
4160
|
+
if not target.exists():
|
|
4161
|
+
err(f"Workspace '{name}' no existe.")
|
|
4162
|
+
return True
|
|
4163
|
+
current = _current_workspace_name()
|
|
4164
|
+
if name == current:
|
|
4165
|
+
err("No puedes borrar el workspace en el que estás. Cambia primero con /workspace switch.")
|
|
4166
|
+
return True
|
|
4167
|
+
try:
|
|
4168
|
+
target.rmdir()
|
|
4169
|
+
ok(f"Workspace borrado: {name}")
|
|
4170
|
+
except OSError as e:
|
|
4171
|
+
err(f"No se pudo borrar '{name}': {e}. Asegúrate de que esté vacío.")
|
|
4172
|
+
return True
|
|
4173
|
+
|
|
4174
|
+
err(f"Subcomando desconocido: /workspace {subcmd}")
|
|
4175
|
+
return True
|
|
4176
|
+
|
|
4177
|
+
|
|
4015
4178
|
def _build_session_data(state, session_id: str | None = None) -> dict:
|
|
4016
4179
|
"""Serialize current conversation state to a JSON-serializable dict."""
|
|
4017
4180
|
import uuid
|
|
@@ -9935,6 +10098,7 @@ COMMANDS = {
|
|
|
9935
10098
|
"export": cmd_export,
|
|
9936
10099
|
"fork": cmd_fork,
|
|
9937
10100
|
"undo": cmd_undo,
|
|
10101
|
+
"workspace": cmd_workspace,
|
|
9938
10102
|
"add-dir": cmd_add_dir,
|
|
9939
10103
|
"import": cmd_import,
|
|
9940
10104
|
"copy": cmd_copy,
|
|
@@ -10068,6 +10232,7 @@ _CMD_META: dict[str, tuple[str, list[str]]] = {
|
|
|
10068
10232
|
"export": ("Export conversation to file", []),
|
|
10069
10233
|
"fork": ("Fork session at a turn", []),
|
|
10070
10234
|
"undo": ("Undo last turn", []),
|
|
10235
|
+
"workspace": ("Manage Dulus workspaces", ["current", "list", "switch", "default", "create", "delete"]),
|
|
10071
10236
|
"add-dir": ("Manage additional workspace dirs", ["list", "remove"]),
|
|
10072
10237
|
"import": ("Import from file or session", []),
|
|
10073
10238
|
"copy": ("Copy last response or file to clipboard", ["file"]),
|
|
@@ -10518,6 +10683,13 @@ def repl(config: dict, initial_prompt: str = None):
|
|
|
10518
10683
|
except Exception:
|
|
10519
10684
|
pass
|
|
10520
10685
|
|
|
10686
|
+
# ── Workspace: start in the last-used workspace (or workspace1) ──────────
|
|
10687
|
+
try:
|
|
10688
|
+
_apply_workspace(config)
|
|
10689
|
+
except Exception as _e:
|
|
10690
|
+
if config.get("verbose", False):
|
|
10691
|
+
warn(f"Workspace init skipped: {_e}")
|
|
10692
|
+
|
|
10521
10693
|
# ── Auto-update check (on by default; /update off to disable) ─────────
|
|
10522
10694
|
# Keep every Dulus in the world on the latest release: the organism
|
|
10523
10695
|
# heals fastest when fixes propagate instantly. This is intentionally
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dulus"
|
|
7
|
-
version = "3.10.
|
|
7
|
+
version = "3.10.3"
|
|
8
8
|
description = "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."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|