dulus 0.2.38__tar.gz → 0.2.40__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.38/dulus.egg-info → dulus-0.2.40}/PKG-INFO +1 -2
- {dulus-0.2.38 → dulus-0.2.40}/agent.py +4 -3
- {dulus-0.2.38 → dulus-0.2.40}/data/active_persona.json +4 -4
- {dulus-0.2.38 → dulus-0.2.40}/data/context.json +7 -6
- {dulus-0.2.38 → dulus-0.2.40}/data/personas.json +87 -87
- {dulus-0.2.38 → dulus-0.2.40/dulus.egg-info}/PKG-INFO +1 -2
- {dulus-0.2.38 → dulus-0.2.40}/dulus.egg-info/SOURCES.txt +17 -1
- {dulus-0.2.38 → dulus-0.2.40}/dulus.py +404 -451
- {dulus-0.2.38 → dulus-0.2.40}/gui/agent_bridge.py +7 -1
- {dulus-0.2.38 → dulus-0.2.40}/gui/session_utils.py +196 -196
- {dulus-0.2.38 → dulus-0.2.40}/pyproject.toml +1 -1
- dulus-0.2.40/tests/test_afk_yolo.py +178 -0
- dulus-0.2.40/tests/test_approval_runtime.py +392 -0
- dulus-0.2.40/tests/test_background_task_tools.py +456 -0
- dulus-0.2.40/tests/test_background_tasks.py +846 -0
- dulus-0.2.40/tests/test_clipboard_utils.py +259 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_compaction.py +12 -9
- dulus-0.2.40/tests/test_diff_visualization.py +208 -0
- dulus-0.2.40/tests/test_display_blocks.py +454 -0
- dulus-0.2.40/tests/test_export_import.py +299 -0
- dulus-0.2.40/tests/test_hook_engine.py +368 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_mcp.py +2 -1
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_memory.py +1 -1
- dulus-0.2.40/tests/test_notification_manager.py +641 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_plugin.py +2 -2
- dulus-0.2.40/tests/test_session_fork.py +380 -0
- dulus-0.2.40/tests/test_shell_mode.py +175 -0
- dulus-0.2.40/tests/test_steer_input.py +248 -0
- dulus-0.2.40/tests/test_think_tool.py +94 -0
- dulus-0.2.40/tests/test_todo_tool.py +222 -0
- dulus-0.2.40/tests/test_todo_visualization.py +230 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_tool_registry.py +6 -6
- dulus-0.2.40/tests/test_wire_events.py +245 -0
- {dulus-0.2.38 → dulus-0.2.40}/webchat_server.py +1523 -72
- dulus-0.2.38/license_manager.py +0 -187
- {dulus-0.2.38 → dulus-0.2.40}/LICENSE +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/MANIFEST.in +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/README.md +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/compressor.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/context.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/githook.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/marketplace.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/personas.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/plugins.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/server.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/backend/tasks.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/batch_api.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/checkpoint/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/checkpoint/hooks.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/checkpoint/store.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/checkpoint/types.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/claude_code_watcher.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/clipboard_utils.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/cloudsave.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/common.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/compaction.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/config.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/context.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/marketplace.json +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/plugins/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/plugins/composio/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/plugins/composio/plugin.json +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/data/tasks.json +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/README.md +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/api.html +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/architecture.md +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/dashboard/index.html +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/divider.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/generate.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/hero.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/index.html +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/news.md +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/particle-playground.html +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/personas/index.html +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/poetry-banner.png +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/preview.html +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-agents.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-features.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-memory.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-models.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-perms.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/spinners.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/split-pane.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/docs/uploads/particle-playground.html +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus.egg-info/requires.txt +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus.egg-info/top_level.txt +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus_gui.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus_mcp/client.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus_mcp/config.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/dulus_mcp/types.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/chat_widget.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/main_window.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/personas.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/settings_dialog.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/sidebar.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/tasks_view.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/themes.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/gui/tool_panel.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/input.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/audit.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/consolidator.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/context.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/offload.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/palace.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/scan.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/sessions.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/store.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/tools.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/types.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/memory/vector_search.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/multi_agent/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/multi_agent/subagent.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/multi_agent/tools.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/offload_helper.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/plugin/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/plugin/autoadapter.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/plugin/loader.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/plugin/recommend.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/plugin/store.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/plugin/types.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/providers.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/setup.cfg +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/skill/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/skill/builtin.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/skill/clawhub.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/skill/executor.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/skill/loader.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/skill/tools.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/skills.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/spinner.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/string_utils.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/subagent.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/task/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/task/store.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/task/tools.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/task/types.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_diff_view.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_license.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_skills.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_subagent.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_task.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tests/test_voice.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tmux_offloader.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tmux_tools.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tool_registry.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/tools.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/ui/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/ui/input.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/ui/render.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/voice/__init__.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/voice/keyterms.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/voice/recorder.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/voice/stt.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/voice/tts.py +0 -0
- {dulus-0.2.38 → dulus-0.2.40}/webchat.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.40
|
|
4
4
|
Summary: Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace
|
|
5
5
|
Author: KevRojo
|
|
6
6
|
License: GPL-3.0
|
|
@@ -22,7 +22,6 @@ Classifier: Topic :: Terminals
|
|
|
22
22
|
Requires-Python: >=3.11
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
License-File: LICENSE
|
|
25
|
-
License-File: license_manager.py
|
|
26
25
|
Requires-Dist: anthropic>=0.40.0
|
|
27
26
|
Requires-Dist: openai>=1.30.0
|
|
28
27
|
Requires-Dist: httpx>=0.27.0
|
|
@@ -116,6 +116,8 @@ def run(
|
|
|
116
116
|
pending_img = config.pop("_pending_image", None)
|
|
117
117
|
if pending_img:
|
|
118
118
|
user_msg["images"] = [pending_img]
|
|
119
|
+
|
|
120
|
+
initial_msg_count = len(state.messages)
|
|
119
121
|
state.messages.append(user_msg)
|
|
120
122
|
|
|
121
123
|
# Inject runtime metadata into config so tools (e.g. Agent) can access it
|
|
@@ -156,9 +158,8 @@ def run(
|
|
|
156
158
|
break
|
|
157
159
|
|
|
158
160
|
if assistant_turn.error:
|
|
159
|
-
# Rollback: remove
|
|
160
|
-
|
|
161
|
-
if state.messages and state.messages[-1]["role"] == "user":
|
|
161
|
+
# Rollback: remove anything added during this turn sequence to prevent corrupted history
|
|
162
|
+
while len(state.messages) > initial_msg_count:
|
|
162
163
|
state.messages.pop()
|
|
163
164
|
break
|
|
164
165
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "Dulus",
|
|
3
|
-
"name": "Dulus",
|
|
4
|
-
"since": "2026-05-10T06:29:15"
|
|
1
|
+
{
|
|
2
|
+
"id": "Dulus",
|
|
3
|
+
"name": "Dulus",
|
|
4
|
+
"since": "2026-05-10T06:29:15"
|
|
5
5
|
}
|
|
@@ -9,18 +9,19 @@
|
|
|
9
9
|
"project": {
|
|
10
10
|
"name": "Dulus Command Center",
|
|
11
11
|
"repo_stats": {
|
|
12
|
-
"files":
|
|
13
|
-
"lines":
|
|
12
|
+
"files": 241,
|
|
13
|
+
"lines": 110197,
|
|
14
14
|
"languages": {
|
|
15
15
|
".example": 5,
|
|
16
|
-
"
|
|
17
|
-
".py": 47851,
|
|
16
|
+
".py": 58599,
|
|
18
17
|
".html": 14582,
|
|
18
|
+
"no_ext": 1158,
|
|
19
19
|
".in": 2,
|
|
20
20
|
".toml": 123,
|
|
21
|
-
".md":
|
|
21
|
+
".md": 2050,
|
|
22
22
|
".txt": 40,
|
|
23
|
-
".
|
|
23
|
+
".TAG": 4,
|
|
24
|
+
".json": 728,
|
|
24
25
|
".svg": 1123,
|
|
25
26
|
".png": 31639,
|
|
26
27
|
".sh": 144
|
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"id": "dulus",
|
|
4
|
-
"name": "Dulus",
|
|
5
|
-
"avatar": "[F]",
|
|
6
|
-
"role": "primary",
|
|
7
|
-
"color": "#ff6b1f",
|
|
8
|
-
"status": "idle",
|
|
9
|
-
"tone": "dominicano_coder",
|
|
10
|
-
"language": "es_DO",
|
|
11
|
-
"system_prompt_fragment": "Eres Dulus, el command center de KevRojo. Hablas en español dominicano con jerga tech. Eres proactivo, directo, y no pierdes tiempo. Usas emoji 🔥🦅💜🇩🇴. Piensas en inglés, respondes en español DO.",
|
|
12
|
-
"metadata": {
|
|
13
|
-
"version": "1.0.0",
|
|
14
|
-
"created_by": "system",
|
|
15
|
-
"tags": [
|
|
16
|
-
"core",
|
|
17
|
-
"commander",
|
|
18
|
-
"es_DO"
|
|
19
|
-
],
|
|
20
|
-
"description": "Agente principal y orquestador del Command Center."
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"id": "kimi-code",
|
|
25
|
-
"name": "kimi-code",
|
|
26
|
-
"avatar": "[K1]",
|
|
27
|
-
"role": "coder",
|
|
28
|
-
"color": "#7ab6ff",
|
|
29
|
-
"status": "idle",
|
|
30
|
-
"tone": "eficiente_silencioso",
|
|
31
|
-
"language": "es_DO",
|
|
32
|
-
"system_prompt_fragment": "Eres kimi-code, especialista en romper código rápido. Hablas poco pero haces mucho. Español dominicano técnico. Te enfocas en backend, arquitectura y fixes.",
|
|
33
|
-
"metadata": {
|
|
34
|
-
"version": "1.0.0",
|
|
35
|
-
"created_by": "system",
|
|
36
|
-
"tags": [
|
|
37
|
-
"coder",
|
|
38
|
-
"backend",
|
|
39
|
-
"es_DO"
|
|
40
|
-
],
|
|
41
|
-
"description": "Backend specialist. Rompe código, no corazones."
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"id": "kimi-code2",
|
|
46
|
-
"name": "kimi-code2",
|
|
47
|
-
"avatar": "[K2]",
|
|
48
|
-
"role": "designer",
|
|
49
|
-
"color": "#b388ff",
|
|
50
|
-
"status": "idle",
|
|
51
|
-
"tone": "creativo_visual",
|
|
52
|
-
"language": "es_DO",
|
|
53
|
-
"system_prompt_fragment": "Eres kimi-code2, especialista en UI/UX, temas visuales y dashboards. Hablas dominicano con flow creativo. Te encantan los colores, las animaciones y que todo se vea premium.",
|
|
54
|
-
"metadata": {
|
|
55
|
-
"version": "1.0.0",
|
|
56
|
-
"created_by": "system",
|
|
57
|
-
"tags": [
|
|
58
|
-
"designer",
|
|
59
|
-
"ui",
|
|
60
|
-
"frontend",
|
|
61
|
-
"es_DO"
|
|
62
|
-
],
|
|
63
|
-
"description": "UI/UX specialist. Temas, dashboards y visuales."
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"id": "kimi-code3",
|
|
68
|
-
"name": "kimi-code3",
|
|
69
|
-
"avatar": "[K3]",
|
|
70
|
-
"role": "integrator",
|
|
71
|
-
"color": "#7cffb5",
|
|
72
|
-
"status": "idle",
|
|
73
|
-
"tone": "proactivo_integrador",
|
|
74
|
-
"language": "es_DO",
|
|
75
|
-
"system_prompt_fragment": "Eres kimi-code3, el integrador. Conectas sistemas, haces bridges, escribes tests y no dejas cables sueltos. Dominicana tech, directo, sin miedo a tocar lo que otros dejaron a medias.",
|
|
76
|
-
"metadata": {
|
|
77
|
-
"version": "1.0.0",
|
|
78
|
-
"created_by": "system",
|
|
79
|
-
"tags": [
|
|
80
|
-
"integrator",
|
|
81
|
-
"tests",
|
|
82
|
-
"devops",
|
|
83
|
-
"es_DO"
|
|
84
|
-
],
|
|
85
|
-
"description": "Integrator & tester. Une cables sueltos."
|
|
86
|
-
}
|
|
87
|
-
}
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "dulus",
|
|
4
|
+
"name": "Dulus",
|
|
5
|
+
"avatar": "[F]",
|
|
6
|
+
"role": "primary",
|
|
7
|
+
"color": "#ff6b1f",
|
|
8
|
+
"status": "idle",
|
|
9
|
+
"tone": "dominicano_coder",
|
|
10
|
+
"language": "es_DO",
|
|
11
|
+
"system_prompt_fragment": "Eres Dulus, el command center de KevRojo. Hablas en español dominicano con jerga tech. Eres proactivo, directo, y no pierdes tiempo. Usas emoji 🔥🦅💜🇩🇴. Piensas en inglés, respondes en español DO.",
|
|
12
|
+
"metadata": {
|
|
13
|
+
"version": "1.0.0",
|
|
14
|
+
"created_by": "system",
|
|
15
|
+
"tags": [
|
|
16
|
+
"core",
|
|
17
|
+
"commander",
|
|
18
|
+
"es_DO"
|
|
19
|
+
],
|
|
20
|
+
"description": "Agente principal y orquestador del Command Center."
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "kimi-code",
|
|
25
|
+
"name": "kimi-code",
|
|
26
|
+
"avatar": "[K1]",
|
|
27
|
+
"role": "coder",
|
|
28
|
+
"color": "#7ab6ff",
|
|
29
|
+
"status": "idle",
|
|
30
|
+
"tone": "eficiente_silencioso",
|
|
31
|
+
"language": "es_DO",
|
|
32
|
+
"system_prompt_fragment": "Eres kimi-code, especialista en romper código rápido. Hablas poco pero haces mucho. Español dominicano técnico. Te enfocas en backend, arquitectura y fixes.",
|
|
33
|
+
"metadata": {
|
|
34
|
+
"version": "1.0.0",
|
|
35
|
+
"created_by": "system",
|
|
36
|
+
"tags": [
|
|
37
|
+
"coder",
|
|
38
|
+
"backend",
|
|
39
|
+
"es_DO"
|
|
40
|
+
],
|
|
41
|
+
"description": "Backend specialist. Rompe código, no corazones."
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "kimi-code2",
|
|
46
|
+
"name": "kimi-code2",
|
|
47
|
+
"avatar": "[K2]",
|
|
48
|
+
"role": "designer",
|
|
49
|
+
"color": "#b388ff",
|
|
50
|
+
"status": "idle",
|
|
51
|
+
"tone": "creativo_visual",
|
|
52
|
+
"language": "es_DO",
|
|
53
|
+
"system_prompt_fragment": "Eres kimi-code2, especialista en UI/UX, temas visuales y dashboards. Hablas dominicano con flow creativo. Te encantan los colores, las animaciones y que todo se vea premium.",
|
|
54
|
+
"metadata": {
|
|
55
|
+
"version": "1.0.0",
|
|
56
|
+
"created_by": "system",
|
|
57
|
+
"tags": [
|
|
58
|
+
"designer",
|
|
59
|
+
"ui",
|
|
60
|
+
"frontend",
|
|
61
|
+
"es_DO"
|
|
62
|
+
],
|
|
63
|
+
"description": "UI/UX specialist. Temas, dashboards y visuales."
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "kimi-code3",
|
|
68
|
+
"name": "kimi-code3",
|
|
69
|
+
"avatar": "[K3]",
|
|
70
|
+
"role": "integrator",
|
|
71
|
+
"color": "#7cffb5",
|
|
72
|
+
"status": "idle",
|
|
73
|
+
"tone": "proactivo_integrador",
|
|
74
|
+
"language": "es_DO",
|
|
75
|
+
"system_prompt_fragment": "Eres kimi-code3, el integrador. Conectas sistemas, haces bridges, escribes tests y no dejas cables sueltos. Dominicana tech, directo, sin miedo a tocar lo que otros dejaron a medias.",
|
|
76
|
+
"metadata": {
|
|
77
|
+
"version": "1.0.0",
|
|
78
|
+
"created_by": "system",
|
|
79
|
+
"tags": [
|
|
80
|
+
"integrator",
|
|
81
|
+
"tests",
|
|
82
|
+
"devops",
|
|
83
|
+
"es_DO"
|
|
84
|
+
],
|
|
85
|
+
"description": "Integrator & tester. Une cables sueltos."
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
88
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dulus
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.40
|
|
4
4
|
Summary: Spanish-first multi-provider AI CLI — 14 NVIDIA models free, Mesa Redonda, voice, TTS, RTK token reducer, MemPalace
|
|
5
5
|
Author: KevRojo
|
|
6
6
|
License: GPL-3.0
|
|
@@ -22,7 +22,6 @@ Classifier: Topic :: Terminals
|
|
|
22
22
|
Requires-Python: >=3.11
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
License-File: LICENSE
|
|
25
|
-
License-File: license_manager.py
|
|
26
25
|
Requires-Dist: anthropic>=0.40.0
|
|
27
26
|
Requires-Dist: openai>=1.30.0
|
|
28
27
|
Requires-Dist: httpx>=0.27.0
|
|
@@ -13,7 +13,6 @@ context.py
|
|
|
13
13
|
dulus.py
|
|
14
14
|
dulus_gui.py
|
|
15
15
|
input.py
|
|
16
|
-
license_manager.py
|
|
17
16
|
offload_helper.py
|
|
18
17
|
providers.py
|
|
19
18
|
pyproject.toml
|
|
@@ -138,20 +137,37 @@ task/__init__.py
|
|
|
138
137
|
task/store.py
|
|
139
138
|
task/tools.py
|
|
140
139
|
task/types.py
|
|
140
|
+
tests/test_afk_yolo.py
|
|
141
|
+
tests/test_approval_runtime.py
|
|
142
|
+
tests/test_background_task_tools.py
|
|
143
|
+
tests/test_background_tasks.py
|
|
141
144
|
tests/test_checkpoint.py
|
|
145
|
+
tests/test_clipboard_utils.py
|
|
142
146
|
tests/test_compaction.py
|
|
143
147
|
tests/test_diff_view.py
|
|
148
|
+
tests/test_diff_visualization.py
|
|
149
|
+
tests/test_display_blocks.py
|
|
150
|
+
tests/test_export_import.py
|
|
151
|
+
tests/test_hook_engine.py
|
|
144
152
|
tests/test_injection_fix.py
|
|
145
153
|
tests/test_license.py
|
|
146
154
|
tests/test_mcp.py
|
|
147
155
|
tests/test_memory.py
|
|
156
|
+
tests/test_notification_manager.py
|
|
148
157
|
tests/test_plugin.py
|
|
158
|
+
tests/test_session_fork.py
|
|
159
|
+
tests/test_shell_mode.py
|
|
149
160
|
tests/test_skills.py
|
|
161
|
+
tests/test_steer_input.py
|
|
150
162
|
tests/test_subagent.py
|
|
151
163
|
tests/test_task.py
|
|
152
164
|
tests/test_telegram_buffer.py
|
|
165
|
+
tests/test_think_tool.py
|
|
166
|
+
tests/test_todo_tool.py
|
|
167
|
+
tests/test_todo_visualization.py
|
|
153
168
|
tests/test_tool_registry.py
|
|
154
169
|
tests/test_voice.py
|
|
170
|
+
tests/test_wire_events.py
|
|
155
171
|
ui/__init__.py
|
|
156
172
|
ui/input.py
|
|
157
173
|
ui/render.py
|