uclone-x 0.2.2__tar.gz → 0.3.1__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.
Files changed (399) hide show
  1. {uclone_x-0.2.2 → uclone_x-0.3.1}/.gitignore +16 -1
  2. {uclone_x-0.2.2 → uclone_x-0.3.1}/CHANGELOG.md +158 -0
  3. {uclone_x-0.2.2 → uclone_x-0.3.1}/PKG-INFO +193 -69
  4. uclone_x-0.3.1/README.md +324 -0
  5. {uclone_x-0.2.2 → uclone_x-0.3.1}/pyproject.toml +20 -4
  6. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/__init__.py +1 -1
  7. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/adapters/uclone2/adk_content.py +8 -1
  8. uclone_x-0.3.1/src/uclone_x/agent/artist_skill_router.py +345 -0
  9. uclone_x-0.3.1/src/uclone_x/agent/avatar_tool.py +112 -0
  10. uclone_x-0.3.1/src/uclone_x/agent/base.py +2473 -0
  11. uclone_x-0.3.1/src/uclone_x/agent/clone_builder.py +474 -0
  12. uclone_x-0.3.1/src/uclone_x/agent/compaction_driver.py +655 -0
  13. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/composition.py +33 -5
  14. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/hooks/artifact_validation.py +56 -8
  15. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/hooks/runner.py +41 -1
  16. uclone_x-0.3.1/src/uclone_x/agent/image_set_planner.py +375 -0
  17. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/loop/__init__.py +4 -0
  18. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/loop/models.py +7 -0
  19. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/loop/parser.py +49 -19
  20. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/loop/runner.py +10 -1
  21. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/loop/scheduler.py +11 -1
  22. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/models.py +78 -144
  23. uclone_x-0.3.1/src/uclone_x/agent/nudges.py +280 -0
  24. uclone_x-0.3.1/src/uclone_x/agent/persona_avatar.py +363 -0
  25. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/persona_store.py +24 -2
  26. uclone_x-0.3.1/src/uclone_x/agent/prompt_assembler.py +827 -0
  27. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/protocols.py +26 -0
  28. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/request_record.py +111 -6
  29. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/session.py +224 -609
  30. uclone_x-0.3.1/src/uclone_x/agent/session_lifecycle.py +1208 -0
  31. uclone_x-0.3.1/src/uclone_x/agent/tool_execution.py +786 -0
  32. uclone_x-0.3.1/src/uclone_x/agent/tool_invoker.py +405 -0
  33. uclone_x-0.3.1/src/uclone_x/agent/turn_executor.py +2665 -0
  34. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/turn_trace.py +137 -1
  35. uclone_x-0.3.1/src/uclone_x/artifacts/__init__.py +6 -0
  36. uclone_x-0.3.1/src/uclone_x/artifacts/library.py +944 -0
  37. uclone_x-0.3.1/src/uclone_x/cli/browser_plan.py +356 -0
  38. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/changed_scope.py +118 -44
  39. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/a2a.py +124 -17
  40. uclone_x-0.3.1/src/uclone_x/cli/commands/acp.py +236 -0
  41. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/bootstrap.py +5 -95
  42. uclone_x-0.3.1/src/uclone_x/cli/commands/key.py +217 -0
  43. uclone_x-0.3.1/src/uclone_x/cli/commands/link.py +328 -0
  44. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/llm.py +38 -3
  45. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/loop.py +85 -33
  46. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/media.py +35 -1
  47. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/room.py +87 -20
  48. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/run.py +232 -52
  49. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/session_dev.py +4 -1
  50. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/skill.py +198 -68
  51. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/main.py +58 -14
  52. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/quality_gate.py +135 -28
  53. uclone_x-0.3.1/src/uclone_x/cli/scope_rules.py +208 -0
  54. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/code_intel/ast_parser.py +52 -31
  55. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/config/default_models.yaml +8 -7
  56. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/__init__.py +8 -4
  57. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/agent_home.py +4 -3
  58. uclone_x-0.3.1/src/uclone_x/core/context_state.py +475 -0
  59. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/environment_install.py +3 -1
  60. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/log_writer.py +7 -18
  61. uclone_x-0.3.1/src/uclone_x/core/models.py +196 -0
  62. uclone_x-0.3.1/src/uclone_x/core/remote_worker.py +667 -0
  63. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/secrets.py +18 -0
  64. uclone_x-0.3.1/src/uclone_x/core/session.py +186 -0
  65. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/session_diagnostics.py +39 -18
  66. uclone_x-0.3.1/src/uclone_x/core/session_log.py +226 -0
  67. uclone_x-0.3.1/src/uclone_x/core/session_state.py +556 -0
  68. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/session_store.py +1 -1
  69. uclone_x-0.3.1/src/uclone_x/core/set_aside.py +376 -0
  70. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/tool_results.py +160 -30
  71. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/engine/event_bus.py +2 -0
  72. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/errors.py +279 -35
  73. uclone_x-0.3.1/src/uclone_x/i18n/__init__.py +21 -0
  74. uclone_x-0.3.1/src/uclone_x/i18n/language.py +71 -0
  75. uclone_x-0.3.1/src/uclone_x/link/__init__.py +5 -0
  76. uclone_x-0.3.1/src/uclone_x/link/uclone2/__init__.py +5 -0
  77. uclone_x-0.3.1/src/uclone_x/link/uclone2/client.py +362 -0
  78. uclone_x-0.3.1/src/uclone_x/link/uclone2/frames.py +213 -0
  79. uclone_x-0.3.1/src/uclone_x/link/uclone2/models.py +156 -0
  80. uclone_x-0.3.1/src/uclone_x/link/uclone2/runtime_lock.py +117 -0
  81. uclone_x-0.3.1/src/uclone_x/link/uclone2/service.py +268 -0
  82. uclone_x-0.3.1/src/uclone_x/link/uclone2/session.py +600 -0
  83. uclone_x-0.3.1/src/uclone_x/link/uclone2/store.py +212 -0
  84. uclone_x-0.3.1/src/uclone_x/link/uclone2/supervisor.py +335 -0
  85. uclone_x-0.3.1/src/uclone_x/llm/__init__.py +146 -0
  86. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/budget.py +45 -68
  87. uclone_x-0.3.1/src/uclone_x/llm/catalog.py +172 -0
  88. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/compactor.py +123 -52
  89. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/anthropic.py +161 -34
  90. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/base.py +82 -1
  91. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/factory.py +237 -118
  92. uclone_x-0.3.1/src/uclone_x/llm/connectors/failures.py +128 -0
  93. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/gemini.py +218 -32
  94. uclone_x-0.3.1/src/uclone_x/llm/connectors/listing.py +93 -0
  95. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/mock.py +12 -2
  96. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/ollama.py +45 -16
  97. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/openai.py +106 -54
  98. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/saved_choice.py +221 -46
  99. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/vllm.py +6 -12
  100. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/context_window.py +21 -0
  101. uclone_x-0.3.1/src/uclone_x/llm/model_policy.py +92 -0
  102. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/models.py +79 -5
  103. uclone_x-0.3.1/src/uclone_x/llm/providers.py +174 -0
  104. uclone_x-0.3.1/src/uclone_x/llm/usage/__init__.py +5 -0
  105. uclone_x-0.3.1/src/uclone_x/llm/usage/gate.py +237 -0
  106. uclone_x-0.3.1/src/uclone_x/llm/usage/limits.py +313 -0
  107. uclone_x-0.3.1/src/uclone_x/llm/usage/store.py +169 -0
  108. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/log/reader.py +2 -1
  109. uclone_x-0.3.1/src/uclone_x/memory/extractor.py +527 -0
  110. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/memory/models.py +65 -5
  111. uclone_x-0.3.1/src/uclone_x/memory/recall.py +149 -0
  112. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/memory/retrieval.py +8 -1
  113. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/memory/store.py +185 -121
  114. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/memory/tools.py +11 -2
  115. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ontology/__init__.py +1 -7
  116. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ontology/engine.py +3 -118
  117. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ontology/protocols.py +1 -15
  118. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ontology/reasoner.py +71 -2
  119. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ontology/rules.py +3 -1
  120. uclone_x-0.3.1/src/uclone_x/personas/artist.yaml +50 -0
  121. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/clone.yaml +9 -0
  122. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/guardian.yaml +1 -0
  123. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/pioneer.yaml +1 -0
  124. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/scout.yaml +1 -0
  125. uclone_x-0.3.1/src/uclone_x/personas/writer.yaml +40 -0
  126. uclone_x-0.3.1/src/uclone_x/room/a2a_handlers.py +418 -0
  127. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/models.py +376 -45
  128. uclone_x-0.3.1/src/uclone_x/room/notices.py +100 -0
  129. uclone_x-0.3.1/src/uclone_x/room/one_seat.py +443 -0
  130. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/orchestrator.py +528 -103
  131. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/protocols.py +37 -1
  132. uclone_x-0.3.1/src/uclone_x/room/resolver.py +392 -0
  133. uclone_x-0.3.1/src/uclone_x/room/seat_knowledge_import.py +450 -0
  134. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/selectors.py +26 -6
  135. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/service.py +228 -38
  136. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/store.py +38 -9
  137. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/turn_summary.py +5 -0
  138. uclone_x-0.3.1/src/uclone_x/sandbox/story_jail.py +169 -0
  139. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/shells/a2a_server.py +276 -24
  140. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/shells/acp/server.py +164 -14
  141. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/skills/__init__.py +6 -0
  142. uclone_x-0.3.1/src/uclone_x/skills/approvals.py +164 -0
  143. uclone_x-0.3.1/src/uclone_x/skills/auditor.py +1290 -0
  144. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/skills/models.py +65 -1
  145. uclone_x-0.3.1/src/uclone_x/skills/proposals.py +562 -0
  146. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/skills/protocols.py +32 -6
  147. uclone_x-0.3.1/src/uclone_x/skills/refusals.py +65 -0
  148. uclone_x-0.3.1/src/uclone_x/skills/shipped_pins.py +37 -0
  149. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/skills/synthesizer.py +119 -153
  150. uclone_x-0.3.1/src/uclone_x/story/__init__.py +62 -0
  151. uclone_x-0.3.1/src/uclone_x/story/audit.py +409 -0
  152. uclone_x-0.3.1/src/uclone_x/story/bundled/muse/fantasy.yaml +45 -0
  153. uclone_x-0.3.1/src/uclone_x/story/bundled/muse/horror.yaml +45 -0
  154. uclone_x-0.3.1/src/uclone_x/story/bundled/muse/mystery.yaml +45 -0
  155. uclone_x-0.3.1/src/uclone_x/story/bundled/muse/romance.yaml +45 -0
  156. uclone_x-0.3.1/src/uclone_x/story/bundled/muse/science-fiction.yaml +45 -0
  157. uclone_x-0.3.1/src/uclone_x/story/bundled/structures/heros-journey.yaml +49 -0
  158. uclone_x-0.3.1/src/uclone_x/story/bundled/structures/kishotenketsu.yaml +28 -0
  159. uclone_x-0.3.1/src/uclone_x/story/bundled/structures/save-the-cat.yaml +58 -0
  160. uclone_x-0.3.1/src/uclone_x/story/bundled/structures/three-act.yaml +37 -0
  161. uclone_x-0.3.1/src/uclone_x/story/context.py +787 -0
  162. uclone_x-0.3.1/src/uclone_x/story/library.py +575 -0
  163. uclone_x-0.3.1/src/uclone_x/story/muse.py +195 -0
  164. uclone_x-0.3.1/src/uclone_x/story/proposals.py +337 -0
  165. uclone_x-0.3.1/src/uclone_x/story/quotes.py +98 -0
  166. uclone_x-0.3.1/src/uclone_x/story/schemas.py +510 -0
  167. uclone_x-0.3.1/src/uclone_x/story/skill_data.py +590 -0
  168. uclone_x-0.3.1/src/uclone_x/story/timeline.py +305 -0
  169. uclone_x-0.3.1/src/uclone_x/story/tool.py +232 -0
  170. uclone_x-0.3.1/src/uclone_x/story/tools.py +1188 -0
  171. uclone_x-0.3.1/src/uclone_x/story/view.py +509 -0
  172. uclone_x-0.3.1/src/uclone_x/story/work.py +526 -0
  173. uclone_x-0.3.1/src/uclone_x/tools/base.py +891 -0
  174. uclone_x-0.3.1/src/uclone_x/tools/builtin/a2a.py +276 -0
  175. uclone_x-0.3.1/src/uclone_x/tools/builtin/character.py +602 -0
  176. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/comfy_image_tool.py +4 -4
  177. uclone_x-0.3.1/src/uclone_x/tools/builtin/danbooru_tags.py +186 -0
  178. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/filesystem.py +91 -44
  179. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/image.py +1092 -132
  180. uclone_x-0.3.1/src/uclone_x/tools/builtin/image_set_intent.py +175 -0
  181. uclone_x-0.3.1/src/uclone_x/tools/builtin/image_status.py +198 -0
  182. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/media_registry.py +139 -35
  183. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/shell.py +141 -20
  184. uclone_x-0.3.1/src/uclone_x/tools/builtin/skill_loader.py +250 -0
  185. uclone_x-0.3.1/src/uclone_x/tools/builtin/skill_proposer.py +85 -0
  186. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/subagent.py +20 -4
  187. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/tool_results.py +2 -2
  188. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/client.py +82 -27
  189. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/mcp_manager.py +106 -41
  190. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/models.py +53 -0
  191. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/registry.py +20 -0
  192. uclone_x-0.3.1/src/uclone_x/tools/schema.py +173 -0
  193. uclone_x-0.3.1/src/uclone_x/tools/tool_binder.py +243 -0
  194. uclone_x-0.3.1/src/uclone_x/tools/tool_scoper.py +159 -0
  195. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/app.py +1707 -2595
  196. uclone_x-0.3.1/src/uclone_x/ui/artifacts.py +204 -0
  197. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/clones.py +12 -18
  198. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/knowledge.py +48 -45
  199. uclone_x-0.3.1/src/uclone_x/ui/links.py +223 -0
  200. uclone_x-0.3.1/src/uclone_x/ui/person.py +235 -0
  201. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/room_dock.py +208 -107
  202. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/rooms.py +283 -240
  203. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/server.py +22 -3
  204. uclone_x-0.3.1/src/uclone_x/ui/usage.py +176 -0
  205. uclone_x-0.3.1/src/uclone_x/ui_build_inputs.sha256 +1 -0
  206. uclone_x-0.3.1/src/uclone_x/ui_static/assets/index-Di32pKan.js +874 -0
  207. uclone_x-0.2.2/src/uclone_x/ui_static/assets/index-uisJBy0U.css → uclone_x-0.3.1/src/uclone_x/ui_static/assets/index-Tx6G9-EN.css +1 -1
  208. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/index.html +2 -2
  209. uclone_x-0.2.2/README.md +0 -210
  210. uclone_x-0.2.2/src/uclone_x/agent/base.py +0 -5931
  211. uclone_x-0.2.2/src/uclone_x/cli/commands/acp.py +0 -120
  212. uclone_x-0.2.2/src/uclone_x/cli/commands/key.py +0 -207
  213. uclone_x-0.2.2/src/uclone_x/llm/__init__.py +0 -95
  214. uclone_x-0.2.2/src/uclone_x/personas/artist.yaml +0 -42
  215. uclone_x-0.2.2/src/uclone_x/personas/writer.yaml +0 -23
  216. uclone_x-0.2.2/src/uclone_x/room/knowledge.py +0 -74
  217. uclone_x-0.2.2/src/uclone_x/room/knowledge_store.py +0 -226
  218. uclone_x-0.2.2/src/uclone_x/room/resolver.py +0 -364
  219. uclone_x-0.2.2/src/uclone_x/skills/auditor.py +0 -777
  220. uclone_x-0.2.2/src/uclone_x/tools/base.py +0 -317
  221. uclone_x-0.2.2/src/uclone_x/tools/builtin/character.py +0 -330
  222. uclone_x-0.2.2/src/uclone_x/tools/builtin/skill_loader.py +0 -51
  223. uclone_x-0.2.2/src/uclone_x/tools/tool_scoper.py +0 -294
  224. uclone_x-0.2.2/src/uclone_x/ui_build_inputs.sha256 +0 -1
  225. uclone_x-0.2.2/src/uclone_x/ui_static/assets/index-B26a-pug.js +0 -836
  226. {uclone_x-0.2.2 → uclone_x-0.3.1}/LICENSE +0 -0
  227. {uclone_x-0.2.2 → uclone_x-0.3.1}/NOTICE +0 -0
  228. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/a2a/__init__.py +0 -0
  229. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/a2a/discovery.py +0 -0
  230. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/a2a/http_transport.py +0 -0
  231. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/a2a/in_memory.py +0 -0
  232. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/a2a/models.py +0 -0
  233. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/a2a/protocols.py +0 -0
  234. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/a2a/wire.py +0 -0
  235. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/acp/__init__.py +0 -0
  236. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/acp/conformance.py +0 -0
  237. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/adapters/__init__.py +0 -0
  238. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/adapters/uclone2/__init__.py +0 -0
  239. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/__init__.py +0 -0
  240. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/bootstrap.py +0 -0
  241. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/grounding.py +0 -0
  242. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/hooks/__init__.py +0 -0
  243. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/hooks/models.py +0 -0
  244. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/hooks/permission.py +0 -0
  245. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/hooks/protocols.py +0 -0
  246. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/hooks/script_runner.py +0 -0
  247. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/memory.py +0 -0
  248. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/persona_registry.py +0 -0
  249. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/planner.py +0 -0
  250. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/prompts.py +0 -0
  251. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/terminology.py +0 -0
  252. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/agent/text_tool_calls.py +0 -0
  253. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/__init__.py +0 -0
  254. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/agent_memory.py +0 -0
  255. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/bundle_freshness.py +0 -0
  256. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/__init__.py +0 -0
  257. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/dev.py +0 -0
  258. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/eval.py +0 -0
  259. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/ontology.py +0 -0
  260. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/report.py +0 -0
  261. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/commands/ui.py +0 -0
  262. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/cli/environment_provenance.py +0 -0
  263. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/code_intel/__init__.py +0 -0
  264. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/code_intel/models.py +0 -0
  265. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/code_intel/protocols.py +0 -0
  266. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/code_intel/scip.py +0 -0
  267. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/code_intel/symbol_graph.py +0 -0
  268. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/capability.py +0 -0
  269. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/client_driver.py +0 -0
  270. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/diagnostic_report.py +0 -0
  271. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/failure_journal.py +0 -0
  272. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/host.py +0 -0
  273. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/immutable.py +0 -0
  274. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/log_inspector.py +0 -0
  275. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/log_offset.py +0 -0
  276. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/logging_setup.py +0 -0
  277. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/provenance.py +0 -0
  278. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/core/workspace.py +0 -0
  279. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/engine/__init__.py +0 -0
  280. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/engine/mattermost_bridge.py +0 -0
  281. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/engine/protocols.py +0 -0
  282. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/evaluation/__init__.py +0 -0
  283. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/evaluation/answerer.py +0 -0
  284. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/evaluation/loader.py +0 -0
  285. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/evaluation/protocols.py +0 -0
  286. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/__init__.py +0 -0
  287. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/connectors/ollama_embedder.py +0 -0
  288. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/protocols.py +0 -0
  289. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/llm/router.py +0 -0
  290. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/log/__init__.py +0 -0
  291. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/log/file_allocator.py +0 -0
  292. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/memory/__init__.py +0 -0
  293. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/memory/vector_store.py +0 -0
  294. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ontology/justification.py +0 -0
  295. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ontology/models.py +0 -0
  296. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/artist.png +0 -0
  297. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/clone.png +0 -0
  298. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/guardian.png +0 -0
  299. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/pioneer.png +0 -0
  300. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/scout.png +0 -0
  301. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/personas/writer.png +0 -0
  302. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/room/__init__.py +0 -0
  303. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/sandbox/__init__.py +0 -0
  304. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/sandbox/models.py +0 -0
  305. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/sandbox/path_validator.py +0 -0
  306. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/sandbox/protocols.py +0 -0
  307. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/sandbox/workspace_runner.py +0 -0
  308. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/shells/acp/__init__.py +0 -0
  309. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/shells/acp/driver.py +0 -0
  310. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/shells/acp/models.py +0 -0
  311. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/shells/entry.py +0 -0
  312. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/shells/ui_process.py +0 -0
  313. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/__init__.py +0 -0
  314. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/exporter.py +0 -0
  315. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/langfuse.py +0 -0
  316. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/metrics.py +0 -0
  317. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/models.py +0 -0
  318. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/otel_sdk.py +0 -0
  319. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/otlp.py +0 -0
  320. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/protocols.py +0 -0
  321. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/telemetry/tracer.py +0 -0
  322. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/__init__.py +0 -0
  323. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/__init__.py +0 -0
  324. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/comfy_client.py +0 -0
  325. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/install.py +0 -0
  326. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/mcp_loader.py +0 -0
  327. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/plan.py +0 -0
  328. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/builtin/web.py +0 -0
  329. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/outcome.py +0 -0
  330. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/protocols.py +0 -0
  331. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/tools/scoped_registry.py +0 -0
  332. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/__init__.py +0 -0
  333. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/build_inputs.py +0 -0
  334. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui/single_flight.py +0 -0
  335. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  336. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  337. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  338. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  339. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  340. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  341. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  342. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  343. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  344. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  345. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  346. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  347. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  348. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  349. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  350. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  351. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  352. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  353. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  354. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  355. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  356. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  357. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  358. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  359. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  360. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  361. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  362. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  363. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  364. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  365. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  366. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  367. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  368. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  369. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  370. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  371. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  372. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  373. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  374. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  375. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  376. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  377. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  378. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  379. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  380. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  381. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  382. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  383. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  384. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  385. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  386. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  387. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  388. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  389. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  390. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  391. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  392. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  393. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  394. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/favicon.ico +0 -0
  395. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/logo.png +0 -0
  396. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/logoWhite.png +0 -0
  397. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/logo_uclone_short.png +0 -0
  398. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/uclone_logo_1024x1024.png +0 -0
  399. {uclone_x-0.2.2 → uclone_x-0.3.1}/src/uclone_x/ui_static/uclone_logo_circle.png +0 -0
