dulus 3.9.3__tar.gz → 3.9.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dulus-3.9.3/dulus.egg-info → dulus-3.9.4}/PKG-INFO +1 -1
- {dulus-3.9.3 → dulus-3.9.4}/config.py +28 -2
- {dulus-3.9.3 → dulus-3.9.4/dulus.egg-info}/PKG-INFO +1 -1
- {dulus-3.9.3 → dulus-3.9.4}/pyproject.toml +1 -1
- {dulus-3.9.3 → dulus-3.9.4}/LICENSE +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/MANIFEST.in +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/README.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/agent.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/analytics.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/agents_bridge.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/compressor.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/context.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/githook.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/marketplace.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/mempalace_bridge.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/personas.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/plugins.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/server.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/backend/tasks.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/batch_api.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/checkpoint/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/checkpoint/hooks.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/checkpoint/store.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/checkpoint/types.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/claude_code_watcher.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/clipboard_utils.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/cloudsave.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/common.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/compaction.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/context.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/active_persona.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/marketplace.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/personas.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/plugins/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/plugin.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/data/tasks.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/API.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/BRAND_GUIDE.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/CHANGELOG.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/CONTRIBUTING.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/DEPLOYMENT.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/Dulus_AI_Whitepaper_(v2.0).pdf +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/FAQ.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/GETTING_STARTED.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/INVESTOR_BRIEF.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_AR.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_EN.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_ES.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_FR.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_JA.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_KO.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_PT.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_RU.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/README_ZH.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/SECURITY.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/api.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/architecture.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/azure-speech-template.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/dashboard/index.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/divider.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/dulus-bird.png +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/generate.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/hero.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/index.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/news.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/nvidia-models.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/particle-playground.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/personas/index.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/poetry-banner.png +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/preview.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-agents.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-brainstorm.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-bridges.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-features.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-freetier.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-memory.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-models.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-perms.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-plugins.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-quickstart.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/sec-ssj.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/spinners.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/split-pane.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/docs/terminal-boot.svg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/SOURCES.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/requires.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus.egg-info/top_level.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_gui.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_gui_web.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/client.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/commands.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/config.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/hub.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_mcp/types.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/add_dir_manager.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/afk_mode.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/approval_runtime.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/background_tasks.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/clipboard_utils.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/diff_visualizer.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/export_import.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/hook_engine.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/notification_manager.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/session_fork.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/shell_mode.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/todo_visualizer.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/tree_ls.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/wire_events.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/dulus_tools/yolo_mode.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/governance.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/agent_bridge.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/chat_widget.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/App.tsx +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/THIRD_PARTY_NOTICES.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/dist/index.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/dist/standalone.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/index.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/index.tsx +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/metadata.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/package-lock.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/package.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/types.ts +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/utils.ts +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/vertex-ai-proxy-interceptor.js +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/dulus_orchestrator/vite.config.ts +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/main_window.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/personas.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/sandbox_server.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/session_utils.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/settings_dialog.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/sidebar.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/tasks_view.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/themes.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/gui/tool_panel.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/input.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/license_manager.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/audit.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/consolidator.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/context.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/offload.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/palace.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/scan.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/sessions.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/store.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/types.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/memory/vector_search.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/multi_agent/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/multi_agent/subagent.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/multi_agent/tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/offload_helper.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/personality_config.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/plugin/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/plugin/autoadapter.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/plugin/loader.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/plugin/recommend.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/plugin/store.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/plugin/types.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/providers.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/README.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/components.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/assets/index-DE51D6wI.css +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/assets/index-DMCCNE9Y.js +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/index.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpaper-default.jpg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/default.jpeg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/light.jpeg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/nature.jpeg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/dist/wallpapers/tech.jpeg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/eslint.config.js +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/index.html +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/info.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/package-lock.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/package.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/postcss.config.js +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/tailwind.config.js +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/tsconfig.app.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/tsconfig.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/tsconfig.node.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox/vite.config.ts +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/sandbox_bootstrap.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/setup.cfg +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/builtin.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/LICENSE-obsidian-skills +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/README.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/defuddle/SKILL.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/json-canvas/SKILL.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/json-canvas/references/EXAMPLES.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-bases/SKILL.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-cli/SKILL.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/SKILL.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/references/CALLOUTS.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/references/EMBEDS.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/obsidian-markdown/references/PROPERTIES.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/README.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/SKILL.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/addresses.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/advancedbackgroundchecks.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/beenverified.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/clustal.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/clustrmaps.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/cyberbackgroundchecks.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/familytreenow.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/fastpeoplesearch.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/intelius.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/mylife.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/nuwber.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/peekyou.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/peoplefinders.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/radaris.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/rehold.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/searchpeoplefree.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/socialcatfish.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/spokeo.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/thatsthem.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/truepeoplesearch.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/usphonebook.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/brokers/whitepages.json +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/legal/ccpa.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/legal/drop.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/legal/gdpr.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/methods.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/site-playbooks.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/references/state-machine.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/autopilot.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/badbool.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/brokers.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/cdp.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/config.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/crypto.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/dossier.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/email_modes.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/emailer.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/ledger.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/legal.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/paths.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/pdd.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/registry.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/report.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/scan.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/storage.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/tiers.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/scripts/vectors.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/consent/authorization.md +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/ccpa-authorized-agent.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/ccpa-deletion.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/ccpa-indirect-deletion.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/gdpr-erasure.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/bundled/unbroker/templates/emails/generic-optout.txt +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/clawhub.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/executor.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/loader.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skill/tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/skills.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/soul.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/spinner.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/string_utils.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/subagent.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/task/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/task/store.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/task/tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/task/types.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_afk_yolo.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_approval_runtime.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_background_task_tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_background_tasks.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_checkpoint.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_clipboard_utils.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_compaction.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_diff_view.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_diff_visualization.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_display_blocks.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_export_import.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_hook_engine.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_injection_fix.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_license.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_mcp.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_memory.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_notification_manager.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_plugin.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_session_fork.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_shell_mode.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_skills.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_steer_input.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_subagent.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_task.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_telegram_buffer.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_think_tool.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_todo_tool.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_todo_visualization.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_tool_registry.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_tree_ls.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_voice.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tests/test_wire_events.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tmux_offloader.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tmux_tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tool_registry.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/ui/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/ui/input.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/ui/render.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/updater.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/voice/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/voice/audio_utils.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/voice/keyterms.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/voice/recorder.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/voice/stt.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/voice/tts.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/voice/wake_word.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/webbridge/__init__.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/webbridge/core.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/webbridge/tools.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/webchat.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/webchat_server.py +0 -0
- {dulus-3.9.3 → dulus-3.9.4}/welcome.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 3.9.
|
|
3
|
+
Version: 3.9.4
|
|
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
|
|
@@ -198,8 +198,34 @@ def load_config() -> dict:
|
|
|
198
198
|
|
|
199
199
|
def save_config(cfg: dict):
|
|
200
200
|
CONFIG_DIR.mkdir(exist_ok=True)
|
|
201
|
-
#
|
|
202
|
-
|
|
201
|
+
# Build a complete config from defaults + whatever is already on disk, THEN
|
|
202
|
+
# apply the runtime changes on top. This prevents catastrophic resets: if a
|
|
203
|
+
# caller passes a thin `cfg` (e.g. only {"lang", "user_name"} at early
|
|
204
|
+
# startup or from a command that rebuilt a minimal dict), we must NOT drop
|
|
205
|
+
# every other key the user had. Previously we wrote `cfg` verbatim, so a
|
|
206
|
+
# thin dict wiped the entire config down to those few keys — exactly the
|
|
207
|
+
# "config shrank to lang+user_name" bug. Mirror the private repo's logic.
|
|
208
|
+
data = dict(DEFAULTS)
|
|
209
|
+
if CONFIG_FILE.exists():
|
|
210
|
+
try:
|
|
211
|
+
existing = json.loads(CONFIG_FILE.read_text(encoding="utf-8"))
|
|
212
|
+
if isinstance(existing, dict):
|
|
213
|
+
data.update(existing)
|
|
214
|
+
except Exception:
|
|
215
|
+
# Corrupt on-disk config: fall back to the last-known-good backup so
|
|
216
|
+
# we still don't lose the user's keys on this save.
|
|
217
|
+
try:
|
|
218
|
+
backup = CONFIG_FILE.with_suffix(".json.bak")
|
|
219
|
+
if backup.exists():
|
|
220
|
+
bdata = json.loads(backup.read_text(encoding="utf-8"))
|
|
221
|
+
if isinstance(bdata, dict):
|
|
222
|
+
data.update(bdata)
|
|
223
|
+
except Exception:
|
|
224
|
+
pass
|
|
225
|
+
# Strip internal runtime keys (e.g. _run_query_callback), then apply the
|
|
226
|
+
# caller's runtime changes on top of the merged base.
|
|
227
|
+
runtime = {k: v for k, v in cfg.items() if not k.startswith("_")}
|
|
228
|
+
data.update(runtime)
|
|
203
229
|
# Encrypt API keys before saving
|
|
204
230
|
data = _secure_keys(dict(data))
|
|
205
231
|
payload = json.dumps(data, indent=2)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 3.9.
|
|
3
|
+
Version: 3.9.4
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dulus"
|
|
7
|
-
version = "3.9.
|
|
7
|
+
version = "3.9.4"
|
|
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
|
|
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
|