uclone-x 0.2.2__tar.gz → 0.3.0__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.2 → uclone_x-0.3.0}/.gitignore +10 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/CHANGELOG.md +112 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/PKG-INFO +184 -68
- uclone_x-0.3.0/README.md +320 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/pyproject.toml +13 -2
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/__init__.py +1 -1
- uclone_x-0.3.0/src/uclone_x/agent/avatar_tool.py +112 -0
- uclone_x-0.3.0/src/uclone_x/agent/base.py +2259 -0
- uclone_x-0.3.0/src/uclone_x/agent/clone_builder.py +417 -0
- uclone_x-0.3.0/src/uclone_x/agent/compaction_driver.py +564 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/composition.py +33 -5
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/hooks/artifact_validation.py +56 -8
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/hooks/runner.py +41 -1
- uclone_x-0.3.0/src/uclone_x/agent/image_set_planner.py +375 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/loop/__init__.py +4 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/loop/parser.py +49 -19
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/models.py +78 -144
- uclone_x-0.3.0/src/uclone_x/agent/nudges.py +280 -0
- uclone_x-0.3.0/src/uclone_x/agent/persona_avatar.py +363 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/persona_store.py +24 -2
- uclone_x-0.3.0/src/uclone_x/agent/prompt_assembler.py +701 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/protocols.py +24 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/request_record.py +1 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/session.py +31 -577
- uclone_x-0.3.0/src/uclone_x/agent/session_lifecycle.py +983 -0
- uclone_x-0.3.0/src/uclone_x/agent/tool_execution.py +786 -0
- uclone_x-0.3.0/src/uclone_x/agent/tool_invoker.py +413 -0
- uclone_x-0.3.0/src/uclone_x/agent/turn_executor.py +2485 -0
- uclone_x-0.3.0/src/uclone_x/artifacts/__init__.py +6 -0
- uclone_x-0.3.0/src/uclone_x/artifacts/library.py +938 -0
- uclone_x-0.3.0/src/uclone_x/cli/browser_plan.py +356 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/changed_scope.py +118 -44
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/a2a.py +31 -15
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/acp.py +29 -23
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/bootstrap.py +5 -95
- uclone_x-0.3.0/src/uclone_x/cli/commands/key.py +217 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/llm.py +38 -3
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/loop.py +31 -29
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/media.py +35 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/room.py +35 -17
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/run.py +98 -44
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/session_dev.py +4 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/skill.py +197 -68
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/main.py +53 -12
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/quality_gate.py +135 -28
- uclone_x-0.3.0/src/uclone_x/cli/scope_rules.py +208 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/code_intel/ast_parser.py +52 -31
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/config/default_models.yaml +8 -7
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/__init__.py +8 -4
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/environment_install.py +3 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/log_writer.py +7 -18
- uclone_x-0.3.0/src/uclone_x/core/models.py +196 -0
- uclone_x-0.3.0/src/uclone_x/core/remote_worker.py +667 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/secrets.py +18 -0
- uclone_x-0.3.0/src/uclone_x/core/session.py +186 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/session_diagnostics.py +39 -18
- uclone_x-0.3.0/src/uclone_x/core/session_state.py +460 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/session_store.py +1 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/tool_results.py +96 -23
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/errors.py +250 -4
- uclone_x-0.3.0/src/uclone_x/i18n/__init__.py +21 -0
- uclone_x-0.3.0/src/uclone_x/i18n/language.py +71 -0
- uclone_x-0.3.0/src/uclone_x/llm/__init__.py +146 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/budget.py +45 -68
- uclone_x-0.3.0/src/uclone_x/llm/catalog.py +172 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/compactor.py +66 -48
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/anthropic.py +82 -31
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/base.py +82 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/factory.py +237 -118
- uclone_x-0.3.0/src/uclone_x/llm/connectors/failures.py +128 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/gemini.py +200 -32
- uclone_x-0.3.0/src/uclone_x/llm/connectors/listing.py +93 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/mock.py +12 -2
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/ollama.py +45 -16
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/openai.py +91 -54
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/saved_choice.py +184 -38
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/vllm.py +6 -12
- uclone_x-0.3.0/src/uclone_x/llm/model_policy.py +92 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/models.py +13 -3
- uclone_x-0.3.0/src/uclone_x/llm/providers.py +174 -0
- uclone_x-0.3.0/src/uclone_x/llm/usage/__init__.py +5 -0
- uclone_x-0.3.0/src/uclone_x/llm/usage/gate.py +237 -0
- uclone_x-0.3.0/src/uclone_x/llm/usage/limits.py +313 -0
- uclone_x-0.3.0/src/uclone_x/llm/usage/store.py +169 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/log/reader.py +2 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/memory/models.py +22 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/memory/store.py +118 -10
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/memory/tools.py +3 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ontology/engine.py +3 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ontology/rules.py +3 -1
- uclone_x-0.3.0/src/uclone_x/personas/artist.yaml +50 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/clone.yaml +9 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/guardian.yaml +1 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/pioneer.yaml +1 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/scout.yaml +1 -0
- uclone_x-0.3.0/src/uclone_x/personas/writer.yaml +40 -0
- uclone_x-0.3.0/src/uclone_x/room/a2a_handlers.py +418 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/knowledge_store.py +1 -1
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/models.py +204 -20
- uclone_x-0.3.0/src/uclone_x/room/notices.py +100 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/orchestrator.py +223 -51
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/protocols.py +13 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/resolver.py +144 -126
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/selectors.py +26 -6
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/service.py +96 -5
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/store.py +5 -3
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/turn_summary.py +5 -0
- uclone_x-0.3.0/src/uclone_x/sandbox/story_jail.py +169 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/shells/acp/server.py +20 -4
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/skills/__init__.py +6 -0
- uclone_x-0.3.0/src/uclone_x/skills/approvals.py +164 -0
- uclone_x-0.3.0/src/uclone_x/skills/auditor.py +1245 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/skills/models.py +7 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/skills/protocols.py +32 -6
- uclone_x-0.3.0/src/uclone_x/skills/refusals.py +65 -0
- uclone_x-0.3.0/src/uclone_x/skills/shipped_pins.py +37 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/skills/synthesizer.py +120 -154
- uclone_x-0.3.0/src/uclone_x/story/__init__.py +62 -0
- uclone_x-0.3.0/src/uclone_x/story/audit.py +409 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/muse/fantasy.yaml +45 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/muse/horror.yaml +45 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/muse/mystery.yaml +45 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/muse/romance.yaml +45 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/muse/science-fiction.yaml +45 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/structures/heros-journey.yaml +49 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/structures/kishotenketsu.yaml +28 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/structures/save-the-cat.yaml +58 -0
- uclone_x-0.3.0/src/uclone_x/story/bundled/structures/three-act.yaml +37 -0
- uclone_x-0.3.0/src/uclone_x/story/context.py +787 -0
- uclone_x-0.3.0/src/uclone_x/story/library.py +575 -0
- uclone_x-0.3.0/src/uclone_x/story/muse.py +195 -0
- uclone_x-0.3.0/src/uclone_x/story/proposals.py +337 -0
- uclone_x-0.3.0/src/uclone_x/story/quotes.py +98 -0
- uclone_x-0.3.0/src/uclone_x/story/schemas.py +510 -0
- uclone_x-0.3.0/src/uclone_x/story/skill_data.py +590 -0
- uclone_x-0.3.0/src/uclone_x/story/timeline.py +305 -0
- uclone_x-0.3.0/src/uclone_x/story/tool.py +232 -0
- uclone_x-0.3.0/src/uclone_x/story/tools.py +1188 -0
- uclone_x-0.3.0/src/uclone_x/story/view.py +509 -0
- uclone_x-0.3.0/src/uclone_x/story/work.py +526 -0
- uclone_x-0.3.0/src/uclone_x/tools/base.py +891 -0
- uclone_x-0.3.0/src/uclone_x/tools/builtin/a2a.py +276 -0
- uclone_x-0.3.0/src/uclone_x/tools/builtin/character.py +602 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/comfy_image_tool.py +4 -4
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/filesystem.py +91 -44
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/image.py +1090 -132
- uclone_x-0.3.0/src/uclone_x/tools/builtin/image_set_intent.py +175 -0
- uclone_x-0.3.0/src/uclone_x/tools/builtin/image_status.py +198 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/media_registry.py +139 -35
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/shell.py +141 -20
- uclone_x-0.3.0/src/uclone_x/tools/builtin/skill_loader.py +231 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/subagent.py +20 -4
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/tool_results.py +2 -2
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/client.py +82 -27
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/mcp_manager.py +106 -41
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/models.py +41 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/registry.py +20 -0
- uclone_x-0.3.0/src/uclone_x/tools/schema.py +173 -0
- uclone_x-0.3.0/src/uclone_x/tools/tool_binder.py +243 -0
- uclone_x-0.3.0/src/uclone_x/tools/tool_scoper.py +159 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/app.py +1399 -2068
- uclone_x-0.3.0/src/uclone_x/ui/artifacts.py +203 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/clones.py +4 -4
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/knowledge.py +31 -48
- uclone_x-0.3.0/src/uclone_x/ui/person.py +235 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/room_dock.py +115 -32
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/rooms.py +129 -165
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/server.py +22 -3
- uclone_x-0.3.0/src/uclone_x/ui/usage.py +176 -0
- uclone_x-0.3.0/src/uclone_x/ui_build_inputs.sha256 +1 -0
- uclone_x-0.2.2/src/uclone_x/ui_static/assets/index-uisJBy0U.css → uclone_x-0.3.0/src/uclone_x/ui_static/assets/index-BjAyIyi6.css +1 -1
- uclone_x-0.3.0/src/uclone_x/ui_static/assets/index-MgVVh250.js +863 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/index.html +2 -2
- uclone_x-0.2.2/README.md +0 -210
- uclone_x-0.2.2/src/uclone_x/agent/base.py +0 -5931
- uclone_x-0.2.2/src/uclone_x/cli/commands/key.py +0 -207
- uclone_x-0.2.2/src/uclone_x/llm/__init__.py +0 -95
- uclone_x-0.2.2/src/uclone_x/personas/artist.yaml +0 -42
- uclone_x-0.2.2/src/uclone_x/personas/writer.yaml +0 -23
- uclone_x-0.2.2/src/uclone_x/skills/auditor.py +0 -777
- uclone_x-0.2.2/src/uclone_x/tools/base.py +0 -317
- uclone_x-0.2.2/src/uclone_x/tools/builtin/character.py +0 -330
- uclone_x-0.2.2/src/uclone_x/tools/builtin/skill_loader.py +0 -51
- uclone_x-0.2.2/src/uclone_x/tools/tool_scoper.py +0 -294
- uclone_x-0.2.2/src/uclone_x/ui_build_inputs.sha256 +0 -1
- uclone_x-0.2.2/src/uclone_x/ui_static/assets/index-B26a-pug.js +0 -836
- {uclone_x-0.2.2 → uclone_x-0.3.0}/LICENSE +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/NOTICE +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/a2a/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/a2a/discovery.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/a2a/http_transport.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/a2a/in_memory.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/a2a/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/a2a/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/a2a/wire.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/acp/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/acp/conformance.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/adapters/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/adapters/uclone2/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/adapters/uclone2/adk_content.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/bootstrap.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/grounding.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/hooks/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/hooks/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/hooks/permission.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/hooks/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/hooks/script_runner.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/loop/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/loop/runner.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/loop/scheduler.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/memory.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/persona_registry.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/planner.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/prompts.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/terminology.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/text_tool_calls.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/agent/turn_trace.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/agent_memory.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/bundle_freshness.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/dev.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/eval.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/ontology.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/report.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/commands/ui.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/cli/environment_provenance.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/code_intel/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/code_intel/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/code_intel/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/code_intel/scip.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/code_intel/symbol_graph.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/agent_home.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/capability.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/client_driver.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/diagnostic_report.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/failure_journal.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/host.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/immutable.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/log_inspector.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/log_offset.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/logging_setup.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/provenance.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/core/workspace.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/engine/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/engine/event_bus.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/engine/mattermost_bridge.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/engine/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/evaluation/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/evaluation/answerer.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/evaluation/loader.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/evaluation/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/connectors/ollama_embedder.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/context_window.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/llm/router.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/log/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/log/file_allocator.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/memory/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/memory/retrieval.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/memory/vector_store.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ontology/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ontology/justification.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ontology/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ontology/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ontology/reasoner.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/artist.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/clone.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/guardian.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/pioneer.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/scout.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/personas/writer.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/room/knowledge.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/sandbox/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/sandbox/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/sandbox/path_validator.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/sandbox/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/sandbox/workspace_runner.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/shells/a2a_server.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/shells/acp/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/shells/acp/driver.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/shells/acp/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/shells/entry.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/shells/ui_process.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/exporter.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/langfuse.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/metrics.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/models.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/otel_sdk.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/otlp.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/telemetry/tracer.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/comfy_client.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/install.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/mcp_loader.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/plan.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/builtin/web.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/outcome.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/protocols.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/tools/scoped_registry.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/__init__.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/build_inputs.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui/single_flight.py +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/favicon.ico +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/logo.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/logoWhite.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/logo_uclone_short.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/uclone_logo_1024x1024.png +0 -0
- {uclone_x-0.2.2 → uclone_x-0.3.0}/src/uclone_x/ui_static/uclone_logo_circle.png +0 -0
|
@@ -100,5 +100,14 @@ evals/reports/*.json
|
|
|
100
100
|
# `artifacts/images/...`, and the UI reads a session's tool output from
|
|
101
101
|
# `.sandbox/tool_artifacts/<session>/`. Fifty such PNGs were staged by a `git add -A` before
|
|
102
102
|
# a gate run, and the check that classifies every tracked file refused them.
|
|
103
|
-
artifacts
|
|
103
|
+
# Anchored to the root, where that output lands. Unanchored, `artifacts/` also matched the
|
|
104
|
+
# source directories that share the name (`src/uclone_x/artifacts/`,
|
|
105
|
+
# `frontend/src/components/artifacts/`, #1554), and the public export's commit silently left
|
|
106
|
+
# the frontend one's ten files out. Anchoring covers any later directory of that name too,
|
|
107
|
+
# which per-directory negations did not; `oss.export` now refuses a commit that drops a file.
|
|
108
|
+
/artifacts/
|
|
109
|
+
# The story library (`stories/`, #1555) and the Files screen's archive (`.archive/`, #1554)
|
|
110
|
+
# land beside it for the same reason, anchored for the same reason (#1578).
|
|
111
|
+
/stories/
|
|
112
|
+
/.archive/
|
|
104
113
|
.sandbox/
|
|
@@ -13,6 +13,118 @@ 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.3.0] - 2026-09-27
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Novel co-writing with the Writer. Stories are saved in the workspace as an outline,
|
|
21
|
+
a codex (characters, places, items, threads) and a manuscript, and outlive the
|
|
22
|
+
conversation that started them. New tools `story_library`, `story_outline`,
|
|
23
|
+
`story_codex`, `story_manuscript`, `story_context` and `story_audit` belong to the
|
|
24
|
+
Writer. Only one conversation writes a story at a time; opening it from another gives a
|
|
25
|
+
read-only copy until you take it over. Scenes can carry a `story_time`, so a flashback
|
|
26
|
+
sees the story as it was then. `muse_spark` draws idea cards for a genre.
|
|
27
|
+
- Codex changes the Writer proposes (a death, a lost item) wait for your decision, with
|
|
28
|
+
the quote that shows them. **View story** lists them under "Waiting for your decision"
|
|
29
|
+
with **Approve** and **Reject**; nothing changes until you choose.
|
|
30
|
+
- A **Files** button in the header lists the files clones saved, across every
|
|
31
|
+
conversation, filtered by kind and by conversation. Files can be archived and restored;
|
|
32
|
+
"Delete for good" is offered only on archived files. A story opens in a new
|
|
33
|
+
conversation with its story view.
|
|
34
|
+
- In a one-to-one chat, Clone can ask Writer, Artist, Scout, Pioneer or Guardian for help
|
|
35
|
+
through the new `a2a_call` tool, and Writer can ask Artist for illustrations. A clone
|
|
36
|
+
that is called cannot call a further one.
|
|
37
|
+
- Google Gemini can draw pictures. The `image_engine` setting takes `auto` (the default),
|
|
38
|
+
`local` or `gemini`, and `image_model` picks the Gemini model (default
|
|
39
|
+
`gemini-2.5-flash-image`). On `auto`, Gemini draws only when no local engine or remote
|
|
40
|
+
GPU is ready and your chat already uses Gemini with a saved key; on `local`, no picture
|
|
41
|
+
request leaves your machines. Settings › Images (previously Tools) offers the same
|
|
42
|
+
choice and shows what is drawing pictures now. `ucx media status` lists Gemini too.
|
|
43
|
+
- Clones can have their own pictures. Choose one from a clone's profile ("Upload
|
|
44
|
+
picture…", "Ask {name} to make one", "Reset to default"), or with **Use as avatar**
|
|
45
|
+
under a picture in the conversation, with Undo. Uploads must be PNG, JPEG or WebP and
|
|
46
|
+
10 MB or smaller. Clones can set their own with the `set_avatar` tool. Pictures show in
|
|
47
|
+
the rail, including the Group Chats list, and in the conversation.
|
|
48
|
+
- Settings has a "Remote GPU Worker (SSH Auto-Tunnel)" section that connects to a
|
|
49
|
+
workstation over SSH and starts ComfyUI there. By default only image generation runs on
|
|
50
|
+
it; tick "Also run the LLM on this worker (Ollama)" to move the chat model too. The
|
|
51
|
+
previous LLM address comes back when you disconnect.
|
|
52
|
+
- Settings › Usage limits how many tokens paid models may use, across every conversation
|
|
53
|
+
and clone, over 10 minutes, 5 hours and a week, with presets or your own numbers. Local
|
|
54
|
+
models are not counted. A banner appears at 80% of a limit. At a limit, the next paid
|
|
55
|
+
call is refused before anything is sent, and the message says when paid models can be
|
|
56
|
+
used again. `UCLONE_USAGE_LIMIT_10_MINUTES`, `UCLONE_USAGE_LIMIT_5_HOURS` and
|
|
57
|
+
`UCLONE_USAGE_LIMIT_WEEK` set the same limits.
|
|
58
|
+
- A "Fast model" for quick background work, such as choosing who speaks next, separate
|
|
59
|
+
from the chat model. It follows the chat model unless you choose one, in Settings or with
|
|
60
|
+
`ucx llm use --fast <model>`.
|
|
61
|
+
- For OpenAI, Anthropic and Gemini, Settings lists the models the provider offers for your
|
|
62
|
+
key, marks one "(recommended)", and has "Refresh list"; it works before you save, and
|
|
63
|
+
says in plain words when the list cannot load. You can still type any model name.
|
|
64
|
+
- `ucx key set <provider>` and `ucx key remove <provider>`; `ucx key list` shows each
|
|
65
|
+
saved key masked and whether an environment variable overrides it.
|
|
66
|
+
- One Language setting (System default, English, Korean). Settings, the rail, the
|
|
67
|
+
conversation, the composer, tool steps and the dock are translated; the Files screen and
|
|
68
|
+
the story view are English only for now. Clones still answer in the language you write in.
|
|
69
|
+
- When a provider refuses a turn, you are told which provider and why (key rejected,
|
|
70
|
+
quota, outage, unreachable, model not available), with a suggested fix.
|
|
71
|
+
- If `ucx-agent-skills` is missing from the project UClone-X was started from, the CLI
|
|
72
|
+
and Settings › Skills say so.
|
|
73
|
+
- The package metadata links to the GitHub repository: homepage, source, issues and this
|
|
74
|
+
changelog.
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
|
|
78
|
+
- **API keys are saved per provider** in the settings file, so saving or switching one
|
|
79
|
+
provider never drops another's key, and each key is sent only to its own provider. An
|
|
80
|
+
old single saved key is read as its provider's key and rewritten in the new layout the
|
|
81
|
+
next time settings are saved; a key with no known provider is sent nowhere until you save
|
|
82
|
+
it again. `ucx key setup` now saves to the settings file and no longer writes `.env`.
|
|
83
|
+
UClone-X does not read `.env` itself: if you relied on one, load it into your shell or run
|
|
84
|
+
`ucx key set <provider>`.
|
|
85
|
+
- **Environment variables outrank Settings.** `LLM_PROVIDER`, `*_MODEL`, `*_BASE_URL` and
|
|
86
|
+
`*_API_KEY` set in your shell win over saved settings, and Settings, `ucx key` and
|
|
87
|
+
`ucx llm use` say which variable is in effect. `ucx start` no longer sets `LLM_PROVIDER`
|
|
88
|
+
or the model for you, so the ones chosen in Settings take effect; unset your own exports
|
|
89
|
+
to let Settings decide. With no model set anywhere, a request is refused with a plain
|
|
90
|
+
message instead of falling back to a built-in model.
|
|
91
|
+
- The per-session token limit is gone by default; the Usage limits above replace it.
|
|
92
|
+
- **Skills approved before this release must be approved again.** `ucx skill approve` now
|
|
93
|
+
records approvals in `~/.uclone/skills/approvals.json`, asks you to type yes in the
|
|
94
|
+
terminal, and refuses when there is no terminal, so a script or a clone cannot approve a
|
|
95
|
+
skill. A skill edited after approval is not loaded, and Settings › Skills says why each
|
|
96
|
+
skill is not in use.
|
|
97
|
+
- A persona's `allowed_tools` is the range of tools it may use, not a list that is always
|
|
98
|
+
loaded. With a local Ollama model and an embedder, each message gets a base set of tools
|
|
99
|
+
plus up to three matching ones, and a new `search_tools` tool lets the model add others.
|
|
100
|
+
Other providers get every allowed tool.
|
|
101
|
+
- The image prompt skills `media-prompt-danbooru`, `media-prompt-flux` and
|
|
102
|
+
`media-prompt-generic` are replaced by `media-character`, `media-architecture` and
|
|
103
|
+
`media-engineering`, which load the section for the active image model.
|
|
104
|
+
- Removed HTTP routes: `POST /api/turn`, `GET` and `DELETE /api/session/history`,
|
|
105
|
+
`POST /api/session/history/truncate` and `GET /api/agents`. Every conversation runs as a
|
|
106
|
+
room; use the rooms API, and `GET /api/personas` for the list of clones. Saved history is
|
|
107
|
+
kept.
|
|
108
|
+
- Approving codex changes and changing diagnostics consent work only from a browser window
|
|
109
|
+
UClone-X opened; any other window offers "Open a confirmed window".
|
|
110
|
+
- The rail no longer shows which clones are active.
|
|
111
|
+
|
|
112
|
+
### Fixed
|
|
113
|
+
|
|
114
|
+
- Gemini models can use tools; before, nearly every built-in tool was refused.
|
|
115
|
+
- Ollama's model list uses the address typed in Settings, and says when nothing answers
|
|
116
|
+
there. `localhost`, `127.0.0.1` and `[::1]` on one port count as the same server.
|
|
117
|
+
- A dashboard started with its own storage folder uses the model and usage limits saved
|
|
118
|
+
there.
|
|
119
|
+
- Clicking a clone in the rail no longer jumps to a group chat it is in, and only one clone
|
|
120
|
+
is selected at a time.
|
|
121
|
+
- Typing in the message box no longer redraws the whole conversation on every keystroke.
|
|
122
|
+
- Gemini pictures keep the format Gemini returned (JPEG or PNG), and image links in
|
|
123
|
+
replies open.
|
|
124
|
+
- Shell commands a clone runs no longer wait for keyboard input, `file_edit` keeps a
|
|
125
|
+
file's line endings, a tool call with wrong arguments names each one, and a sandbox that
|
|
126
|
+
cannot start is reported in a plain sentence.
|
|
127
|
+
|
|
16
128
|
## [0.2.2] - 2026-09-24
|
|
17
129
|
|
|
18
130
|
### Added
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: uclone-x
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Local AI clones with memory, tools and group chat, on an event-driven agent runtime
|
|
5
|
+
Project-URL: Homepage, https://github.com/UClone-AI/uclone-x
|
|
6
|
+
Project-URL: Documentation, https://github.com/UClone-AI/uclone-x#readme
|
|
7
|
+
Project-URL: Source, https://github.com/UClone-AI/uclone-x
|
|
8
|
+
Project-URL: Issues, https://github.com/UClone-AI/uclone-x/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/UClone-AI/uclone-x/blob/main/CHANGELOG.md
|
|
5
10
|
Author-email: Kenny Lim <kennylim@uclone.net>
|
|
6
11
|
License-Expression: Apache-2.0
|
|
7
12
|
License-File: LICENSE
|
|
@@ -13,6 +18,7 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
13
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
22
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
17
23
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
18
24
|
Requires-Python: >=3.11
|
|
@@ -91,16 +97,39 @@ Description-Content-Type: text/markdown
|
|
|
91
97
|
|
|
92
98
|
# ⚡ UClone-X
|
|
93
99
|
|
|
94
|
-
**
|
|
100
|
+
**AI clones that run on your own machine — chat with them one-to-one or in a group,
|
|
101
|
+
and let them remember, read your files, search and draw.**
|
|
95
102
|
|
|
96
103
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
97
104
|
[](https://www.python.org/)
|
|
98
|
-
[](docs/llm-agnostic-interface.md)
|
|
105
|
+
[](https://github.com/UClone-AI/uclone-x/blob/main/docs/llm-agnostic-interface.md)
|
|
99
106
|
|
|
100
107
|
</div>
|
|
101
108
|
|
|
102
109
|
---
|
|
103
110
|
|
|
111
|
+
UClone-X is a local AI workspace. You install it, open the dashboard in your
|
|
112
|
+
browser, and talk to *clones* — agents with their own instructions, memory and
|
|
113
|
+
tools. A local model through Ollama works with no account and no API key; a
|
|
114
|
+
Gemini, Claude or OpenAI key works too.
|
|
115
|
+
|
|
116
|
+
Underneath is an event-driven agent runtime you can also use on its own: see
|
|
117
|
+
[For developers](#for-developers).
|
|
118
|
+
|
|
119
|
+
## What it looks like
|
|
120
|
+
|
|
121
|
+
Ask a clone a question. Here the default **clone** answers with a structured
|
|
122
|
+
summary on a local model (`ollama:qwen3:8b`):
|
|
123
|
+
|
|
124
|
+

|
|
125
|
+
|
|
126
|
+
Or ask the **artist** clone for a picture. The image appears in the conversation,
|
|
127
|
+
with links to open it in the browser or in Docs:
|
|
128
|
+
|
|
129
|
+

|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
104
133
|
## Install
|
|
105
134
|
|
|
106
135
|
On macOS or Linux, paste this into a terminal:
|
|
@@ -166,19 +195,128 @@ pip install "uclone-x[all]"
|
|
|
166
195
|
|
|
167
196
|
Every extra resolves on Python 3.11, 3.12 and 3.13.
|
|
168
197
|
|
|
169
|
-
###
|
|
198
|
+
### Models
|
|
199
|
+
|
|
200
|
+
`ucx install` downloads the local language model and the image checkpoint and
|
|
201
|
+
checks that each one actually works; it reports a partial setup as incomplete
|
|
202
|
+
rather than as success. You can also do this later from the dashboard.
|
|
203
|
+
|
|
204
|
+
As a rough guide to what fits, from the installer's own advice:
|
|
205
|
+
|
|
206
|
+
| Memory | Local model | Image generation |
|
|
207
|
+
| :--- | :--- | :--- |
|
|
208
|
+
| under 8 GB | use a cloud model (API key) | no |
|
|
209
|
+
| 8–16 GB | `qwen3:1.7b`, or a cloud model | no |
|
|
210
|
+
| 16–24 GB | `qwen3:8b` | 512 px |
|
|
211
|
+
| 24 GB and up | `qwen3:8b` | 768 px |
|
|
212
|
+
|
|
213
|
+
## Connecting a model
|
|
214
|
+
|
|
215
|
+
Pick **one** of these:
|
|
216
|
+
|
|
217
|
+
* **Local, no key.** Install [Ollama](https://ollama.com). `ucx start` finds it
|
|
218
|
+
and offers a model that fits; models can also be added and removed from
|
|
219
|
+
Settings, or with `ucx llm pull` and `ucx llm rm`.
|
|
220
|
+
* **In the dashboard.** Open Settings, choose Gemini, Anthropic, OpenAI, vLLM or
|
|
221
|
+
Ollama, and enter the key or server address there. It is remembered for the
|
|
222
|
+
next start, in `~/.uclone/sessions/settings.json` as plain text — treat that
|
|
223
|
+
file like the key itself.
|
|
224
|
+
* **From the environment.** `ucx` reads provider settings from environment
|
|
225
|
+
variables, which take precedence over what Settings saved:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
export ANTHROPIC_API_KEY=... # or GEMINI_API_KEY, OPENAI_API_KEY
|
|
229
|
+
ucx start
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
`ucx` does **not** read a `.env` file by itself. The repository's
|
|
233
|
+
`.env.example` lists every variable it understands; if you keep yours in a
|
|
234
|
+
`.env`, load it into the shell first (`set -a; . ./.env; set +a`).
|
|
235
|
+
|
|
236
|
+
`ucx llm status` shows which providers it can reach.
|
|
237
|
+
|
|
238
|
+
## What you can do
|
|
239
|
+
|
|
240
|
+
* **Clones.** Six ship built in — clone (the default), writer, artist,
|
|
241
|
+
guardian, pioneer and scout. Create your own, or edit one, from Settings; the
|
|
242
|
+
connected model can draft its instructions for you. Each clone is a YAML file
|
|
243
|
+
in your workspace.
|
|
244
|
+
* **Conversations.** One-to-one chats and group chats with several clones,
|
|
245
|
+
listed most recent first, with pinning, rename and delete. Replies stream as
|
|
246
|
+
they are written, including each tool call; messages render Markdown and math.
|
|
247
|
+
Group conversations can also be driven from the terminal with `ucx room`.
|
|
248
|
+
* **Memory.** Every clone can record, look up and retract facts, and remembers
|
|
249
|
+
them across conversations. The dock's Remembers tab lists what each clone
|
|
250
|
+
saved.
|
|
251
|
+
* **Files and images.** Clones read files in your workspace and in folders you
|
|
252
|
+
mark read-only, write only inside the workspace, and generate images in-process
|
|
253
|
+
(or through ComfyUI when one is running). What each turn produced appears in
|
|
254
|
+
the dock beside the conversation.
|
|
255
|
+
* **Tools from elsewhere.** Connect MCP servers from Settings — a remote one by
|
|
256
|
+
URL, a local one by command, or by pasting a vendor's `mcpServers` snippet.
|
|
257
|
+
* **The terminal.** `ucx run` is the same agent as an interactive REPL, with
|
|
258
|
+
streaming, tool calls and slash commands; `ucx run --prompt "…"` answers once.
|
|
259
|
+
* **Your editor.** `ucx acp serve` lets an editor that speaks the Agent Client
|
|
260
|
+
Protocol talk to a clone.
|
|
261
|
+
|
|
262
|
+
`ucx --help` lists every command.
|
|
263
|
+
|
|
264
|
+
## Where your data lives
|
|
265
|
+
|
|
266
|
+
UClone-X has no server of its own and no account. Conversations and dashboard
|
|
267
|
+
settings are kept under `~/.uclone/sessions/` (`UCLONE_SESSION_DIR` moves them),
|
|
268
|
+
each clone's memory under `~/.uclone/agents/` (`UCLONE_AGENTS_DIR`), and clone
|
|
269
|
+
definitions are YAML files in the workspace folder.
|
|
270
|
+
|
|
271
|
+
What leaves the machine is what you connect it to: your messages go to the model
|
|
272
|
+
provider you chose, a web search goes to the search service, and an MCP server
|
|
273
|
+
you add receives what its tools are called with. With a local model and no
|
|
274
|
+
remote tools, nothing leaves at all.
|
|
275
|
+
|
|
276
|
+
## Something went wrong?
|
|
170
277
|
|
|
171
|
-
`ucx
|
|
172
|
-
and slash commands. It reads its model from the environment — an API key such as
|
|
173
|
-
`OPENAI_API_KEY`, or a local Ollama:
|
|
278
|
+
`ucx` keeps a record of what failed, on your machine, and only if you allow it:
|
|
174
279
|
|
|
175
280
|
```bash
|
|
176
|
-
|
|
281
|
+
ucx report --enable # start recording failures locally
|
|
282
|
+
ucx report # show what has been recorded
|
|
283
|
+
ucx report --open # open a pre-filled bug report in your browser
|
|
177
284
|
```
|
|
178
285
|
|
|
179
|
-
|
|
286
|
+
**Nothing is uploaded on its own.** There is no telemetry server and no account
|
|
287
|
+
to sign into. `ucx report` prints the exact text that would be sent; `--open`
|
|
288
|
+
fills in a GitHub issue form that you still have to submit yourself. If you have
|
|
289
|
+
the GitHub CLI, `ucx report --submit` files it through your own `gh` login.
|
|
290
|
+
|
|
291
|
+
What gets recorded: the error type, the code path it failed on, your UClone-X,
|
|
292
|
+
Python and OS versions, and the error message. Your prompts and the contents of
|
|
293
|
+
your files are never included, and paths are reduced — code paths to the file
|
|
294
|
+
name, home directories to `~`.
|
|
295
|
+
|
|
296
|
+
Masking is pattern-based, like every credential scrubber: it recognises the
|
|
297
|
+
shapes that occur in practice — `sk-…`, `ghp_…`, home directories on Linux,
|
|
298
|
+
macOS and Windows — and cannot promise to catch a token shape or a path layout
|
|
299
|
+
nobody has seen. That is why `ucx report` shows you the text before anything is
|
|
300
|
+
sent, and why the text is the last word on what leaves your machine.
|
|
301
|
+
|
|
302
|
+
Turn it off with `ucx report --disable` and delete what was recorded with
|
|
303
|
+
`ucx report --clear`.
|
|
304
|
+
|
|
305
|
+
Common first-run problems:
|
|
306
|
+
|
|
307
|
+
* **"No active LLM provider connected."** No model is reachable. Start Ollama
|
|
308
|
+
(`ollama serve`), or set a key in Settings or the environment — see
|
|
309
|
+
[Connecting a model](#connecting-a-model). `ucx llm status` says which
|
|
310
|
+
providers answered.
|
|
311
|
+
* **A key in `.env` is ignored.** `ucx` reads the environment, not `.env`; load
|
|
312
|
+
the file into your shell first.
|
|
313
|
+
* **`ucx: command not found` after the installer.** It is not on your PATH yet;
|
|
314
|
+
add the `export PATH=…` line the installer printed to `~/.zshrc` (or
|
|
315
|
+
`~/.bashrc`), or run it as `~/.local/bin/ucx` until then — see [Install](#install).
|
|
316
|
+
|
|
317
|
+
## For developers
|
|
180
318
|
|
|
181
|
-
|
|
319
|
+
### The runtime
|
|
182
320
|
|
|
183
321
|
An agent runtime built around a non-blocking reactive event loop rather than a
|
|
184
322
|
blocking request/response cycle. Agents yield when idle and wake on tool
|
|
@@ -199,7 +337,7 @@ external broker.
|
|
|
199
337
|
reasons against instead of inventing structure per prompt.
|
|
200
338
|
* **OpenTelemetry native** — traces, metrics and OTLP export built in.
|
|
201
339
|
|
|
202
|
-
|
|
340
|
+
### Implementation status
|
|
203
341
|
|
|
204
342
|
UClone-X is pre-1.0 and under active development. Read this section before
|
|
205
343
|
depending on it.
|
|
@@ -209,60 +347,38 @@ depending on it.
|
|
|
209
347
|
| Event bus, agent state machine, sessions | Implemented |
|
|
210
348
|
| Tool runtime, MCP client, built-in tools | Implemented |
|
|
211
349
|
| LLM connectors (Gemini, Claude, OpenAI, Ollama, vLLM) | Implemented |
|
|
350
|
+
| Dashboard: conversations, clones, memory, settings | Implemented |
|
|
351
|
+
| Local image generation | Implemented |
|
|
212
352
|
| Sandbox isolation modes | Implemented (host and workspace); container and WASM partial |
|
|
213
353
|
| Ontology engine, skills, code intelligence | Implemented, evolving |
|
|
214
|
-
| Developer dashboard | Implemented |
|
|
215
354
|
| A2A protocol | **Specified, not implemented.** No conformance is claimed |
|
|
216
355
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
`ucx` keeps a record of what failed, on your machine, and only if you allow it:
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
ucx report --enable # start recording failures locally
|
|
223
|
-
ucx report # show what has been recorded
|
|
224
|
-
ucx report --open # open a pre-filled bug report in your browser
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
**Nothing is uploaded on its own.** There is no telemetry server and no account
|
|
228
|
-
to sign into. `ucx report` prints the exact text that would be sent; `--open`
|
|
229
|
-
fills in a GitHub issue form that you still have to submit yourself. If you have
|
|
230
|
-
the GitHub CLI, `ucx report --submit` files it through your own `gh` login.
|
|
231
|
-
|
|
232
|
-
What gets recorded: the error type, the code path it failed on, your UClone-X,
|
|
233
|
-
Python and OS versions, and the error message. Your prompts and the contents of
|
|
234
|
-
your files are never included, and paths are reduced — code paths to the file
|
|
235
|
-
name, home directories to `~`.
|
|
236
|
-
|
|
237
|
-
Masking is pattern-based, like every credential scrubber: it recognises the
|
|
238
|
-
shapes that occur in practice — `sk-…`, `ghp_…`, home directories on Linux,
|
|
239
|
-
macOS and Windows — and cannot promise to catch a token shape or a path layout
|
|
240
|
-
nobody has seen. That is why `ucx report` shows you the text before anything is
|
|
241
|
-
sent, and why the text is the last word on what leaves your machine.
|
|
242
|
-
|
|
243
|
-
Turn it off with `ucx report --disable` and delete what was recorded with
|
|
244
|
-
`ucx report --clear`.
|
|
356
|
+
### Documentation
|
|
245
357
|
|
|
246
|
-
|
|
358
|
+
The documents below are the design and specification of the runtime; they are
|
|
359
|
+
written for contributors rather than as a user manual.
|
|
247
360
|
|
|
248
|
-
* [
|
|
249
|
-
* [
|
|
250
|
-
|
|
361
|
+
* [Documentation index](https://github.com/UClone-AI/uclone-x/blob/main/docs/README.md)
|
|
362
|
+
* [Module structure](https://github.com/UClone-AI/uclone-x/blob/main/docs/module-structure.md) — the packages as built, their layers
|
|
363
|
+
and dependency edges
|
|
364
|
+
* [Architecture overview](https://github.com/UClone-AI/uclone-x/blob/main/docs/architecture-overview.md)
|
|
365
|
+
* [Event-driven agent core](https://github.com/UClone-AI/uclone-x/blob/main/docs/event-driven-agent-core.md)
|
|
366
|
+
* [Core principles P0–P9](https://github.com/UClone-AI/uclone-x/blob/main/docs/principles/core-principles.md) — the normative
|
|
251
367
|
rules every part of the runtime is built against
|
|
252
|
-
* [Product requirements](docs/PRD.md)
|
|
253
|
-
* [CLI specification](docs/cli-specification.md)
|
|
254
|
-
* [LLM-agnostic interface](docs/llm-agnostic-interface.md)
|
|
255
|
-
* [Dynamic persona and sub-agent interface](docs/dynamic-persona-interface.md)
|
|
256
|
-
* [Local collaboration engine](docs/local-collaboration-engine.md)
|
|
257
|
-
* [Sandbox execution](docs/sandbox-execution-architecture.md)
|
|
258
|
-
* [Ontology architecture](docs/agent-ontology-architecture.md)
|
|
259
|
-
* [Skill system](docs/skill-system-architecture.md)
|
|
260
|
-
* [Code intelligence (AST, LSP, SCIP)](docs/code-intelligence-lsp-scip.md)
|
|
261
|
-
* [Telemetry](docs/telemetry-opentelemetry.md)
|
|
262
|
-
* [A2A protocol specification](docs/a2a-protocol-spec.md)
|
|
263
|
-
* [Security threat model](docs/security-threat-model.md)
|
|
264
|
-
|
|
265
|
-
|
|
368
|
+
* [Product requirements](https://github.com/UClone-AI/uclone-x/blob/main/docs/PRD.md)
|
|
369
|
+
* [CLI specification](https://github.com/UClone-AI/uclone-x/blob/main/docs/cli-specification.md)
|
|
370
|
+
* [LLM-agnostic interface](https://github.com/UClone-AI/uclone-x/blob/main/docs/llm-agnostic-interface.md)
|
|
371
|
+
* [Dynamic persona and sub-agent interface](https://github.com/UClone-AI/uclone-x/blob/main/docs/dynamic-persona-interface.md)
|
|
372
|
+
* [Local collaboration engine](https://github.com/UClone-AI/uclone-x/blob/main/docs/local-collaboration-engine.md)
|
|
373
|
+
* [Sandbox execution](https://github.com/UClone-AI/uclone-x/blob/main/docs/sandbox-execution-architecture.md)
|
|
374
|
+
* [Ontology architecture](https://github.com/UClone-AI/uclone-x/blob/main/docs/agent-ontology-architecture.md)
|
|
375
|
+
* [Skill system](https://github.com/UClone-AI/uclone-x/blob/main/docs/skill-system-architecture.md)
|
|
376
|
+
* [Code intelligence (AST, LSP, SCIP)](https://github.com/UClone-AI/uclone-x/blob/main/docs/code-intelligence-lsp-scip.md)
|
|
377
|
+
* [Telemetry](https://github.com/UClone-AI/uclone-x/blob/main/docs/telemetry-opentelemetry.md)
|
|
378
|
+
* [A2A protocol specification](https://github.com/UClone-AI/uclone-x/blob/main/docs/a2a-protocol-spec.md)
|
|
379
|
+
* [Security threat model](https://github.com/UClone-AI/uclone-x/blob/main/docs/security-threat-model.md)
|
|
380
|
+
|
|
381
|
+
### Working on UClone-X
|
|
266
382
|
|
|
267
383
|
An installed build is for *using* the agent. To change it, work from a checkout:
|
|
268
384
|
the development commands — `setup`, `test`, `dev` — exist only there, because
|
|
@@ -281,19 +397,19 @@ npm ci --prefix frontend # the gate runs the frontend's vitest suite
|
|
|
281
397
|
strict mode, the test suite at or above 70% branch coverage, and a passing
|
|
282
398
|
frontend vitest suite. A change that does not pass it is not ready.
|
|
283
399
|
|
|
284
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for how patches reach this repository,
|
|
285
|
-
and [
|
|
400
|
+
See [CONTRIBUTING.md](https://github.com/UClone-AI/uclone-x/blob/main/CONTRIBUTING.md) for how patches reach this repository,
|
|
401
|
+
and the [local development guide](https://github.com/UClone-AI/uclone-x/blob/main/docs/local-development-guide.md) for the
|
|
286
402
|
longer setup walkthrough.
|
|
287
403
|
|
|
288
404
|
## About this repository
|
|
289
405
|
|
|
290
|
-
This repository is the UClone-X runtime and its documentation. It
|
|
291
|
-
from a private development repository, in periodic snapshots rather
|
|
292
|
-
mirror of that repository's history. The evaluation suites and
|
|
293
|
-
build tooling used to develop it are not part of the published
|
|
294
|
-
runtime detects their absence and degrades cleanly, so `ucx eval`
|
|
295
|
-
no evaluation backend is installed rather than failing to start.
|
|
406
|
+
This repository is the UClone-X runtime, its dashboard and its documentation. It
|
|
407
|
+
is published from a private development repository, in periodic snapshots rather
|
|
408
|
+
than as a mirror of that repository's history. The evaluation suites and
|
|
409
|
+
multi-agent build tooling used to develop it are not part of the published
|
|
410
|
+
subset; the runtime detects their absence and degrades cleanly, so `ucx eval`
|
|
411
|
+
reports that no evaluation backend is installed rather than failing to start.
|
|
296
412
|
|
|
297
413
|
## License
|
|
298
414
|
|
|
299
|
-
Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
415
|
+
Apache 2.0 — see [LICENSE](https://github.com/UClone-AI/uclone-x/blob/main/LICENSE) and [NOTICE](https://github.com/UClone-AI/uclone-x/blob/main/NOTICE).
|