@@ -100,5 +100,20 @@ 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/
114
+
115
+ # A clone's skill proposals and what approving, turning down or revoking them keeps
116
+ # (#1827). These are one installation's review state, not shipped skill packages.
117
+ ucx-agent-skills/.pending/
118
+ ucx-agent-skills/.versions/
119
+ ucx-agent-skills/.rejected/
@@ -13,6 +13,164 @@ 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.1] - 2026-09-28
17
+
18
+ ### Added
19
+
20
+ - Clones build a knowledge list as they talk. After each turn a clone keeps the lasting
21
+ facts it learned, each clone has one list across all of its conversations, and the
22
+ relevant facts are recalled at the start of a turn. A fact you told a clone to forget
23
+ stays forgotten when older conversation knowledge is imported.
24
+ - A local clone can be linked to uClone2 from Settings › Connections › uClone2 and
25
+ unlinked there; the clone's page says when it is linked. `ucx link run` keeps the links
26
+ online without the dashboard.
27
+ - Clones can propose new skills. A proposal waits in Settings until a person approves the
28
+ exact version shown, and a skill is offered only to clones that hold every tool it
29
+ needs.
30
+ - Each conversation keeps a complete, append-only session log, including full tool
31
+ results, and the developer trace checks every model request against it.
32
+ - Anthropic prompt caching: requests mark cache breakpoints, and cache reads and writes
33
+ are counted in token usage, for Gemini as well.
34
+ - Context windows for the current Claude models (Fable 5, Opus 5, Opus 4.5–4.8,
35
+ Sonnet 4.5/4.6).
36
+
37
+ ### Changed
38
+
39
+ - One-to-one conversations, from every interface, now run as one-seat rooms, so a clone
40
+ builds its context the same way in a chat and in a room. Conversations started from
41
+ another interface open read-only in the app, with one writer per room.
42
+ - Context is no longer compacted between the steps of a single turn, and a result the
43
+ clone has already seen is referred back to rather than repeated.
44
+ - The Artist uses its case skills in the turn and normalizes Danbooru tags.
45
+ - `pydantic` 2.12 or later is required, and the `http` extra now includes
46
+ `websockets`.
47
+
48
+ ### Fixed
49
+
50
+ - A persona edit applies completely or not at all; a failed edit fails the turn instead
51
+ of leaving the clone half changed, and edits reach clones already seated in a room.
52
+ - A name another participant shares is no longer filed as a fact about you, and names
53
+ are compared after Unicode normalization.
54
+ - Unreadable records are moved aside instead of overwritten; Settings and the CLI say
55
+ when that happened, and three set-aside copies are kept.
56
+ - When the setup alone fills the model's window, the clone says so plainly.
57
+ - Setting only `LLM_PROVIDER` picks that provider's default model.
58
+ - Korean text: particles match the name before them, and the trace panel is translated.
59
+ - The PyPI page shows the README screenshots and says that `pip install uclone-x`
60
+ alone installs the library without the `ucx` command.
61
+
62
+ ## [0.3.0] - 2026-09-27
63
+
64
+ ### Added
65
+
66
+ - Novel co-writing with the Writer. Stories are saved in the workspace as an outline,
67
+ a codex (characters, places, items, threads) and a manuscript, and outlive the
68
+ conversation that started them. New tools `story_library`, `story_outline`,
69
+ `story_codex`, `story_manuscript`, `story_context` and `story_audit` belong to the
70
+ Writer. Only one conversation writes a story at a time; opening it from another gives a
71
+ read-only copy until you take it over. Scenes can carry a `story_time`, so a flashback
72
+ sees the story as it was then. `muse_spark` draws idea cards for a genre.
73
+ - Codex changes the Writer proposes (a death, a lost item) wait for your decision, with
74
+ the quote that shows them. **View story** lists them under "Waiting for your decision"
75
+ with **Approve** and **Reject**; nothing changes until you choose.
76
+ - A **Files** button in the header lists the files clones saved, across every
77
+ conversation, filtered by kind and by conversation. Files can be archived and restored;
78
+ "Delete for good" is offered only on archived files. A story opens in a new
79
+ conversation with its story view.
80
+ - In a one-to-one chat, Clone can ask Writer, Artist, Scout, Pioneer or Guardian for help
81
+ through the new `a2a_call` tool, and Writer can ask Artist for illustrations. A clone
82
+ that is called cannot call a further one.
83
+ - Google Gemini can draw pictures. The `image_engine` setting takes `auto` (the default),
84
+ `local` or `gemini`, and `image_model` picks the Gemini model (default
85
+ `gemini-2.5-flash-image`). On `auto`, Gemini draws only when no local engine or remote
86
+ GPU is ready and your chat already uses Gemini with a saved key; on `local`, no picture
87
+ request leaves your machines. Settings › Images (previously Tools) offers the same
88
+ choice and shows what is drawing pictures now. `ucx media status` lists Gemini too.
89
+ - Clones can have their own pictures. Choose one from a clone's profile ("Upload
90
+ picture…", "Ask {name} to make one", "Reset to default"), or with **Use as avatar**
91
+ under a picture in the conversation, with Undo. Uploads must be PNG, JPEG or WebP and
92
+ 10 MB or smaller. Clones can set their own with the `set_avatar` tool. Pictures show in
93
+ the rail, including the Group Chats list, and in the conversation.
94
+ - Settings has a "Remote GPU Worker (SSH Auto-Tunnel)" section that connects to a
95
+ workstation over SSH and starts ComfyUI there. By default only image generation runs on
96
+ it; tick "Also run the LLM on this worker (Ollama)" to move the chat model too. The
97
+ previous LLM address comes back when you disconnect.
98
+ - Settings › Usage limits how many tokens paid models may use, across every conversation
99
+ and clone, over 10 minutes, 5 hours and a week, with presets or your own numbers. Local
100
+ models are not counted. A banner appears at 80% of a limit. At a limit, the next paid
101
+ call is refused before anything is sent, and the message says when paid models can be
102
+ used again. `UCLONE_USAGE_LIMIT_10_MINUTES`, `UCLONE_USAGE_LIMIT_5_HOURS` and
103
+ `UCLONE_USAGE_LIMIT_WEEK` set the same limits.
104
+ - A "Fast model" for quick background work, such as choosing who speaks next, separate
105
+ from the chat model. It follows the chat model unless you choose one, in Settings or with
106
+ `ucx llm use --fast <model>`.
107
+ - For OpenAI, Anthropic and Gemini, Settings lists the models the provider offers for your
108
+ key, marks one "(recommended)", and has "Refresh list"; it works before you save, and
109
+ says in plain words when the list cannot load. You can still type any model name.
110
+ - `ucx key set <provider>` and `ucx key remove <provider>`; `ucx key list` shows each
111
+ saved key masked and whether an environment variable overrides it.
112
+ - One Language setting (System default, English, Korean). Settings, the rail, the
113
+ conversation, the composer, tool steps and the dock are translated; the Files screen and
114
+ the story view are English only for now. Clones still answer in the language you write in.
115
+ - When a provider refuses a turn, you are told which provider and why (key rejected,
116
+ quota, outage, unreachable, model not available), with a suggested fix.
117
+ - If `ucx-agent-skills` is missing from the project UClone-X was started from, the CLI
118
+ and Settings › Skills say so.
119
+ - The package metadata links to the GitHub repository: homepage, source, issues and this
120
+ changelog.
121
+
122
+ ### Changed
123
+
124
+ - **API keys are saved per provider** in the settings file, so saving or switching one
125
+ provider never drops another's key, and each key is sent only to its own provider. An
126
+ old single saved key is read as its provider's key and rewritten in the new layout the
127
+ next time settings are saved; a key with no known provider is sent nowhere until you save
128
+ it again. `ucx key setup` now saves to the settings file and no longer writes `.env`.
129
+ UClone-X does not read `.env` itself: if you relied on one, load it into your shell or run
130
+ `ucx key set <provider>`.
131
+ - **Environment variables outrank Settings.** `LLM_PROVIDER`, `*_MODEL`, `*_BASE_URL` and
132
+ `*_API_KEY` set in your shell win over saved settings, and Settings, `ucx key` and
133
+ `ucx llm use` say which variable is in effect. `ucx start` no longer sets `LLM_PROVIDER`
134
+ or the model for you, so the ones chosen in Settings take effect; unset your own exports
135
+ to let Settings decide. With no model set anywhere, a request is refused with a plain
136
+ message instead of falling back to a built-in model.
137
+ - The per-session token limit is gone by default; the Usage limits above replace it.
138
+ - **Skills approved before this release must be approved again.** `ucx skill approve` now
139
+ records approvals in `~/.uclone/skills/approvals.json`, asks you to type yes in the
140
+ terminal, and refuses when there is no terminal, so a script or a clone cannot approve a
141
+ skill. A skill edited after approval is not loaded, and Settings › Skills says why each
142
+ skill is not in use.
143
+ - A persona's `allowed_tools` is the range of tools it may use, not a list that is always
144
+ loaded. With a local Ollama model and an embedder, each message gets a base set of tools
145
+ plus up to three matching ones, and a new `search_tools` tool lets the model add others.
146
+ Other providers get every allowed tool.
147
+ - The image prompt skills `media-prompt-danbooru`, `media-prompt-flux` and
148
+ `media-prompt-generic` are replaced by `media-character`, `media-architecture` and
149
+ `media-engineering`, which load the section for the active image model.
150
+ - Removed HTTP routes: `POST /api/turn`, `GET` and `DELETE /api/session/history`,
151
+ `POST /api/session/history/truncate` and `GET /api/agents`. Every conversation runs as a
152
+ room; use the rooms API, and `GET /api/personas` for the list of clones. Saved history is
153
+ kept.
154
+ - Approving codex changes and changing diagnostics consent work only from a browser window
155
+ UClone-X opened; any other window offers "Open a confirmed window".
156
+ - The rail no longer shows which clones are active.
157
+
158
+ ### Fixed
159
+
160
+ - Gemini models can use tools; before, nearly every built-in tool was refused.
161
+ - Ollama's model list uses the address typed in Settings, and says when nothing answers
162
+ there. `localhost`, `127.0.0.1` and `[::1]` on one port count as the same server.
163
+ - A dashboard started with its own storage folder uses the model and usage limits saved
164
+ there.
165
+ - Clicking a clone in the rail no longer jumps to a group chat it is in, and only one clone
166
+ is selected at a time.
167
+ - Typing in the message box no longer redraws the whole conversation on every keystroke.
168
+ - Gemini pictures keep the format Gemini returned (JPEG or PNG), and image links in
169
+ replies open.
170
+ - Shell commands a clone runs no longer wait for keyboard input, `file_edit` keeps a
171
+ file's line endings, a tool call with wrong arguments names each one, and a sandbox that
172
+ cannot start is reported in a plain sentence.
173
+
16
174
  ## [0.2.2] - 2026-09-24
