dulus 0.2.35__tar.gz → 0.2.36__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-0.2.35/dulus.egg-info → dulus-0.2.36}/PKG-INFO +1 -1
- {dulus-0.2.35 → dulus-0.2.36/dulus.egg-info}/PKG-INFO +1 -1
- {dulus-0.2.35 → dulus-0.2.36}/dulus.py +5 -2
- {dulus-0.2.35 → dulus-0.2.36}/pyproject.toml +1 -1
- {dulus-0.2.35 → dulus-0.2.36}/LICENSE +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/MANIFEST.in +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/README.md +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/agent.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/compressor.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/context.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/githook.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/marketplace.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/personas.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/plugins.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/server.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/backend/tasks.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/batch_api.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/checkpoint/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/checkpoint/hooks.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/checkpoint/store.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/checkpoint/types.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/claude_code_watcher.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/clipboard_utils.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/cloudsave.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/common.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/compaction.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/config.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/context.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/active_persona.json +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/context.json +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/marketplace.json +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/personas.json +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/plugins/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/plugins/composio/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/plugins/composio/plugin.json +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/data/tasks.json +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/README.md +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/api.html +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/architecture.md +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/dashboard/index.html +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/divider.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/generate.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/hero.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/index.html +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/news.md +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/particle-playground.html +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/personas/index.html +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/poetry-banner.png +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/preview.html +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-agents.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-features.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-memory.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-models.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-perms.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/spinners.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/split-pane.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/docs/uploads/particle-playground.html +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus.egg-info/SOURCES.txt +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus.egg-info/requires.txt +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus.egg-info/top_level.txt +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus_gui.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus_mcp/client.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus_mcp/config.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/dulus_mcp/types.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/agent_bridge.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/chat_widget.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/main_window.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/personas.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/session_utils.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/settings_dialog.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/sidebar.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/tasks_view.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/themes.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/gui/tool_panel.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/input.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/license_manager.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/audit.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/consolidator.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/context.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/offload.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/palace.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/scan.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/sessions.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/store.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/tools.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/types.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/memory/vector_search.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/multi_agent/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/multi_agent/subagent.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/multi_agent/tools.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/offload_helper.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/plugin/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/plugin/autoadapter.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/plugin/loader.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/plugin/recommend.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/plugin/store.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/plugin/types.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/providers.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/setup.cfg +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/skill/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/skill/builtin.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/skill/clawhub.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/skill/executor.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/skill/loader.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/skill/tools.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/skills.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/spinner.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/string_utils.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/subagent.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/task/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/task/store.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/task/tools.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/task/types.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_compaction.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_diff_view.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_license.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_mcp.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_memory.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_plugin.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_skills.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_subagent.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_task.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_tool_registry.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tests/test_voice.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tmux_offloader.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tmux_tools.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tool_registry.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/tools.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/ui/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/ui/input.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/ui/render.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/voice/__init__.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/voice/keyterms.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/voice/recorder.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/voice/stt.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/voice/tts.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/webchat.py +0 -0
- {dulus-0.2.35 → dulus-0.2.36}/webchat_server.py +0 -0
|
@@ -238,7 +238,7 @@ try:
|
|
|
238
238
|
from importlib.metadata import version as _pkg_version
|
|
239
239
|
VERSION = _pkg_version("dulus")
|
|
240
240
|
except Exception:
|
|
241
|
-
VERSION = "0.2.
|
|
241
|
+
VERSION = "0.2.36" # dev fallback — keep in sync with pyproject.toml
|
|
242
242
|
|
|
243
243
|
# ── ANSI helpers (used even with rich for non-markdown output) ─────────────
|
|
244
244
|
from common import C, clr, info, ok, warn, err, stream_thinking, print_tool_start, print_tool_end, sanitize_text
|
|
@@ -7674,7 +7674,10 @@ def setup_readline(history_file: Path):
|
|
|
7674
7674
|
sys.stdout.write(f" {m}\n")
|
|
7675
7675
|
sys.stdout.flush()
|
|
7676
7676
|
|
|
7677
|
-
|
|
7677
|
+
try:
|
|
7678
|
+
readline.set_completion_display_matches_hook(display_matches)
|
|
7679
|
+
except AttributeError:
|
|
7680
|
+
pass # pyreadline3 on Windows doesn't support this hook
|
|
7678
7681
|
readline.set_completer(completer)
|
|
7679
7682
|
# Autosuggestion-feel: first Tab shows full match list (no beep), case-insensitive,
|
|
7680
7683
|
# coloured prefix, and "/" anywhere triggers an implicit completion hint on Tab.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dulus"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.36"
|
|
8
8
|
description = "Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace"
|
|
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
|