uclone-x 0.2.0__tar.gz → 0.2.2__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.
- {uclone_x-0.2.0 → uclone_x-0.2.2}/CHANGELOG.md +122 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/PKG-INFO +54 -38
- {uclone_x-0.2.0 → uclone_x-0.2.2}/README.md +51 -37
- {uclone_x-0.2.0 → uclone_x-0.2.2}/pyproject.toml +7 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/__init__.py +1 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/base.py +263 -23
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/models.py +15 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/prompts.py +16 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/protocols.py +1 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/request_record.py +119 -22
- uclone_x-0.2.2/src/uclone_x/agent/turn_trace.py +477 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/a2a.py +5 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/acp.py +6 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/bootstrap.py +132 -22
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/eval.py +3 -1
- uclone_x-0.2.2/src/uclone_x/cli/commands/key.py +207 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/llm.py +67 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/loop.py +8 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/media.py +4 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/room.py +23 -4
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/run.py +54 -9
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/main.py +2 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/environment_install.py +1 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/errors.py +23 -0
- uclone_x-0.2.2/src/uclone_x/llm/connectors/factory.py +362 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/ollama.py +63 -24
- uclone_x-0.2.2/src/uclone_x/llm/connectors/saved_choice.py +346 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/context_window.py +70 -28
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/models.py +41 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/log/reader.py +1 -0
- uclone_x-0.2.2/src/uclone_x/personas/artist.yaml +42 -0
- uclone_x-0.2.2/src/uclone_x/personas/guardian.yaml +37 -0
- uclone_x-0.2.2/src/uclone_x/personas/pioneer.yaml +31 -0
- uclone_x-0.2.2/src/uclone_x/personas/scout.yaml +23 -0
- uclone_x-0.2.2/src/uclone_x/personas/writer.yaml +23 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/models.py +14 -3
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/orchestrator.py +97 -14
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/selectors.py +28 -6
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/shells/acp/server.py +10 -2
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/__init__.py +6 -0
- uclone_x-0.2.2/src/uclone_x/tools/builtin/character.py +330 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/image.py +336 -18
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/registry.py +2 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/app.py +141 -27
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/room_dock.py +239 -8
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/rooms.py +84 -2
- uclone_x-0.2.2/src/uclone_x/ui_build_inputs.sha256 +1 -0
- uclone_x-0.2.2/src/uclone_x/ui_static/assets/index-B26a-pug.js +836 -0
- uclone_x-0.2.0/src/uclone_x/ui_static/assets/index-Dvw1Fh4L.css → uclone_x-0.2.2/src/uclone_x/ui_static/assets/index-uisJBy0U.css +1 -1
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/index.html +2 -2
- uclone_x-0.2.0/src/uclone_x/llm/connectors/factory.py +0 -155
- uclone_x-0.2.0/src/uclone_x/personas/artist.yaml +0 -21
- uclone_x-0.2.0/src/uclone_x/personas/guardian.yaml +0 -20
- uclone_x-0.2.0/src/uclone_x/personas/pioneer.yaml +0 -20
- uclone_x-0.2.0/src/uclone_x/personas/scout.yaml +0 -16
- uclone_x-0.2.0/src/uclone_x/personas/writer.yaml +0 -18
- uclone_x-0.2.0/src/uclone_x/ui_build_inputs.sha256 +0 -1
- uclone_x-0.2.0/src/uclone_x/ui_static/assets/index-D1EUl9d1.js +0 -834
- {uclone_x-0.2.0 → uclone_x-0.2.2}/.gitignore +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/LICENSE +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/NOTICE +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/a2a/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/a2a/discovery.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/a2a/http_transport.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/a2a/in_memory.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/a2a/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/a2a/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/a2a/wire.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/acp/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/acp/conformance.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/adapters/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/adapters/uclone2/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/adapters/uclone2/adk_content.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/bootstrap.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/composition.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/grounding.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/hooks/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/hooks/artifact_validation.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/hooks/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/hooks/permission.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/hooks/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/hooks/runner.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/hooks/script_runner.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/loop/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/loop/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/loop/parser.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/loop/runner.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/loop/scheduler.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/memory.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/persona_registry.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/persona_store.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/planner.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/session.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/terminology.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/agent/text_tool_calls.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/agent_memory.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/bundle_freshness.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/changed_scope.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/dev.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/ontology.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/report.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/session_dev.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/skill.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/commands/ui.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/environment_provenance.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/cli/quality_gate.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/code_intel/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/code_intel/ast_parser.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/code_intel/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/code_intel/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/code_intel/scip.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/code_intel/symbol_graph.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/config/default_models.yaml +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/agent_home.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/capability.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/client_driver.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/diagnostic_report.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/failure_journal.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/host.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/immutable.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/log_inspector.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/log_offset.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/log_writer.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/logging_setup.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/provenance.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/secrets.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/session_diagnostics.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/session_store.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/tool_results.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/core/workspace.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/engine/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/engine/event_bus.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/engine/mattermost_bridge.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/engine/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/evaluation/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/evaluation/answerer.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/evaluation/loader.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/evaluation/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/budget.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/compactor.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/anthropic.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/base.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/gemini.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/mock.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/ollama_embedder.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/openai.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/connectors/vllm.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/llm/router.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/log/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/log/file_allocator.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/memory/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/memory/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/memory/retrieval.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/memory/store.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/memory/tools.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/memory/vector_store.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ontology/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ontology/engine.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ontology/justification.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ontology/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ontology/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ontology/reasoner.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ontology/rules.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/personas/artist.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/personas/clone.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/personas/clone.yaml +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/personas/guardian.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/personas/pioneer.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/personas/scout.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/personas/writer.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/knowledge.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/knowledge_store.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/resolver.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/service.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/store.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/room/turn_summary.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/sandbox/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/sandbox/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/sandbox/path_validator.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/sandbox/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/sandbox/workspace_runner.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/shells/a2a_server.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/shells/acp/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/shells/acp/driver.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/shells/acp/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/shells/entry.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/shells/ui_process.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/skills/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/skills/auditor.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/skills/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/skills/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/skills/synthesizer.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/exporter.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/langfuse.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/metrics.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/otel_sdk.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/otlp.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/telemetry/tracer.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/base.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/comfy_client.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/comfy_image_tool.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/filesystem.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/install.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/mcp_loader.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/media_registry.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/plan.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/shell.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/skill_loader.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/subagent.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/tool_results.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/builtin/web.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/client.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/mcp_manager.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/models.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/outcome.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/protocols.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/scoped_registry.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/tools/tool_scoper.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/__init__.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/build_inputs.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/clones.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/knowledge.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/server.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui/single_flight.py +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/favicon.ico +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/logo.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/logoWhite.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/logo_uclone_short.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/uclone_logo_1024x1024.png +0 -0
- {uclone_x-0.2.0 → uclone_x-0.2.2}/src/uclone_x/ui_static/uclone_logo_circle.png +0 -0
|
@@ -13,6 +13,128 @@ names does.
|
|
|
13
13
|
Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Each date is
|
|
14
14
|
the date that version was published.
|
|
15
15
|
|
|
16
|
+
## [0.2.2] - 2026-09-24
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- `ucx install` and `ucx start` now save the model they set up as the default, so
|
|
21
|
+
`ucx run`, `ucx room`, `ucx loop`, `ucx acp` and `ucx a2a` use it without `--provider`
|
|
22
|
+
or `--model`, and say which saved model they are using (`ucx acp` and `ucx a2a` on
|
|
23
|
+
stderr). A model already saved, for example in the dashboard's Settings, is kept; when
|
|
24
|
+
it differs from the one setup just prepared, setup says both and how to switch. A
|
|
25
|
+
dashboard that was started with no model picks up a default saved later.
|
|
26
|
+
- `ucx llm use <model>` (with `--provider` and `--base-url`) changes the saved default.
|
|
27
|
+
It is the same setting as the dashboard's Settings. Command-line flags and environment
|
|
28
|
+
variables such as `LLM_PROVIDER`, `OLLAMA_MODEL` or a provider's API key variable still
|
|
29
|
+
come first, and `ucx llm use` says when one of them is set and takes priority.
|
|
30
|
+
- In Settings, the API key field for OpenAI, Anthropic and Gemini links to the page where
|
|
31
|
+
that provider issues keys, warns when a key does not look like one for the chosen
|
|
32
|
+
provider or confirms that its format is right, and removes spaces and one pair of quotes
|
|
33
|
+
from the ends of a pasted key.
|
|
34
|
+
- `ucx key list` shows whether `GEMINI_API_KEY` (or `GOOGLE_API_KEY`),
|
|
35
|
+
`ANTHROPIC_API_KEY` and `OPENAI_API_KEY` are set. `ucx key setup` opens the provider's
|
|
36
|
+
key page and writes the key you paste to a `.env` file: the nearest one in this folder
|
|
37
|
+
or above it, looking no higher than the top of the enclosing git checkout, where it
|
|
38
|
+
creates one if none is found. Outside a git checkout, it creates one in this folder if
|
|
39
|
+
none is found above. UClone-X does not read that file itself; load it into your shell,
|
|
40
|
+
or enter the key in Settings, for the key to be used.
|
|
41
|
+
- Every clone may load the skills approved for it, without `load_skill` in its tool list,
|
|
42
|
+
and Scout can read web pages as well as search.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Ollama requests now ask for a 16K-token context window, unless `context_limit` or
|
|
47
|
+
`OLLAMA_CONTEXT_LENGTH` sets another, instead of leaving the size to Ollama, whose own
|
|
48
|
+
default was 4K on the machine the README's figures come from. A clone's request with
|
|
49
|
+
tool results then fits. It costs memory: for `qwen3:8b`, about 1.8 GB more than a 4K
|
|
50
|
+
window (an estimate, not a measurement).
|
|
51
|
+
- The built-in clones Scout, Pioneer, Guardian and Writer have rewritten instructions,
|
|
52
|
+
now written entirely in English; they still answer in the language you write in. With
|
|
53
|
+
a Qwen model, clones are also told not to use tools that change files or other state
|
|
54
|
+
for advice, brainstorming or general reasoning unless you ask for that change, to use
|
|
55
|
+
read-only search and inspection tools when an answer needs evidence from the workspace
|
|
56
|
+
or the web, and to answer in the language of the question. They are told that accuracy
|
|
57
|
+
requirements alone are no reason to decline a reasonable request, to follow your
|
|
58
|
+
instructions and style without imposing their own judgments, to give substantive
|
|
59
|
+
answers, and not to add moral lectures, unsolicited caveats or boilerplate disclaimers.
|
|
60
|
+
- The conversation list shows compact times ("now", "5m", "1d", "2w"), and a row's
|
|
61
|
+
rename and delete buttons appear when you point at the row or move keyboard focus to
|
|
62
|
+
it, so titles have more room.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- Local image generation on an NVIDIA card now runs on the GPU in half precision, where
|
|
67
|
+
0.2.1 ran it on the CPU. The engine tries CUDA, then Apple's MPS, then the CPU;
|
|
68
|
+
`ucx media status` names the device it will use, and image results name the GPU.
|
|
69
|
+
- When less than about 10 GB of GPU memory is free (an estimate), for example because
|
|
70
|
+
Ollama is keeping a model loaded on the same card, the image engine keeps SDXL's parts
|
|
71
|
+
in system memory, moves each onto the card only while it runs, and decodes the image in
|
|
72
|
+
tiles. This needs `accelerate`, which is now installed with the image engine. It is
|
|
73
|
+
slower and can still run out of memory; if it does, the image request fails with a
|
|
74
|
+
plain message and the memory is released, and when `accelerate` is missing the message
|
|
75
|
+
says how to add it.
|
|
76
|
+
- Under WSL2, the free GPU memory used for that decision now counts memory held by other
|
|
77
|
+
processes (read with NVML or `nvidia-smi`), so the image engine switches to the
|
|
78
|
+
low-memory mode when another program holds the card. When neither can be read, it uses
|
|
79
|
+
the low-memory mode.
|
|
80
|
+
- A model that Ollama cannot give tools to (for example `deepseek-r1:14b`) now ends the
|
|
81
|
+
turn with a short message naming the model and suggesting one that can use tools, such
|
|
82
|
+
as `qwen3:8b`, plus where to change it: `--model` for `ucx run`,
|
|
83
|
+
`ucx room retry <id> --model <model>` in a room, and Settings in the dashboard and in an
|
|
84
|
+
ACP client. The dashboard gives that remedy instead of offering a Retry that would fail
|
|
85
|
+
the same way.
|
|
86
|
+
- The one-line install now offers the image engine, which the published package
|
|
87
|
+
includes; 0.2.1 skipped it. When the installer reports success but the engine's core
|
|
88
|
+
packages (Pillow, diffusers, torch and transformers) cannot be imported, it says so
|
|
89
|
+
instead of reporting the engine installed. That check does not cover `accelerate`.
|
|
90
|
+
- Setting up Ollama runs its official installer up to 3 times when the download is cut
|
|
91
|
+
off, with a message between attempts. An attempt that runs out the 15-minute limit is
|
|
92
|
+
not repeated.
|
|
93
|
+
- A saved API key is used only with the provider it was saved for, and changing provider
|
|
94
|
+
with `ucx llm use` keeps it.
|
|
95
|
+
|
|
96
|
+
### Compatibility
|
|
97
|
+
|
|
98
|
+
- `settings.json` written by 0.2.2 can carry `llm_api_key_provider`, which 0.2.1
|
|
99
|
+
ignores: 0.2.1 applies a saved API key to whichever provider is saved, and a Settings
|
|
100
|
+
save in 0.2.1 removes the field. 0.2.1's terminal commands also do not read the saved
|
|
101
|
+
default.
|
|
102
|
+
- A conversation that contains a turn refused because its model cannot use tools records
|
|
103
|
+
a reason 0.2.1 does not know, so 0.2.1 may not open it.
|
|
104
|
+
|
|
105
|
+
## [0.2.1] - 2026-09-24
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
|
|
109
|
+
- A one-line install. `curl -fsSL https://raw.githubusercontent.com/UClone-AI/uclone-x/main/install.sh | bash`
|
|
110
|
+
asks its questions on the terminal even when piped, puts a `ucx` command in
|
|
111
|
+
`~/.local/bin` (and says how to add that folder to `PATH` when it is not there), and
|
|
112
|
+
ends by offering to start UClone-X. `--no-start` skips that last question.
|
|
113
|
+
- Autonomous discussion in group chats. A toggle in the conversation header lets the
|
|
114
|
+
clones keep talking among themselves. It pauses while you are not viewing the
|
|
115
|
+
conversation, resumes when you come back, and stops after 20 turns in a row without you.
|
|
116
|
+
- While a clone runs a tool, the conversation shows which one instead of "Thinking...".
|
|
117
|
+
- The artist clone can remember characters: a `character_sheet` tool saves each
|
|
118
|
+
character's look (tags, description, seed) as a file under `characters/` in the
|
|
119
|
+
workspace, reuses it in later images, and combines several saved characters into one
|
|
120
|
+
scene prompt. It now writes image prompts in English and chooses the aspect ratio from
|
|
121
|
+
the subject.
|
|
122
|
+
- In a group chat, the model that picks the next speaker is now told to let another clone
|
|
123
|
+
answer a question one clone asks, instead of ending the exchange, and to start a
|
|
124
|
+
discussion when you ask the clones to talk among themselves.
|
|
125
|
+
- With developer mode on, a turn shows the model calls it made: model, tokens, duration
|
|
126
|
+
and tools called for each, and on expanding one, the request, the tools offered and the
|
|
127
|
+
response.
|
|
128
|
+
|
|
129
|
+
### Fixed
|
|
130
|
+
|
|
131
|
+
- Choosing the next speaker in a group chat now asks Ollama to turn a reasoning model's
|
|
132
|
+
thinking off (for example Qwen3), so it replies without spending its budget on
|
|
133
|
+
reasoning first. A selector that runs out of tokens now says so instead of reporting a
|
|
134
|
+
missing JSON object.
|
|
135
|
+
- The message shown when no model is available points to Settings, and to `ucx llm status`
|
|
136
|
+
from a terminal, instead of a `./ucx` command that does not exist in an installed copy.
|
|
137
|
+
|
|
16
138
|
## [0.2.0] - 2026-09-24
|
|
17
139
|
|
|
18
140
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: uclone-x
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Next-Generation Event-Driven AI Agent Core & High-Performance Collaboration Framework
|
|
5
5
|
Author-email: Kenny Lim <kennylim@uclone.net>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -21,6 +21,7 @@ Requires-Dist: pydantic-settings>=2.2.0
|
|
|
21
21
|
Requires-Dist: pydantic>=2.7.0
|
|
22
22
|
Requires-Dist: pyyaml>=6.0.1
|
|
23
23
|
Provides-Extra: all
|
|
24
|
+
Requires-Dist: accelerate>=0.31.0; extra == 'all'
|
|
24
25
|
Requires-Dist: anthropic>=0.25.0; extra == 'all'
|
|
25
26
|
Requires-Dist: diffusers>=0.31.0; extra == 'all'
|
|
26
27
|
Requires-Dist: fastapi>=0.110.0; extra == 'all'
|
|
@@ -71,6 +72,7 @@ Requires-Dist: anthropic>=0.25.0; extra == 'llm'
|
|
|
71
72
|
Requires-Dist: google-genai>=0.1.0; extra == 'llm'
|
|
72
73
|
Requires-Dist: openai>=1.25.0; extra == 'llm'
|
|
73
74
|
Provides-Extra: media
|
|
75
|
+
Requires-Dist: accelerate>=0.31.0; extra == 'media'
|
|
74
76
|
Requires-Dist: diffusers>=0.31.0; extra == 'media'
|
|
75
77
|
Requires-Dist: pillow>=10.0.0; extra == 'media'
|
|
76
78
|
Requires-Dist: torch>=2.2.0; extra == 'media'
|
|
@@ -101,66 +103,80 @@ Description-Content-Type: text/markdown
|
|
|
101
103
|
|
|
102
104
|
## Install
|
|
103
105
|
|
|
106
|
+
On macOS or Linux, paste this into a terminal:
|
|
107
|
+
|
|
104
108
|
```bash
|
|
105
|
-
|
|
106
|
-
ucx --help
|
|
109
|
+
curl -fsSL https://raw.githubusercontent.com/UClone-AI/uclone-x/main/install.sh | bash
|
|
107
110
|
```
|
|
108
111
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
That is the whole install. It needs nothing but `curl` — no Python, Homebrew or
|
|
113
|
+
admin rights of its own. It installs the core (~31 MB), then asks before each
|
|
114
|
+
larger download: a private Python 3.12 when your machine has nothing newer than
|
|
115
|
+
3.10, then a local AI model through Ollama (~1.4–5.2 GB, depending on memory; say
|
|
116
|
+
no to use an API key instead). Ollama's own installer may ask for your password.
|
|
117
|
+
At the end it asks **Start UClone-X now?** — press Enter, answer any remaining
|
|
118
|
+
setup question, and the dashboard opens in your browser at
|
|
119
|
+
<http://127.0.0.1:5180>. The agents work in the folder you ran it from.
|
|
115
120
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
without a shell — usable as a library, and what you want if you are importing
|
|
120
|
-
`uclone_x` rather than running `ucx`. Install without them and `ucx` tells you
|
|
121
|
-
which one is missing rather than failing obscurely.
|
|
121
|
+
To answer, UClone-X needs a model: the local one above, which needs no account,
|
|
122
|
+
or an API key for OpenAI, Anthropic or Gemini, pasted into the dashboard's
|
|
123
|
+
**Settings**. Nothing needs editing in a file.
|
|
122
124
|
|
|
123
|
-
|
|
124
|
-
what you use:
|
|
125
|
+
Next time, start it with:
|
|
125
126
|
|
|
126
127
|
```bash
|
|
127
|
-
|
|
128
|
-
pip install "uclone-x[ontology]" # LinkML, rdflib, networkx
|
|
129
|
-
pip install "uclone-x[code_intel]" # tree-sitter AST parsing
|
|
130
|
-
pip install "uclone-x[all]"
|
|
128
|
+
ucx start
|
|
131
129
|
```
|
|
132
130
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
131
|
+
If your shell says `command not found`, the installer printed one `export PATH=…`
|
|
132
|
+
line at the end; add it to `~/.zshrc` (or `~/.bashrc`) and open a new terminal.
|
|
133
|
+
Until then, `~/.local/bin/ucx start` works.
|
|
134
|
+
|
|
135
|
+
UClone-X itself lives in `~/.uclone-x` and the `ucx` link in `~/.local/bin`;
|
|
136
|
+
`rm -rf ~/.uclone-x ~/.local/bin/ucx` removes it. What the installer fetched
|
|
137
|
+
alongside it stays: uv (`~/.local/bin/uv`, `uvx`) and the Python it downloaded
|
|
138
|
+
(`uv python uninstall 3.12` removes that), and Ollama with its models.
|
|
140
139
|
|
|
141
|
-
|
|
140
|
+
### Other ways to install
|
|
142
141
|
|
|
143
|
-
|
|
142
|
+
If you already use [uv](https://docs.astral.sh/uv/):
|
|
144
143
|
|
|
145
144
|
```bash
|
|
146
|
-
|
|
147
|
-
ucx
|
|
145
|
+
uv tool install --managed-python --python 3.12 "uclone-x[cli,http]"
|
|
146
|
+
ucx start
|
|
148
147
|
```
|
|
149
148
|
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
Keep both flags: without `--python 3.12` uv uses the first `python3` on PATH,
|
|
150
|
+
which on macOS is 3.9, and the install fails; without `--managed-python` it still
|
|
151
|
+
runs that `python3` to check its version, and on a Mac without the Xcode Command
|
|
152
|
+
Line Tools that opens an install dialog.
|
|
153
|
+
|
|
154
|
+
With pip, into a Python 3.11+ environment of your own:
|
|
155
|
+
`pip install "uclone-x[cli,http]"`. The two extras are not optional in practice:
|
|
156
|
+
`cli` is the `ucx` shell and `http` serves the dashboard. The base install is the
|
|
157
|
+
runtime without a shell — what you want if you are importing `uclone_x` as a
|
|
158
|
+
library. Provider SDKs and the heavier stacks are the genuinely optional extras:
|
|
152
159
|
|
|
153
160
|
```bash
|
|
154
|
-
|
|
161
|
+
pip install "uclone-x[llm]" # Gemini, Claude, OpenAI SDKs
|
|
162
|
+
pip install "uclone-x[ontology]" # LinkML, rdflib, networkx
|
|
163
|
+
pip install "uclone-x[code_intel]" # tree-sitter AST parsing
|
|
164
|
+
pip install "uclone-x[all]"
|
|
155
165
|
```
|
|
156
166
|
|
|
157
|
-
|
|
167
|
+
Every extra resolves on Python 3.11, 3.12 and 3.13.
|
|
168
|
+
|
|
169
|
+
### From a terminal
|
|
170
|
+
|
|
171
|
+
`ucx run` is an interactive terminal REPL with streaming responses, tool calls
|
|
172
|
+
and slash commands. It reads its model from the environment — an API key such as
|
|
173
|
+
`OPENAI_API_KEY`, or a local Ollama:
|
|
158
174
|
|
|
159
175
|
```bash
|
|
160
|
-
ucx
|
|
176
|
+
OLLAMA_FAST_BASE_URL=http://localhost:11434/v1 OLLAMA_FAST_MODEL=qwen3:8b ucx run
|
|
161
177
|
```
|
|
162
178
|
|
|
163
|
-
|
|
179
|
+
`ucx llm status` reports which models are reachable.
|
|
164
180
|
|
|
165
181
|
## What UClone-X is
|
|
166
182
|
|
|
@@ -14,66 +14,80 @@
|
|
|
14
14
|
|
|
15
15
|
## Install
|
|
16
16
|
|
|
17
|
+
On macOS or Linux, paste this into a terminal:
|
|
18
|
+
|
|
17
19
|
```bash
|
|
18
|
-
|
|
19
|
-
ucx --help
|
|
20
|
+
curl -fsSL https://raw.githubusercontent.com/UClone-AI/uclone-x/main/install.sh | bash
|
|
20
21
|
```
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
That is the whole install. It needs nothing but `curl` — no Python, Homebrew or
|
|
24
|
+
admin rights of its own. It installs the core (~31 MB), then asks before each
|
|
25
|
+
larger download: a private Python 3.12 when your machine has nothing newer than
|
|
26
|
+
3.10, then a local AI model through Ollama (~1.4–5.2 GB, depending on memory; say
|
|
27
|
+
no to use an API key instead). Ollama's own installer may ask for your password.
|
|
28
|
+
At the end it asks **Start UClone-X now?** — press Enter, answer any remaining
|
|
29
|
+
setup question, and the dashboard opens in your browser at
|
|
30
|
+
<http://127.0.0.1:5180>. The agents work in the folder you ran it from.
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
without a shell — usable as a library, and what you want if you are importing
|
|
33
|
-
`uclone_x` rather than running `ucx`. Install without them and `ucx` tells you
|
|
34
|
-
which one is missing rather than failing obscurely.
|
|
32
|
+
To answer, UClone-X needs a model: the local one above, which needs no account,
|
|
33
|
+
or an API key for OpenAI, Anthropic or Gemini, pasted into the dashboard's
|
|
34
|
+
**Settings**. Nothing needs editing in a file.
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
what you use:
|
|
36
|
+
Next time, start it with:
|
|
38
37
|
|
|
39
38
|
```bash
|
|
40
|
-
|
|
41
|
-
pip install "uclone-x[ontology]" # LinkML, rdflib, networkx
|
|
42
|
-
pip install "uclone-x[code_intel]" # tree-sitter AST parsing
|
|
43
|
-
pip install "uclone-x[all]"
|
|
39
|
+
ucx start
|
|
44
40
|
```
|
|
45
41
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
If your shell says `command not found`, the installer printed one `export PATH=…`
|
|
43
|
+
line at the end; add it to `~/.zshrc` (or `~/.bashrc`) and open a new terminal.
|
|
44
|
+
Until then, `~/.local/bin/ucx start` works.
|
|
45
|
+
|
|
46
|
+
UClone-X itself lives in `~/.uclone-x` and the `ucx` link in `~/.local/bin`;
|
|
47
|
+
`rm -rf ~/.uclone-x ~/.local/bin/ucx` removes it. What the installer fetched
|
|
48
|
+
alongside it stays: uv (`~/.local/bin/uv`, `uvx`) and the Python it downloaded
|
|
49
|
+
(`uv python uninstall 3.12` removes that), and Ollama with its models.
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
### Other ways to install
|
|
55
52
|
|
|
56
|
-
|
|
53
|
+
If you already use [uv](https://docs.astral.sh/uv/):
|
|
57
54
|
|
|
58
55
|
```bash
|
|
59
|
-
|
|
60
|
-
ucx
|
|
56
|
+
uv tool install --managed-python --python 3.12 "uclone-x[cli,http]"
|
|
57
|
+
ucx start
|
|
61
58
|
```
|
|
62
59
|
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
Keep both flags: without `--python 3.12` uv uses the first `python3` on PATH,
|
|
61
|
+
which on macOS is 3.9, and the install fails; without `--managed-python` it still
|
|
62
|
+
runs that `python3` to check its version, and on a Mac without the Xcode Command
|
|
63
|
+
Line Tools that opens an install dialog.
|
|
64
|
+
|
|
65
|
+
With pip, into a Python 3.11+ environment of your own:
|
|
66
|
+
`pip install "uclone-x[cli,http]"`. The two extras are not optional in practice:
|
|
67
|
+
`cli` is the `ucx` shell and `http` serves the dashboard. The base install is the
|
|
68
|
+
runtime without a shell — what you want if you are importing `uclone_x` as a
|
|
69
|
+
library. Provider SDKs and the heavier stacks are the genuinely optional extras:
|
|
65
70
|
|
|
66
71
|
```bash
|
|
67
|
-
|
|
72
|
+
pip install "uclone-x[llm]" # Gemini, Claude, OpenAI SDKs
|
|
73
|
+
pip install "uclone-x[ontology]" # LinkML, rdflib, networkx
|
|
74
|
+
pip install "uclone-x[code_intel]" # tree-sitter AST parsing
|
|
75
|
+
pip install "uclone-x[all]"
|
|
68
76
|
```
|
|
69
77
|
|
|
70
|
-
|
|
78
|
+
Every extra resolves on Python 3.11, 3.12 and 3.13.
|
|
79
|
+
|
|
80
|
+
### From a terminal
|
|
81
|
+
|
|
82
|
+
`ucx run` is an interactive terminal REPL with streaming responses, tool calls
|
|
83
|
+
and slash commands. It reads its model from the environment — an API key such as
|
|
84
|
+
`OPENAI_API_KEY`, or a local Ollama:
|
|
71
85
|
|
|
72
86
|
```bash
|
|
73
|
-
ucx
|
|
87
|
+
OLLAMA_FAST_BASE_URL=http://localhost:11434/v1 OLLAMA_FAST_MODEL=qwen3:8b ucx run
|
|
74
88
|
```
|
|
75
89
|
|
|
76
|
-
|
|
90
|
+
`ucx llm status` reports which models are reachable.
|
|
77
91
|
|
|
78
92
|
## What UClone-X is
|
|
79
93
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "uclone-x"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
description = "Next-Generation Event-Driven AI Agent Core & High-Performance Collaboration Framework"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -101,8 +101,14 @@ ontology = [
|
|
|
101
101
|
# `ucx media status` reporting ready for an engine that would fail on `import torch`.
|
|
102
102
|
# The floors here are the same ones `IN_PROCESS_REQUIREMENTS` checks at runtime, so a
|
|
103
103
|
# beginner who installs this extra and a beginner who follows the hint end up equivalent.
|
|
104
|
+
#
|
|
105
|
+
# `accelerate` is what `enable_model_cpu_offload` needs. It is not a runtime requirement
|
|
106
|
+
# (MPS and CPU never offload, and a CUDA card with room loads the whole pipeline), so it is
|
|
107
|
+
# not in `IN_PROCESS_REQUIREMENTS`; it is here so an NVIDIA card whose memory is shared
|
|
108
|
+
# with a resident Ollama model can still run SDXL instead of running out of memory.
|
|
104
109
|
media = [
|
|
105
110
|
"pillow>=10.0.0",
|
|
111
|
+
"accelerate>=0.31.0",
|
|
106
112
|
"diffusers>=0.31.0",
|
|
107
113
|
"torch>=2.2.0",
|
|
108
114
|
"transformers>=4.40.0",
|