17
175
 
18
176
  ### Added
@@ -1,7 +1,12 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: uclone-x
3
- Version: 0.2.2
4
- Summary: Next-Generation Event-Driven AI Agent Core & High-Performance Collaboration Framework
3
+ Version: 0.3.1
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,12 +18,13 @@ 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
19
25
  Requires-Dist: httpx>=0.27.0
20
26
  Requires-Dist: pydantic-settings>=2.2.0
21
- Requires-Dist: pydantic>=2.7.0
27
+ Requires-Dist: pydantic>=2.12
22
28
  Requires-Dist: pyyaml>=6.0.1
23
29
  Provides-Extra: all
24
30
  Requires-Dist: accelerate>=0.31.0; extra == 'all'
@@ -26,6 +32,7 @@ Requires-Dist: anthropic>=0.25.0; extra == 'all'
26
32
  Requires-Dist: diffusers>=0.31.0; extra == 'all'
27
33
  Requires-Dist: fastapi>=0.110.0; extra == 'all'
28
34
  Requires-Dist: google-genai>=0.1.0; extra == 'all'
35
+ Requires-Dist: jsonschema>=4.18.0; extra == 'all'
29
36
  Requires-Dist: linkml-runtime>=1.6.0; extra == 'all'
30
37
  Requires-Dist: networkx>=3.3; extra == 'all'
