dulus 0.2.5__tar.gz → 0.2.6__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.5/dulus.egg-info → dulus-0.2.6}/PKG-INFO +1 -1
- {dulus-0.2.5 → dulus-0.2.6/dulus.egg-info}/PKG-INFO +1 -1
- {dulus-0.2.5 → dulus-0.2.6}/dulus.py +6 -8
- {dulus-0.2.5 → dulus-0.2.6}/pyproject.toml +1 -1
- {dulus-0.2.5 → dulus-0.2.6}/tools.py +1 -2
- {dulus-0.2.5 → dulus-0.2.6}/LICENSE +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/MANIFEST.in +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/README.md +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/agent.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/compressor.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/context.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/githook.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/marketplace.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/personas.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/plugins.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/server.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/backend/tasks.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/batch_api.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/checkpoint/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/checkpoint/hooks.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/checkpoint/store.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/checkpoint/types.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/claude_code_watcher.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/clipboard_utils.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/cloudsave.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/common.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/compaction.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/config.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/context.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/data/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/data/active_persona.json +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/data/context.json +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/data/marketplace.json +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/data/personas.json +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/data/tasks.json +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/README.md +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/api.html +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/architecture.md +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/dashboard/index.html +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/divider.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/generate.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/hero.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/index.html +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/news.md +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/particle-playground.html +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/personas/index.html +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/preview.html +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-agents.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-features.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-memory.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-models.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-perms.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/spinners.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/split-pane.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/docs/uploads/particle-playground.html +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus.egg-info/SOURCES.txt +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus.egg-info/requires.txt +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus.egg-info/top_level.txt +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus_gui.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus_mcp/client.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus_mcp/config.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/dulus_mcp/types.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/agent_bridge.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/chat_widget.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/main_window.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/personas.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/session_utils.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/settings_dialog.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/sidebar.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/tasks_view.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/themes.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/gui/tool_panel.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/input.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/license_manager.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/audit.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/consolidator.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/context.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/offload.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/palace.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/scan.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/sessions.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/store.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/tools.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/types.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/memory/vector_search.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/multi_agent/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/multi_agent/subagent.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/multi_agent/tools.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/offload_helper.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/plugin/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/plugin/autoadapter.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/plugin/loader.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/plugin/recommend.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/plugin/store.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/plugin/types.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/providers.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/setup.cfg +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/skill/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/skill/builtin.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/skill/clawhub.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/skill/executor.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/skill/loader.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/skill/tools.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/skills.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/spinner.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/string_utils.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/subagent.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/task/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/task/store.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/task/tools.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/task/types.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_compaction.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_diff_view.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_license.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_mcp.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_memory.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_plugin.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_skills.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_subagent.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_task.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_tool_registry.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tests/test_voice.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tmux_offloader.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tmux_tools.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/tool_registry.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/ui/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/ui/input.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/ui/render.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/voice/__init__.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/voice/keyterms.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/voice/recorder.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/voice/stt.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/voice/tts.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/webchat.py +0 -0
- {dulus-0.2.5 → dulus-0.2.6}/webchat_server.py +0 -0
|
@@ -2996,7 +2996,7 @@ def cmd_sticky_input(_args: str, _state, config) -> bool:
|
|
|
2996
2996
|
Background notifications land where they land.
|
|
2997
2997
|
"""
|
|
2998
2998
|
from config import save_config
|
|
2999
|
-
config["sticky_input"] = not config.get("sticky_input",
|
|
2999
|
+
config["sticky_input"] = not config.get("sticky_input", True)
|
|
3000
3000
|
state_str = "ON" if config["sticky_input"] else "OFF"
|
|
3001
3001
|
ok(f"Sticky input bar: {state_str} (restart Dulus to take effect)")
|
|
3002
3002
|
save_config(config)
|
|
@@ -7438,13 +7438,11 @@ def repl(config: dict, initial_prompt: str = None):
|
|
|
7438
7438
|
sys.stdout.write("\x1b[?2004h") # enable bracketed paste mode
|
|
7439
7439
|
sys.stdout.flush()
|
|
7440
7440
|
|
|
7441
|
-
# ── Sticky input bar (
|
|
7442
|
-
# prompt_toolkit
|
|
7443
|
-
#
|
|
7444
|
-
#
|
|
7445
|
-
|
|
7446
|
-
# config) if they want the anchored behavior.
|
|
7447
|
-
_sticky_input_enabled = bool(config.get("sticky_input", False))
|
|
7441
|
+
# ── Sticky input bar (ON by default) ─────────────────────────────────────
|
|
7442
|
+
# prompt_toolkit anchors the input line so background prints flow above it.
|
|
7443
|
+
# On Windows consoles it can redraw on every keystroke (mild jitter), but
|
|
7444
|
+
# the UX win outweighs it. Toggle off with `/sticky_input` if needed.
|
|
7445
|
+
_sticky_input_enabled = bool(config.get("sticky_input", True))
|
|
7448
7446
|
try:
|
|
7449
7447
|
import common as _cm
|
|
7450
7448
|
_cm.apply_theme(config.get("theme", "dulus"))
|
|
@@ -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.6"
|
|
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"
|
|
@@ -896,8 +896,7 @@ def _rtk_binary() -> Optional[str]:
|
|
|
896
896
|
here = Path(__file__).resolve().parent
|
|
897
897
|
name = "rtk.exe" if _sys.platform == "win32" else "rtk"
|
|
898
898
|
candidates = [here / "rtk" / name]
|
|
899
|
-
|
|
900
|
-
candidates.append(Path.home() / ".local" / "bin" / "rtk")
|
|
899
|
+
candidates.append(Path.home() / ".local" / "bin" / name)
|
|
901
900
|
|
|
902
901
|
for c in candidates:
|
|
903
902
|
if c.exists() and c.is_file():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|