dulus 0.2.37__tar.gz → 0.2.39__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.37/dulus.egg-info → dulus-0.2.39}/PKG-INFO +2 -1
- {dulus-0.2.37 → dulus-0.2.39}/agent.py +4 -3
- {dulus-0.2.37 → dulus-0.2.39}/data/active_persona.json +4 -4
- {dulus-0.2.37 → dulus-0.2.39}/data/context.json +7 -6
- {dulus-0.2.37 → dulus-0.2.39}/data/personas.json +87 -87
- {dulus-0.2.37 → dulus-0.2.39/dulus.egg-info}/PKG-INFO +2 -1
- {dulus-0.2.37 → dulus-0.2.39}/dulus.egg-info/SOURCES.txt +18 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus.py +418 -456
- {dulus-0.2.37 → dulus-0.2.39}/gui/agent_bridge.py +7 -1
- {dulus-0.2.37 → dulus-0.2.39}/gui/session_utils.py +196 -196
- dulus-0.2.39/license_server.py +63 -0
- {dulus-0.2.37 → dulus-0.2.39}/pyproject.toml +1 -1
- dulus-0.2.39/tests/test_afk_yolo.py +178 -0
- dulus-0.2.39/tests/test_approval_runtime.py +392 -0
- dulus-0.2.39/tests/test_background_task_tools.py +456 -0
- dulus-0.2.39/tests/test_background_tasks.py +846 -0
- dulus-0.2.39/tests/test_clipboard_utils.py +259 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_compaction.py +12 -9
- dulus-0.2.39/tests/test_diff_visualization.py +208 -0
- dulus-0.2.39/tests/test_display_blocks.py +454 -0
- dulus-0.2.39/tests/test_export_import.py +299 -0
- dulus-0.2.39/tests/test_hook_engine.py +368 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_mcp.py +2 -1
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_memory.py +1 -1
- dulus-0.2.39/tests/test_notification_manager.py +641 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_plugin.py +2 -2
- dulus-0.2.39/tests/test_session_fork.py +380 -0
- dulus-0.2.39/tests/test_shell_mode.py +175 -0
- dulus-0.2.39/tests/test_steer_input.py +248 -0
- dulus-0.2.39/tests/test_think_tool.py +94 -0
- dulus-0.2.39/tests/test_todo_tool.py +222 -0
- dulus-0.2.39/tests/test_todo_visualization.py +230 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_tool_registry.py +6 -6
- dulus-0.2.39/tests/test_wire_events.py +245 -0
- {dulus-0.2.37 → dulus-0.2.39}/webchat_server.py +1523 -72
- {dulus-0.2.37 → dulus-0.2.39}/LICENSE +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/MANIFEST.in +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/README.md +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/compressor.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/context.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/githook.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/marketplace.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/mempalace_bridge.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/personas.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/plugins.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/server.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/backend/tasks.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/batch_api.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/checkpoint/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/checkpoint/hooks.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/checkpoint/store.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/checkpoint/types.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/claude_code_watcher.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/clipboard_utils.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/cloudsave.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/common.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/compaction.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/config.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/context.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/marketplace.json +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/plugins/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/plugins/composio/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/plugins/composio/composio_plugin/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/plugins/composio/composio_plugin/session_manager.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/plugins/composio/composio_plugin/tool_generator.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/plugins/composio/plugin.json +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/plugins/composio/plugin_tool.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/data/tasks.json +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/README.md +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/api.html +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/architecture.md +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/azure-speech-template.json +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/dashboard/index.html +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/divider.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/generate.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/hero.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/index.html +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/news.md +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/nvidia-models.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/particle-playground.html +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/personas/index.html +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/poetry-banner.png +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/preview.html +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-agents.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-brainstorm.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-bridges.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-features.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-freetier.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-memory.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-models.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-perms.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-plugins.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-quickstart.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/sec-ssj.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/spinners.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/split-pane.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/terminal-boot.svg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/docs/uploads/particle-playground.html +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus.egg-info/dependency_links.txt +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus.egg-info/entry_points.txt +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus.egg-info/requires.txt +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus.egg-info/top_level.txt +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus_gui.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus_mcp/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus_mcp/client.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus_mcp/config.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus_mcp/tools.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/dulus_mcp/types.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/chat_widget.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/main_window.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/personas.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/settings_dialog.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/sidebar.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/tasks_view.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/themes.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/gui/tool_panel.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/input.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/license_manager.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/audit.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/consolidator.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/context.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/offload.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/palace.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/scan.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/sessions.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/store.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/tools.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/types.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/memory/vector_search.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/multi_agent/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/multi_agent/subagent.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/multi_agent/tools.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/offload_helper.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/plugin/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/plugin/autoadapter.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/plugin/loader.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/plugin/recommend.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/plugin/store.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/plugin/types.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/providers.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/setup.cfg +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/skill/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/skill/builtin.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/skill/clawhub.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/skill/executor.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/skill/loader.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/skill/tools.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/skills.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/spinner.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/string_utils.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/subagent.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/task/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/task/store.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/task/tools.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/task/types.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_checkpoint.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_diff_view.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_injection_fix.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_license.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_skills.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_subagent.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_task.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_telegram_buffer.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tests/test_voice.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tmux_offloader.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tmux_tools.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tool_registry.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/tools.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/ui/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/ui/input.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/ui/render.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/voice/__init__.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/voice/keyterms.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/voice/recorder.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/voice/stt.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/voice/tts.py +0 -0
- {dulus-0.2.37 → dulus-0.2.39}/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.39
|
|
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
|
|
@@ -23,6 +23,7 @@ Requires-Python: >=3.11
|
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
License-File: LICENSE
|
|
25
25
|
License-File: license_manager.py
|
|
26
|
+
License-File: license_server.py
|
|
26
27
|
Requires-Dist: anthropic>=0.40.0
|
|
27
28
|
Requires-Dist: openai>=1.30.0
|
|
28
29
|
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.39
|
|
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
|
|
@@ -23,6 +23,7 @@ Requires-Python: >=3.11
|
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
License-File: LICENSE
|
|
25
25
|
License-File: license_manager.py
|
|
26
|
+
License-File: license_server.py
|
|
26
27
|
Requires-Dist: anthropic>=0.40.0
|
|
27
28
|
Requires-Dist: openai>=1.30.0
|
|
28
29
|
Requires-Dist: httpx>=0.27.0
|
|
@@ -14,6 +14,7 @@ dulus.py
|
|
|
14
14
|
dulus_gui.py
|
|
15
15
|
input.py
|
|
16
16
|
license_manager.py
|
|
17
|
+
license_server.py
|
|
17
18
|
offload_helper.py
|
|
18
19
|
providers.py
|
|
19
20
|
pyproject.toml
|
|
@@ -138,20 +139,37 @@ task/__init__.py
|
|
|
138
139
|
task/store.py
|
|
139
140
|
task/tools.py
|
|
140
141
|
task/types.py
|
|
142
|
+
tests/test_afk_yolo.py
|
|
143
|
+
tests/test_approval_runtime.py
|
|
144
|
+
tests/test_background_task_tools.py
|
|
145
|
+
tests/test_background_tasks.py
|
|
141
146
|
tests/test_checkpoint.py
|
|
147
|
+
tests/test_clipboard_utils.py
|
|
142
148
|
tests/test_compaction.py
|
|
143
149
|
tests/test_diff_view.py
|
|
150
|
+
tests/test_diff_visualization.py
|
|
151
|
+
tests/test_display_blocks.py
|
|
152
|
+
tests/test_export_import.py
|
|
153
|
+
tests/test_hook_engine.py
|
|
144
154
|
tests/test_injection_fix.py
|
|
145
155
|
tests/test_license.py
|
|
146
156
|
tests/test_mcp.py
|
|
147
157
|
tests/test_memory.py
|
|
158
|
+
tests/test_notification_manager.py
|
|
148
159
|
tests/test_plugin.py
|
|
160
|
+
tests/test_session_fork.py
|
|
161
|
+
tests/test_shell_mode.py
|
|
149
162
|
tests/test_skills.py
|
|
163
|
+
tests/test_steer_input.py
|
|
150
164
|
tests/test_subagent.py
|
|
151
165
|
tests/test_task.py
|
|
152
166
|
tests/test_telegram_buffer.py
|
|
167
|
+
tests/test_think_tool.py
|
|
168
|
+
tests/test_todo_tool.py
|
|
169
|
+
tests/test_todo_visualization.py
|
|
153
170
|
tests/test_tool_registry.py
|
|
154
171
|
tests/test_voice.py
|
|
172
|
+
tests/test_wire_events.py
|
|
155
173
|
ui/__init__.py
|
|
156
174
|
ui/input.py
|
|
157
175
|
ui/render.py
|