31
38
  Requires-Dist: openai>=1.25.0; extra == 'all'
@@ -49,6 +56,7 @@ Requires-Dist: tree-sitter>=0.21.0; extra == 'all'
49
56
  Requires-Dist: typer>=0.12.0; extra == 'all'
50
57
  Requires-Dist: uv>=0.1.30; extra == 'all'
51
58
  Requires-Dist: uvicorn>=0.29.0; extra == 'all'
59
+ Requires-Dist: websockets>=15.0; extra == 'all'
52
60
  Provides-Extra: cli
53
61
  Requires-Dist: rich>=13.7.0; extra == 'cli'
54
62
  Requires-Dist: typer>=0.12.0; extra == 'cli'
@@ -56,6 +64,7 @@ Provides-Extra: code-intel
56
64
  Requires-Dist: tree-sitter-language-pack>=1.20.0; extra == 'code-intel'
57
65
  Requires-Dist: tree-sitter>=0.21.0; extra == 'code-intel'
58
66
  Provides-Extra: dev
67
+ Requires-Dist: jsonschema>=4.18.0; extra == 'dev'
59
68
  Requires-Dist: playwright>=1.44.0; extra == 'dev'
60
69
  Requires-Dist: pyright>=1.1.360; extra == 'dev'
61
70
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
@@ -67,6 +76,7 @@ Requires-Dist: uv>=0.1.30; extra == 'dev'
67
76
  Provides-Extra: http
