dulus 0.2.3__tar.gz → 0.2.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-0.2.3/dulus.egg-info → dulus-0.2.4}/PKG-INFO +1 -1
- {dulus-0.2.3 → dulus-0.2.4}/claude_code_watcher.py +2 -1
- {dulus-0.2.3 → dulus-0.2.4/dulus.egg-info}/PKG-INFO +1 -1
- {dulus-0.2.3 → dulus-0.2.4}/providers.py +3 -2
- {dulus-0.2.3 → dulus-0.2.4}/pyproject.toml +1 -1
- {dulus-0.2.3 → dulus-0.2.4}/LICENSE +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/MANIFEST.in +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/README.md +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/agent.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/compressor.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/context.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/githook.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/marketplace.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/personas.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/plugins.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/server.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/backend/tasks.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/batch_api.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/checkpoint/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/checkpoint/hooks.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/checkpoint/store.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/checkpoint/types.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/clipboard_utils.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/cloudsave.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/common.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/compaction.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/config.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/context.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/data/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/data/active_persona.json +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/data/context.json +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/data/marketplace.json +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/data/personas.json +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/data/tasks.json +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/README.md +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/api.html +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/architecture.md +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/dashboard/index.html +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/divider.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/generate.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/hero.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/index.html +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/news.md +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/particle-playground.html +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/personas/index.html +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/preview.html +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-agents.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-features.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-memory.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-models.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-perms.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/spinners.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/split-pane.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/docs/uploads/particle-playground.html +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus.egg-info/SOURCES.txt +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus.egg-info/requires.txt +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus.egg-info/top_level.txt +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus_gui.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus_mcp/client.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus_mcp/config.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/dulus_mcp/types.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/agent_bridge.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/chat_widget.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/main_window.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/personas.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/session_utils.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/settings_dialog.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/sidebar.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/tasks_view.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/themes.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/gui/tool_panel.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/input.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/license_manager.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/audit.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/consolidator.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/context.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/offload.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/palace.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/scan.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/sessions.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/store.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/tools.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/types.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/memory/vector_search.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/multi_agent/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/multi_agent/subagent.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/multi_agent/tools.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/offload_helper.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/plugin/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/plugin/autoadapter.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/plugin/loader.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/plugin/recommend.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/plugin/store.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/plugin/types.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/setup.cfg +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/skill/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/skill/builtin.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/skill/clawhub.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/skill/executor.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/skill/loader.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/skill/tools.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/skills.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/spinner.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/string_utils.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/subagent.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/task/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/task/store.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/task/tools.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/task/types.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_compaction.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_diff_view.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_license.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_mcp.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_memory.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_plugin.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_skills.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_subagent.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_task.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_tool_registry.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tests/test_voice.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tmux_offloader.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tmux_tools.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tool_registry.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/tools.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/ui/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/ui/input.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/ui/render.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/voice/__init__.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/voice/keyterms.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/voice/recorder.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/voice/stt.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/voice/tts.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/webchat.py +0 -0
- {dulus-0.2.3 → dulus-0.2.4}/webchat_server.py +0 -0
|
@@ -23,7 +23,8 @@ import argparse
|
|
|
23
23
|
from pathlib import Path
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
_CWD_SLUG = str(Path.cwd()).replace(":", "-").replace("\\", "-").replace("/", "-")
|
|
27
|
+
SESSION_DIR = Path.home() / ".claude" / "projects" / _CWD_SLUG
|
|
27
28
|
|
|
28
29
|
# How long to wait (seconds) with no new assistant entries before flushing
|
|
29
30
|
# the accumulated turn as complete.
|
|
@@ -1065,7 +1065,8 @@ def stream_claude_code(
|
|
|
1065
1065
|
import subprocess as _sp
|
|
1066
1066
|
from pathlib import Path as _Path
|
|
1067
1067
|
|
|
1068
|
-
|
|
1068
|
+
_cwd_slug = str(_Path.cwd()).replace(":", "-").replace("\\", "-").replace("/", "-")
|
|
1069
|
+
_session_dir = _Path.home() / ".claude" / "projects" / _cwd_slug
|
|
1069
1070
|
_jsonl_files = sorted(_session_dir.glob("*.jsonl"), key=lambda f: f.stat().st_mtime, reverse=True)
|
|
1070
1071
|
_jsonl_path = _jsonl_files[0] if _jsonl_files else None
|
|
1071
1072
|
|
|
@@ -1125,7 +1126,7 @@ def stream_claude_code(
|
|
|
1125
1126
|
|
|
1126
1127
|
# ── Poll JSONL for new assistant entry ────────────────────────────────────
|
|
1127
1128
|
if not _jsonl_path:
|
|
1128
|
-
msg = "[claude-code] No JSONL session file found in
|
|
1129
|
+
msg = f"[claude-code] No JSONL session file found in {_session_dir}"
|
|
1129
1130
|
yield TextChunk(msg)
|
|
1130
1131
|
yield AssistantTurn(msg, [], 0, 0, error=True)
|
|
1131
1132
|
return
|
|
@@ -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.4"
|
|
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
|