68
77
  Requires-Dist: fastapi>=0.110.0; extra == 'http'
69
78
  Requires-Dist: uvicorn>=0.29.0; extra == 'http'
79
+ Requires-Dist: websockets>=15.0; extra == 'http'
70
80
  Provides-Extra: llm
71
81
  Requires-Dist: anthropic>=0.25.0; extra == 'llm'
72
82
  Requires-Dist: google-genai>=0.1.0; extra == 'llm'
@@ -91,18 +101,45 @@ Description-Content-Type: text/markdown
91
101
 
92
102
  # ⚡ UClone-X
93
103
 
94
- **Event-driven AI agent core and multi-agent collaboration framework**
104
+ **AI clones that run on your own machine — chat with them one-to-one or in a group,
105
+ and let them remember, read your files, search and draw.**
95
106
 
96
107
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
97
108
  [![Python](https://img.shields.io/badge/Python-3.11+-blue.svg)](https://www.python.org/)
98
- [![LLM Agnostic](https://img.shields.io/badge/LLM-Gemini_|_Claude_|_OpenAI_|_Local-orange.svg)](docs/llm-agnostic-interface.md)
109
+ [![LLM Agnostic](https://img.shields.io/badge/LLM-Gemini_|_Claude_|_OpenAI_|_Local-orange.svg)](https://github.com/UClone-AI/uclone-x/blob/main/docs/llm-agnostic-interface.md)
99
110
 
100
111
  </div>
101
112
 
102
113
  ---
103
114
 
115
+ UClone-X is a local AI workspace. You install it, open the dashboard in your
116
+ browser, and talk to *clones* — agents with their own instructions, memory and
117
+ tools. A local model through Ollama works with no account and no API key; a
118
+ Gemini, Claude or OpenAI key works too.
119
+
120
+ Underneath is an event-driven agent runtime you can also use on its own: see
121
+ [For developers](#for-developers).
122
+
123
+ ## What it looks like
124
+
125
+ Ask a clone a question. Here the default **clone** answers with a structured
126
+ summary on a local model (`ollama:qwen3:8b`):
127
+
128
+ ![A clone answering "Find latest AI technology in september" with a structured list of AI trends](https://raw.githubusercontent.com/UClone-AI/uclone-x/main/docs/assets/screenshots/research-conversation.webp)
129
+
130
+ Or ask the **artist** clone for a picture. The image appears in the conversation,
131
+ with links to open it in the browser or in Docs:
132
+
133
+ ![The artist clone showing a generated image for "beautiful girl with beautiful background"](https://raw.githubusercontent.com/UClone-AI/uclone-x/main/docs/assets/screenshots/image-generation.webp)
134
+
135
+ ---
136
+
104
137
  ## Install
105
138
 
139
+ > On PyPI? The `pip install uclone-x` line PyPI prints at the top of the page
140
+ > installs the library only, without the `ucx` command. Use one of the installs
141
+ > below; with pip, that is `pip install "uclone-x[cli,http]"`.
142
+
106
143
  On macOS or Linux, paste this into a terminal:
107
144
 
108
145
  ```bash
@@ -166,19 +203,128 @@ pip install "uclone-x[all]"
166
203
 
167
204
  Every extra resolves on Python 3.11, 3.12 and 3.13.
168
205
 
169
- ### From a terminal
206
+ ### Models
207
+
208
+ `ucx install` downloads the local language model and the image checkpoint and
209
+ checks that each one actually works; it reports a partial setup as incomplete
210
+ rather than as success. You can also do this later from the dashboard.
211
+
212
+ As a rough guide to what fits, from the installer's own advice:
213
+
214
+ | Memory | Local model | Image generation |
215
+ | :--- | :--- | :--- |
216
+ | under 8 GB | use a cloud model (API key) | no |
217
+ | 8–16 GB | `qwen3:1.7b`, or a cloud model | no |
218
+ | 16–24 GB | `qwen3:8b` | 512 px |
219
+ | 24 GB and up | `qwen3:8b` | 768 px |
220
+
221
+ ## Connecting a model
222
+
223
+ Pick **one** of these:
224
+
225
+ * **Local, no key.** Install [Ollama](https://ollama.com). `ucx start` finds it
226
+ and offers a model that fits; models can also be added and removed from
227
+ Settings, or with `ucx llm pull` and `ucx llm rm`.
228
+ * **In the dashboard.** Open Settings, choose Gemini, Anthropic, OpenAI, vLLM or
229
+ Ollama, and enter the key or server address there. It is remembered for the
230
+ next start, in `~/.uclone/sessions/settings.json` as plain text — treat that
231
+ file like the key itself.
232
+ * **From the environment.** `ucx` reads provider settings from environment
233
+ variables, which take precedence over what Settings saved:
234
+
235
+ ```bash
236
+ export ANTHROPIC_API_KEY=... # or GEMINI_API_KEY, OPENAI_API_KEY
237
+ ucx start
238
+ ```
239
+
240
+ `ucx` does **not** read a `.env` file by itself. The repository's
241
+ `.env.example` lists every variable it understands; if you keep yours in a
242
+ `.env`, load it into the shell first (`set -a; . ./.env; set +a`).
243
+
244
+ `ucx llm status` shows which providers it can reach.
245
+
246
+ ## What you can do
247
+
248
+ * **Clones.** Six ship built in — clone (the default), writer, artist,
249
+ guardian, pioneer and scout. Create your own, or edit one, from Settings; the
250
+ connected model can draft its instructions for you. Each clone is a YAML file
251
+ in your workspace.
252
+ * **Conversations.** One-to-one chats and group chats with several clones,
253
+ listed most recent first, with pinning, rename and delete. Replies stream as
254
+ they are written, including each tool call; messages render Markdown and math.
255
+ Group conversations can also be driven from the terminal with `ucx room`.
256
+ * **Memory.** Every clone can record, look up and retract facts, and remembers
257
+ them across conversations. The dock's Remembers tab lists what each clone
258
+ saved.
259
+ * **Files and images.** Clones read files in your workspace and in folders you
260
+ mark read-only, write only inside the workspace, and generate images in-process
261
+ (or through ComfyUI when one is running). What each turn produced appears in
262
+ the dock beside the conversation.
263
+ * **Tools from elsewhere.** Connect MCP servers from Settings — a remote one by
264
+ URL, a local one by command, or by pasting a vendor's `mcpServers` snippet.
265
+ * **The terminal.** `ucx run` is the same agent as an interactive REPL, with
266
+ streaming, tool calls and slash commands; `ucx run --prompt "…"` answers once.
267
+ * **Your editor.** `ucx acp serve` lets an editor that speaks the Agent Client
268
+ Protocol talk to a clone.
269
+
270
+ `ucx --help` lists every command.
271
+
272
+ ## Where your data lives
273
+
274
+ UClone-X has no server of its own and no account. Conversations and dashboard
275
+ settings are kept under `~/.uclone/sessions/` (`UCLONE_SESSION_DIR` moves them),
276
+ each clone's memory under `~/.uclone/agents/` (`UCLONE_AGENTS_DIR`), and clone
277
+ definitions are YAML files in the workspace folder.
278
+
279
+ What leaves the machine is what you connect it to: your messages go to the model
280
+ provider you chose, a web search goes to the search service, and an MCP server
281
+ you add receives what its tools are called with. With a local model and no
282
+ remote tools, nothing leaves at all.
283
+
284
+ ## Something went wrong?
170
285
 
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:
286
+ `ucx` keeps a record of what failed, on your machine, and only if you allow it:
174
287
 
175
288
  ```bash
176
- OLLAMA_FAST_BASE_URL=http://localhost:11434/v1 OLLAMA_FAST_MODEL=qwen3:8b ucx run
289
+ ucx report --enable # start recording failures locally
290
+ ucx report # show what has been recorded
291
+ ucx report --open # open a pre-filled bug report in your browser
177
292
  ```
178
293
 
179
- `ucx llm status` reports which models are reachable.
294
+ **Nothing is uploaded on its own.** There is no telemetry server and no account
295
+ to sign into. `ucx report` prints the exact text that would be sent; `--open`
296
+ fills in a GitHub issue form that you still have to submit yourself. If you have
297
+ the GitHub CLI, `ucx report --submit` files it through your own `gh` login.
298
+
299
+ What gets recorded: the error type, the code path it failed on, your UClone-X,
300
+ Python and OS versions, and the error message. Your prompts and the contents of
301
+ your files are never included, and paths are reduced — code paths to the file
302
+ name, home directories to `~`.
180
303
 
181
- ## What UClone-X is
304
+ Masking is pattern-based, like every credential scrubber: it recognises the
305
+ shapes that occur in practice — `sk-…`, `ghp_…`, home directories on Linux,
306
+ macOS and Windows — and cannot promise to catch a token shape or a path layout
307
+ nobody has seen. That is why `ucx report` shows you the text before anything is
308
+ sent, and why the text is the last word on what leaves your machine.
309
+
310
+ Turn it off with `ucx report --disable` and delete what was recorded with
311
+ `ucx report --clear`.
312
+
313
+ Common first-run problems:
314
+
315
+ * **"No active LLM provider connected."** No model is reachable. Start Ollama
316
+ (`ollama serve`), or set a key in Settings or the environment — see
317
+ [Connecting a model](#connecting-a-model). `ucx llm status` says which
318
+ providers answered.
319
+ * **A key in `.env` is ignored.** `ucx` reads the environment, not `.env`; load
320
+ the file into your shell first.
321
+ * **`ucx: command not found` after the installer.** It is not on your PATH yet;
322
+ add the `export PATH=…` line the installer printed to `~/.zshrc` (or
323
+ `~/.bashrc`), or run it as `~/.local/bin/ucx` until then — see [Install](#install).
324
+
325
+ ## For developers
326
+
327
+ ### The runtime
182
328
 
183
329
  An agent runtime built around a non-blocking reactive event loop rather than a
184
330
  blocking request/response cycle. Agents yield when idle and wake on tool
@@ -199,7 +345,7 @@ external broker.
199
345
  reasons against instead of inventing structure per prompt.
200
346
  * **OpenTelemetry native** — traces, metrics and OTLP export built in.
201
347
 
202
- ## Implementation status
348
+ ### Implementation status
203
349
 
204
350
  UClone-X is pre-1.0 and under active development. Read this section before
205
351
  depending on it.
@@ -209,60 +355,38 @@ depending on it.
209
355
  | Event bus, agent state machine, sessions | Implemented |
210
356
  | Tool runtime, MCP client, built-in tools | Implemented |
211
357
  | LLM connectors (Gemini, Claude, OpenAI, Ollama, vLLM) | Implemented |
358
+ | Dashboard: conversations, clones, memory, settings | Implemented |
359
+ | Local image generation | Implemented |
212
360
  | Sandbox isolation modes | Implemented (host and workspace); container and WASM partial |
213
361
  | Ontology engine, skills, code intelligence | Implemented, evolving |
214
- | Developer dashboard | Implemented |
215
362
  | A2A protocol | **Specified, not implemented.** No conformance is claimed |
216
363
 
217
- ## Something went wrong?
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`.
364
+ ### Documentation
245
365
 
246
- ## Documentation
366
+ The documents below are the design and specification of the runtime; they are
367
+ written for contributors rather than as a user manual.
247
368
 
248
- * [Architecture overview](docs/architecture-overview.md)
249
- * [Event-driven agent core](docs/event-driven-agent-core.md)
250
- * [Core principles P0–P9](docs/principles/core-principles.md) — the normative
369
+ * [Documentation index](https://github.com/UClone-AI/uclone-x/blob/main/docs/README.md)
370
+ * [Module structure](https://github.com/UClone-AI/uclone-x/blob/main/docs/module-structure.md) — the packages as built, their layers
371
+ and dependency edges
372
+ * [Architecture overview](https://github.com/UClone-AI/uclone-x/blob/main/docs/architecture-overview.md)
373
+ * [Event-driven agent core](https://github.com/UClone-AI/uclone-x/blob/main/docs/event-driven-agent-core.md)
374
+ * [Core principles P0–P9](https://github.com/UClone-AI/uclone-x/blob/main/docs/principles/core-principles.md) — the normative
251
375
  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
- ## Development
376
+ * [Product requirements](https://github.com/UClone-AI/uclone-x/blob/main/docs/PRD.md)
377
+ * [CLI specification](https://github.com/UClone-AI/uclone-x/blob/main/docs/cli-specification.md)
378
+ * [LLM-agnostic interface](https://github.com/UClone-AI/uclone-x/blob/main/docs/llm-agnostic-interface.md)
379
+ * [Dynamic persona and sub-agent interface](https://github.com/UClone-AI/uclone-x/blob/main/docs/dynamic-persona-interface.md)
380
+ * [Local collaboration engine](https://github.com/UClone-AI/uclone-x/blob/main/docs/local-collaboration-engine.md)
381
+ * [Sandbox execution](https://github.com/UClone-AI/uclone-x/blob/main/docs/sandbox-execution-architecture.md)
382
+ * [Ontology architecture](https://github.com/UClone-AI/uclone-x/blob/main/docs/agent-ontology-architecture.md)
383
+ * [Skill system](https://github.com/UClone-AI/uclone-x/blob/main/docs/skill-system-architecture.md)
384
+ * [Code intelligence (AST, LSP, SCIP)](https://github.com/UClone-AI/uclone-x/blob/main/docs/code-intelligence-lsp-scip.md)
385
+ * [Telemetry](https://github.com/UClone-AI/uclone-x/blob/main/docs/telemetry-opentelemetry.md)
386
+ * [A2A protocol specification](https://github.com/UClone-AI/uclone-x/blob/main/docs/a2a-protocol-spec.md)
387
+ * [Security threat model](https://github.com/UClone-AI/uclone-x/blob/main/docs/security-threat-model.md)
388
+
389
+ ### Working on UClone-X
266
390
 
267
391
  An installed build is for *using* the agent. To change it, work from a checkout:
268
392
  the development commands — `setup`, `test`, `dev` — exist only there, because
@@ -281,19 +405,19 @@ npm ci --prefix frontend # the gate runs the frontend's vitest suite
281
405
  strict mode, the test suite at or above 70% branch coverage, and a passing
282
406
  frontend vitest suite. A change that does not pass it is not ready.
283
407
 
284
- See [CONTRIBUTING.md](CONTRIBUTING.md) for how patches reach this repository,
285
- and [docs/local-development-guide.md](docs/local-development-guide.md) for the
408
+ See [CONTRIBUTING.md](https://github.com/UClone-AI/uclone-x/blob/main/CONTRIBUTING.md) for how patches reach this repository,
409
+ and the [local development guide](https://github.com/UClone-AI/uclone-x/blob/main/docs/local-development-guide.md) for the
286
410
  longer setup walkthrough.
287
411
 
288
412
  ## About this repository
289
413
 
290
- This repository is the UClone-X runtime and its documentation. It is published
291
- from a private development repository, in periodic snapshots rather than as a
292
- mirror of that repository's history. The evaluation suites and multi-agent
293
- build tooling used to develop it are not part of the published subset; the
294
- runtime detects their absence and degrades cleanly, so `ucx eval` reports that
295
- no evaluation backend is installed rather than failing to start.
414
+ This repository is the UClone-X runtime, its dashboard and its documentation. It
415
+ is published from a private development repository, in periodic snapshots rather
416
+ than as a mirror of that repository's history. The evaluation suites and
417
+ multi-agent build tooling used to develop it are not part of the published
418
+ subset; the runtime detects their absence and degrades cleanly, so `ucx eval`
419
+ reports that no evaluation backend is installed rather than failing to start.
296
420
 
297
421
  ## License
298
422
 
299
- Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
423
+ 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).