meridian-cli 0.2.2__tar.gz → 0.2.3__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 (504) hide show
  1. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/PKG-INFO +3 -3
  2. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/README.md +1 -1
  3. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/pyproject.toml +1 -2
  4. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/__init__.py +1 -1
  5. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/spawn.py +17 -1
  6. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/catalog.py +5 -0
  7. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/work_cmd.py +48 -1
  8. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/.context/CONTEXT.md +46 -3
  9. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/commands.py +17 -0
  10. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/runtime.py +3 -0
  11. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/api.py +80 -1
  12. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/models.py +3 -0
  13. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/prepare.py +15 -10
  14. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/work_lifecycle.py +54 -72
  15. meridian_cli-0.2.3/src/meridian/lib/ops/work_worktree.py +231 -0
  16. meridian_cli-0.2.3/src/meridian/lib/ops/worktree_ensure.py +768 -0
  17. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/worktree_lifecycle.py +55 -27
  18. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/worktree_ops.py +13 -2
  19. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/.context/CONTEXT.md +22 -0
  20. meridian_cli-0.2.3/src/meridian/lib/state/temp_worktree_store.py +107 -0
  21. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/work_store.py +84 -5
  22. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/.gitignore +0 -0
  23. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/LICENSE +0 -0
  24. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/ag_ui/__init__.pyi +0 -0
  25. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/ag_ui/core.pyi +0 -0
  26. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/AGENTS.md +0 -0
  27. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/__main__.py +0 -0
  28. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/.context/CONTEXT.md +0 -0
  29. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/AGENTS.md +0 -0
  30. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/__init__.py +0 -0
  31. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/_cmd_utils.py +0 -0
  32. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/agent_help.py +0 -0
  33. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/app_tree.py +0 -0
  34. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/argv_normalization.py +0 -0
  35. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/bootstrap.py +0 -0
  36. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/bootstrap_cmd.py +0 -0
  37. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/chat_cmd.py +0 -0
  38. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/config_cmd.py +0 -0
  39. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/doctor_cmd.py +0 -0
  40. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/entrypoint.py +0 -0
  41. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/ext_cmd.py +0 -0
  42. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/ext_registration.py +0 -0
  43. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/hooks_authority.py +0 -0
  44. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/hooks_commands.py +0 -0
  45. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/kg_cmd.py +0 -0
  46. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/main.py +0 -0
  47. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/mars_passthrough.py +0 -0
  48. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/mermaid_cmd.py +0 -0
  49. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/migrate_cmd.py +0 -0
  50. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/misc_commands.py +0 -0
  51. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/models_cmd.py +0 -0
  52. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/output.py +0 -0
  53. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/primary_launch.py +0 -0
  54. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/qi_cmd.py +0 -0
  55. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/report_cmd.py +0 -0
  56. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/session_cmd.py +0 -0
  57. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/spawn_inject.py +0 -0
  58. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/__init__.py +0 -0
  59. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/classify.py +0 -0
  60. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  61. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/help.py +0 -0
  62. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  63. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/policy.py +0 -0
  64. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/streaming_serve.py +0 -0
  65. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/sync_cmd.py +0 -0
  66. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/telemetry_cmd.py +0 -0
  67. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/utils.py +0 -0
  68. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/workspace_cmd.py +0 -0
  69. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/dev/AGENTS.md +0 -0
  70. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/dev/__init__.py +0 -0
  71. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/dev/pytests.py +0 -0
  72. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/__init__.py +0 -0
  73. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  74. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  75. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/__init__.py +0 -0
  76. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/config.py +0 -0
  77. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/project_state.py +0 -0
  78. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  79. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/services.py +0 -0
  80. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  81. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/AGENTS.md +0 -0
  82. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/__init__.py +0 -0
  83. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/agent.py +0 -0
  84. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/bootstrap.py +0 -0
  85. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/catalog_session.py +0 -0
  86. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/model_aliases.py +0 -0
  87. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/models.py +0 -0
  88. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/skill.py +0 -0
  89. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  90. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/AGENTS.md +0 -0
  91. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/__init__.py +0 -0
  92. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  93. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/backend_handle.py +0 -0
  94. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/checkpoint.py +0 -0
  95. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/command_handler.py +0 -0
  96. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/command_invariants.py +0 -0
  97. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/commands.py +0 -0
  98. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  99. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  100. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  101. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  102. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  103. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  104. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  105. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  106. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  107. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_index.py +0 -0
  108. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_log.py +0 -0
  109. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_observer.py +0 -0
  110. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_pipeline.py +0 -0
  111. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/frontend.py +0 -0
  112. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  113. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  114. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  115. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/base.py +0 -0
  116. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/claude.py +0 -0
  117. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/codex.py +0 -0
  118. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/common.py +0 -0
  119. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  120. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/registry.py +0 -0
  121. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  122. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/policy.py +0 -0
  123. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/protocol.py +0 -0
  124. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/recovery.py +0 -0
  125. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/replay.py +0 -0
  126. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/runtime.py +0 -0
  127. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/server.py +0 -0
  128. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/session_service.py +0 -0
  129. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/ws_fanout.py +0 -0
  130. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
  131. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/AGENTS.md +0 -0
  132. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/__init__.py +0 -0
  133. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/catalog.py +0 -0
  134. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/context_config.py +0 -0
  135. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/preserving_edit.py +0 -0
  136. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/project_config_state.py +0 -0
  137. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/project_paths.py +0 -0
  138. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/project_root.py +0 -0
  139. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/schema.py +0 -0
  140. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/settings.py +0 -0
  141. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/workspace.py +0 -0
  142. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  143. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/AGENTS.md +0 -0
  144. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/__init__.py +0 -0
  145. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/resolver.py +0 -0
  146. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
  147. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/AGENTS.md +0 -0
  148. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/__init__.py +0 -0
  149. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/child_env.py +0 -0
  150. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/clock.py +0 -0
  151. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/codec.py +0 -0
  152. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/context.py +0 -0
  153. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/conversation.py +0 -0
  154. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/depth.py +0 -0
  155. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/domain.py +0 -0
  156. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/execution_policy.py +0 -0
  157. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/formatting.py +0 -0
  158. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/lifecycle.py +0 -0
  159. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/logging.py +0 -0
  160. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/overrides.py +0 -0
  161. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/process_cleanup.py +0 -0
  162. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/resolved_context.py +0 -0
  163. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/sink.py +0 -0
  164. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
  165. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/spawn_service.py +0 -0
  166. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/spawn_start.py +0 -0
  167. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/telemetry.py +0 -0
  168. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/types.py +0 -0
  169. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/util.py +0 -0
  170. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/diagnostics.py +0 -0
  171. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  172. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/AGENTS.md +0 -0
  173. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/__init__.py +0 -0
  174. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  175. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  176. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  177. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  178. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  179. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  180. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  181. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/context.py +0 -0
  182. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/descriptors.py +0 -0
  183. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/dispatcher.py +0 -0
  184. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/first_party.py +0 -0
  185. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/observability.py +0 -0
  186. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/registry.py +0 -0
  187. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/types.py +0 -0
  188. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
  189. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/AGENTS.md +0 -0
  190. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/__init__.py +0 -0
  191. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/adapter.py +0 -0
  192. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/bundle.py +0 -0
  193. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/claude.py +0 -0
  194. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/claude_preflight.py +0 -0
  195. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/claude_utils.py +0 -0
  196. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/codex.py +0 -0
  197. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/codex_rollout.py +0 -0
  198. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/common.py +0 -0
  199. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/.context/CONTEXT.md +0 -0
  200. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/AGENTS.md +0 -0
  201. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/__init__.py +0 -0
  202. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/base.py +0 -0
  203. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
  204. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/codex_ws.py +0 -0
  205. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  206. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/errors.py +0 -0
  207. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
  208. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/pi_lifecycle_file.py +0 -0
  209. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
  210. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/control_action.py +0 -0
  211. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/cost.py +0 -0
  212. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/cursor.py +0 -0
  213. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/errors.py +0 -0
  214. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractor.py +0 -0
  215. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  216. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  217. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  218. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/base.py +0 -0
  219. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/claude.py +0 -0
  220. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/codex.py +0 -0
  221. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  222. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  223. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/pi.py +0 -0
  224. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/launch_spec.py +0 -0
  225. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/launch_types.py +0 -0
  226. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/opencode.py +0 -0
  227. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/opencode_storage.py +0 -0
  228. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  229. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  230. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  231. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  232. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/base.py +0 -0
  233. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  234. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/codex.py +0 -0
  235. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  236. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  237. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/permission_broker.py +0 -0
  238. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/pi.py +0 -0
  239. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
  240. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  241. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
  242. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  243. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/__init__.py +0 -0
  244. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/_guards.py +0 -0
  245. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  246. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  247. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_claude.py +0 -0
  248. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  249. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
  250. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
  251. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
  252. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
  253. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
  254. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_pi_native_tui.py +0 -0
  255. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_pi_rpc.py +0 -0
  256. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  257. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/registry.py +0 -0
  258. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/semantics.py +0 -0
  259. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/session_detection.py +0 -0
  260. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/transcript.py +0 -0
  261. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  262. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/AGENTS.md +0 -0
  263. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/__init__.py +0 -0
  264. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  265. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  266. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  267. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  268. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/base.py +0 -0
  269. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  270. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  271. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/config.py +0 -0
  272. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/dispatch.py +0 -0
  273. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/interval.py +0 -0
  274. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/registry.py +0 -0
  275. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/runner.py +0 -0
  276. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/types.py +0 -0
  277. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ignores.py +0 -0
  278. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  279. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/AGENTS.md +0 -0
  280. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/__init__.py +0 -0
  281. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/graph.py +0 -0
  282. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/report.py +0 -0
  283. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/serializer.py +0 -0
  284. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/types.py +0 -0
  285. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
  286. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/AGENTS.md +0 -0
  287. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/__init__.py +0 -0
  288. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/artifact_io.py +0 -0
  289. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  290. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/claude_session_access.py +0 -0
  291. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/command.py +0 -0
  292. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/compiler.py +0 -0
  293. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/composition.py +0 -0
  294. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/constants.py +0 -0
  295. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/context.py +0 -0
  296. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/cwd.py +0 -0
  297. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/env.py +0 -0
  298. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/errors.py +0 -0
  299. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/extract.py +0 -0
  300. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/fork.py +0 -0
  301. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/launch_types.py +0 -0
  302. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/materialize.py +0 -0
  303. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/permissions.py +0 -0
  304. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/plan.py +0 -0
  305. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/policies.py +0 -0
  306. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  307. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  308. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/__init__.py +0 -0
  309. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/ports.py +0 -0
  310. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/primary_attach.py +0 -0
  311. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  312. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/runner.py +0 -0
  313. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/session.py +0 -0
  314. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
  315. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  316. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/prompt.py +0 -0
  317. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/reference.py +0 -0
  318. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/report.py +0 -0
  319. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/request.py +0 -0
  320. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/resolve.py +0 -0
  321. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/run_inputs.py +0 -0
  322. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/runner_helpers.py +0 -0
  323. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/session_scope.py +0 -0
  324. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/signals.py +0 -0
  325. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  326. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  327. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  328. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  329. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  330. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming_runner.py +0 -0
  331. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/text_utils.py +0 -0
  332. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/types.py +0 -0
  333. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/workspace.py +0 -0
  334. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/workspace_projection.py +0 -0
  335. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/written_files.py +0 -0
  336. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  337. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/AGENTS.md +0 -0
  338. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/__init__.py +0 -0
  339. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/extract.py +0 -0
  340. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/types.py +0 -0
  341. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  342. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  343. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/__init__.py +0 -0
  344. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/report.py +0 -0
  345. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/scanner.py +0 -0
  346. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/serializer.py +0 -0
  347. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  348. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  349. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  350. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  351. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  352. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  353. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  354. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  355. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  356. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/types.py +0 -0
  357. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/validator.py +0 -0
  358. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  359. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/AGENTS.md +0 -0
  360. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/__init__.py +0 -0
  361. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/debug_tracer.py +0 -0
  362. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/trace_helpers.py +0 -0
  363. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/AGENTS.md +0 -0
  364. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/__init__.py +0 -0
  365. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/catalog.py +0 -0
  366. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/config.py +0 -0
  367. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/config_surface.py +0 -0
  368. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/context.py +0 -0
  369. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/diag.py +0 -0
  370. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/hooks.py +0 -0
  371. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/init_ops.py +0 -0
  372. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/mars.py +0 -0
  373. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/migration.py +0 -0
  374. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/pruning.py +0 -0
  375. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/qi.py +0 -0
  376. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/reference.py +0 -0
  377. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/reference_recovery.py +0 -0
  378. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/report.py +0 -0
  379. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_export.py +0 -0
  380. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_log.py +0 -0
  381. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_read.py +0 -0
  382. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_render.py +0 -0
  383. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_repair.py +0 -0
  384. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_search.py +0 -0
  385. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_target.py +0 -0
  386. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
  387. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  388. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/__init__.py +0 -0
  389. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
  390. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute.py +0 -0
  391. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  392. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
  393. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_runner.py +0 -0
  394. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
  395. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  396. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/query.py +0 -0
  397. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  398. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/work_attachment.py +0 -0
  399. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/work_dashboard.py +0 -0
  400. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/workspace.py +0 -0
  401. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/worktree_format.py +0 -0
  402. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  403. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/AGENTS.md +0 -0
  404. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/__init__.py +0 -0
  405. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/locking.py +0 -0
  406. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  407. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  408. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  409. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/base.py +0 -0
  410. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
  411. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/posix.py +0 -0
  412. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
  413. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/terminate.py +0 -0
  414. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/unix_modules.py +0 -0
  415. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/windows_job.py +0 -0
  416. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  417. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/AGENTS.md +0 -0
  418. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/__init__.py +0 -0
  419. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/budget.py +0 -0
  420. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/guardrails.py +0 -0
  421. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/permissions.py +0 -0
  422. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/redaction.py +0 -0
  423. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/service_context.py +0 -0
  424. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  425. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/AGENTS.md +0 -0
  426. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/__init__.py +0 -0
  427. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/archive.py +0 -0
  428. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/AGENTS.md +0 -0
  429. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/__init__.py +0 -0
  430. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/artifact_store.py +0 -0
  431. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/atomic.py +0 -0
  432. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/event_store.py +0 -0
  433. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/history.py +0 -0
  434. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/launch_boundary.py +0 -0
  435. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/liveness.py +0 -0
  436. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/managed_primary.py +0 -0
  437. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/paths.py +0 -0
  438. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/primary_meta.py +0 -0
  439. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/process_scope_projection.py +0 -0
  440. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/reaper.py +0 -0
  441. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/session_store.py +0 -0
  442. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  443. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  444. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/__init__.py +0 -0
  445. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/model.py +0 -0
  446. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/repository.py +0 -0
  447. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  448. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/transitions.py +0 -0
  449. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn_store.py +0 -0
  450. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/user_paths.py +0 -0
  451. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/wordgen.py +0 -0
  452. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/wordlists.py +0 -0
  453. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/.context/CONTEXT.md +0 -0
  454. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/AGENTS.md +0 -0
  455. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/__init__.py +0 -0
  456. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/control_socket.py +0 -0
  457. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/drain_policy.py +0 -0
  458. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/event_observers.py +0 -0
  459. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/heartbeat.py +0 -0
  460. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/inject_lock.py +0 -0
  461. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/signal_canceller.py +0 -0
  462. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/spawn_manager.py +0 -0
  463. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/types.py +0 -0
  464. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/__init__.py +0 -0
  465. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  466. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/correlation.py +0 -0
  467. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/events.py +0 -0
  468. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/init.py +0 -0
  469. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  470. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/maintenance.py +0 -0
  471. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/observer.py +0 -0
  472. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/observers.py +0 -0
  473. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/query.py +0 -0
  474. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/reader.py +0 -0
  475. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/retention.py +0 -0
  476. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/router.py +0 -0
  477. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/sinks.py +0 -0
  478. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/status.py +0 -0
  479. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/tools.py +0 -0
  480. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/utils/__init__.py +0 -0
  481. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/utils/time.py +0 -0
  482. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
  483. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/README.md +0 -0
  484. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/__init__.py +0 -0
  485. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/managed-bash/.context/CONTEXT.md +0 -0
  486. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  487. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/meridian-lifecycle/.context/CONTEXT.md +0 -0
  488. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/meridian-lifecycle/src/index.ts +0 -0
  489. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/shared/lifecycle_sidecar.ts +0 -0
  490. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/types.ts +0 -0
  491. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/package.json +0 -0
  492. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  493. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
  494. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/AGENTS.md +0 -0
  495. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/__init__.py +0 -0
  496. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/config.py +0 -0
  497. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/fs.py +0 -0
  498. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/git.py +0 -0
  499. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/state.py +0 -0
  500. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/types.py +0 -0
  501. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/py.typed +0 -0
  502. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/server/AGENTS.md +0 -0
  503. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/server/__init__.py +0 -0
  504. {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/server/main.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meridian-cli
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Orchestrate CLI + MCP server for multi-model agent workflows
5
5
  Project-URL: Homepage, https://github.com/haowjy/meridian-cli
6
6
  Project-URL: Repository, https://github.com/haowjy/meridian-cli
@@ -24,7 +24,7 @@ Requires-Dist: coolname>=4.0.0
24
24
  Requires-Dist: cyclopts>=3.0
25
25
  Requires-Dist: fastapi>=0.115
26
26
  Requires-Dist: markdown-it-py>=4.0
27
- Requires-Dist: mars-agents==0.7.0
27
+ Requires-Dist: mars-agents==0.7.1
28
28
  Requires-Dist: mcp>=1.0
29
29
  Requires-Dist: pathspec>=1.1.0
30
30
  Requires-Dist: psutil>=7.2.2
@@ -192,7 +192,7 @@ graph TB
192
192
  uv sync --extra dev
193
193
  uv run ruff check .
194
194
  uv run pytest-llm
195
- uv run pyright
195
+ uv run --extra dev python -m pyright
196
196
  ```
197
197
 
198
198
  See [DEVELOPMENT.md](DEVELOPMENT.md) for full dev setup.
@@ -144,7 +144,7 @@ graph TB
144
144
  uv sync --extra dev
145
145
  uv run ruff check .
146
146
  uv run pytest-llm
147
- uv run pyright
147
+ uv run --extra dev python -m pyright
148
148
  ```
149
149
 
150
150
  See [DEVELOPMENT.md](DEVELOPMENT.md) for full dev setup.
@@ -24,7 +24,7 @@ dependencies = [
24
24
  "cyclopts>=3.0",
25
25
  "fastapi>=0.115",
26
26
  "markdown-it-py>=4.0",
27
- "mars-agents==0.7.0",
27
+ "mars-agents==0.7.1",
28
28
  "mcp>=1.0",
29
29
  "pathspec>=1.1.0",
30
30
  "psutil>=7.2.2",
@@ -44,7 +44,6 @@ Issues = "https://github.com/haowjy/meridian-cli/issues"
44
44
 
45
45
  [project.scripts]
46
46
  meridian = "meridian.cli.entrypoint:main"
47
- pyright = "pyright.cli:entrypoint"
48
47
  pytests = "meridian.dev.pytests:main"
49
48
  pytest-llm = "meridian.dev.pytests:main"
50
49
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.2.2"
5
+ __version__ = "0.2.3"
@@ -275,7 +275,10 @@ def _spawn_create(
275
275
  bool | None,
276
276
  Parameter(
277
277
  name="--worktree",
278
- help="Require and use the selected work item's configured worktree path as task cwd.",
278
+ help=(
279
+ "Ensure and use the selected work item's Meridian-managed canonical "
280
+ "worktree as task cwd."
281
+ ),
279
282
  ),
280
283
  ] = None,
281
284
  no_worktree: Annotated[
@@ -285,6 +288,16 @@ def _spawn_create(
285
288
  help="Force authority root as task cwd, ignoring any configured worktree path.",
286
289
  ),
287
290
  ] = False,
291
+ repo: Annotated[
292
+ str | None,
293
+ Parameter(
294
+ name="--repo",
295
+ help=(
296
+ "Target implementation repository path or workspace alias for first "
297
+ "managed worktree ensure."
298
+ ),
299
+ ),
300
+ ] = None,
288
301
  dry_run: Annotated[
289
302
  bool,
290
303
  Parameter(name="--dry-run", help="Preview without executing harness."),
@@ -478,6 +491,7 @@ def _spawn_create(
478
491
  desc=desc,
479
492
  work=work,
480
493
  worktree=worktree_intent,
494
+ repo=repo,
481
495
  **shared_launch_kwargs,
482
496
  ),
483
497
  sink=_current_output_sink(),
@@ -497,6 +511,7 @@ def _spawn_create(
497
511
  desc=desc,
498
512
  work=work,
499
513
  worktree=worktree_intent,
514
+ repo=repo,
500
515
  **shared_launch_kwargs,
501
516
  ),
502
517
  sink=_current_output_sink(),
@@ -516,6 +531,7 @@ def _spawn_create(
516
531
  goal=resolved_goal,
517
532
  work=work,
518
533
  worktree=worktree_intent,
534
+ repo=repo,
519
535
  **shared_launch_kwargs,
520
536
  ),
521
537
  sink=_current_output_sink(),
@@ -383,6 +383,11 @@ _COMMAND_DESCRIPTORS: tuple[CommandDescriptor, ...] = (
383
383
  _write_runtime(("work", "delete"), "Delete work item.", extension_ref="meridian.work.delete"),
384
384
  _write_runtime(("work", "rename"), "Rename work item.", extension_ref="meridian.work.rename"),
385
385
  _write_runtime(("work", "clear"), "Clear current work.", extension_ref="meridian.work.clear"),
386
+ _write_runtime(
387
+ ("work", "worktree"),
388
+ "Show or ensure canonical managed worktree state.",
389
+ extension_ref="meridian.work.worktree",
390
+ ),
386
391
  _write_runtime(
387
392
  ("work", "set-worktree"),
388
393
  "Assign an existing worktree path to a work item.",
@@ -37,6 +37,7 @@ from meridian.lib.ops.work_lifecycle import (
37
37
  WorkStartInput,
38
38
  WorkSwitchInput,
39
39
  WorkUpdateInput,
40
+ WorkWorktreeInput,
40
41
  work_clear_sync,
41
42
  work_clear_worktree_sync,
42
43
  work_delete_sync,
@@ -47,6 +48,7 @@ from meridian.lib.ops.work_lifecycle import (
47
48
  work_start_sync,
48
49
  work_switch_sync,
49
50
  work_update_sync,
51
+ work_worktree_sync,
50
52
  )
51
53
 
52
54
  Emitter = Callable[[Any], None]
@@ -76,12 +78,22 @@ def _work_start(
76
78
  ] = None,
77
79
  worktree: Annotated[
78
80
  bool | None,
79
- Parameter(name="--worktree", help="Create a git worktree for this work item."),
81
+ Parameter(
82
+ name="--worktree",
83
+ help="Ensure Meridian-managed canonical isolation for this work item.",
84
+ ),
80
85
  ] = None,
81
86
  no_worktree: Annotated[
82
87
  bool,
83
88
  Parameter(name="--no-worktree", help="Skip worktree creation even if default is set."),
84
89
  ] = False,
90
+ repo: Annotated[
91
+ str | None,
92
+ Parameter(
93
+ name="--repo",
94
+ help="Target implementation repository path or [workspace.<name>] alias.",
95
+ ),
96
+ ] = None,
85
97
  ) -> None:
86
98
  # Resolve explicit worktree intent from the two flags.
87
99
  # --no-worktree wins over --worktree if both are passed (degenerate case).
@@ -100,6 +112,7 @@ def _work_start(
100
112
  goal=goal,
101
113
  chat_id=_runtime_chat_id(),
102
114
  worktree=worktree_intent,
115
+ repo=repo,
103
116
  )
104
117
  )
105
118
  )
@@ -277,6 +290,39 @@ def _work_clear(emit: Emitter) -> None:
277
290
  emit(work_clear_sync(WorkClearInput(chat_id=_runtime_chat_id())))
278
291
 
279
292
 
293
+ def _work_worktree(
294
+ emit: Emitter,
295
+ work_id: Annotated[
296
+ str,
297
+ Parameter(help="Optional work item id. Defaults to active work for this session."),
298
+ ] = "",
299
+ ensure: Annotated[
300
+ bool,
301
+ Parameter(
302
+ name="--ensure",
303
+ help="Create/recover Meridian's canonical managed worktree if needed.",
304
+ ),
305
+ ] = False,
306
+ repo: Annotated[
307
+ str | None,
308
+ Parameter(
309
+ name="--repo",
310
+ help="Target implementation repository path or [workspace.<name>] alias.",
311
+ ),
312
+ ] = None,
313
+ ) -> None:
314
+ emit(
315
+ work_worktree_sync(
316
+ WorkWorktreeInput(
317
+ work_id=work_id,
318
+ ensure=ensure,
319
+ repo=repo,
320
+ chat_id=_runtime_chat_id(),
321
+ )
322
+ )
323
+ )
324
+
325
+
280
326
  def _work_set_worktree(
281
327
  emit: Emitter,
282
328
  work_id: Annotated[
@@ -326,6 +372,7 @@ def register_work_commands(app: App, emit: Emitter) -> tuple[set[str], dict[str,
326
372
  "meridian.work.reopen": lambda: partial(_work_reopen, emit),
327
373
  "meridian.work.rename": lambda: partial(_work_rename, emit),
328
374
  "meridian.work.clear": lambda: partial(_work_clear, emit),
375
+ "meridian.work.worktree": lambda: partial(_work_worktree, emit),
329
376
  "meridian.work.set-worktree": lambda: partial(_work_set_worktree, emit),
330
377
  "meridian.work.clear-worktree": lambda: partial(_work_clear_worktree, emit),
331
378
  }
@@ -77,9 +77,13 @@ use `SPEC_ONLY`. Do not set `REQUIRED` on execution paths.
77
77
 
78
78
  ### Worktree Lifecycle Protection
79
79
 
80
- `ops/worktree_lifecycle.py` coordinates git worktree creation, restoration, cleanup,
81
- and crash recovery. It is intentionally limited to git/worktree concerns and returns
82
- structured results for callers (`work_lifecycle.py`) to persist and present elsewhere.
80
+ `ops/worktree_lifecycle.py` is the raw git worktree layer it owns creation,
81
+ restoration, cleanup, and crash recovery. It is intentionally limited to git/worktree
82
+ concerns and returns structured results for callers to persist elsewhere.
83
+
84
+ `ops/worktree_ensure.py` sits above it and provides high-level ensure semantics used
85
+ by `work_worktree.py` and spawn logic. The split is: lifecycle owns raw git operations,
86
+ ensure owns state management and idempotency.
83
87
 
84
88
  **Destructive operations guard against three conditions:**
85
89
 
@@ -124,6 +128,45 @@ type (e.g., `{"agents": [...], "skills": [...]}`). This avoids coupling Python
124
128
  to the mars JSON report shape — new content types (hooks, MCP servers, etc.) are
125
129
  automatically counted without Python model changes.
126
130
 
131
+ ### ops/worktree_ensure.py — Managed Worktree Orchestration
132
+
133
+ `worktree_ensure.py` sits above `worktree_lifecycle.py` and provides high-level
134
+ ensure semantics with state management, dry-run support, and session-scoped temporary
135
+ worktrees. Used by `work_worktree.py` and `spawn/api.py`.
136
+
137
+ **Key contracts:**
138
+
139
+ `ensure_work_item_worktree()` is idempotent — calling twice returns `already_available`
140
+ on the second call. Once managed metadata (repo_path + name) is persisted, subsequent
141
+ calls reuse it regardless of `--repo` or cwd. Accepts dry-run mode and `allow_missing_dry_run`
142
+ for work items that don't exist yet. Returns `WorktreeEnsureResult` with status, metadata,
143
+ repo_root, canonical_path, and optional warning.
144
+
145
+ `ensure_temporary_worktree()` provides session-scoped isolation keyed by spawn_id/chat_id
146
+ (via `_temporary_key(ctx)` → `worktree-temp/` store). Uses same pending/rollback discipline:
147
+ set pending before git, clear on failure, upgrade to ready on success.
148
+
149
+ `get_temporary_worktree_status()` is read-only; heals pending-but-dir-exists records.
150
+
151
+ Repo resolution (`_resolve_target_repo()`, `_resolve_repo_root()`) supports path selectors,
152
+ workspace aliases, and cwd-based inference. Dry-run mode uses `.git` marker scanning
153
+ without running git commands.
154
+
155
+ Managed path policy: `_canonical_target()` derives `<repo>.worktrees/<name>`. Non-canonical
156
+ paths are detected as drift and fail clearly.
157
+
158
+ ### ops/work_worktree.py — Work Worktree Command Orchestration
159
+
160
+ `work_worktree.py` orchestrates `meridian work worktree` command logic. Accepts
161
+ `WorkWorktreeInput` (work_id, ensure, repo, chat_id, project_root), returns
162
+ `WorkWorktreeOutput` with worktree path, branch, name, repo_root, managed status,
163
+ exists flag, temporary flag, ensured flag, message, and warning.
164
+
165
+ Routes based on whether a work item is active: calls `ensure_work_item_worktree()`
166
+ if present, else delegates to `ensure_temporary_worktree()`. When `ensure=False`,
167
+ returns status-only response (no-op) if path already exists. When work_id is empty
168
+ and no active work item, uses temporary worktree path.
169
+
127
170
  ## Contracts
128
171
 
129
172
  ### OperationRuntime
@@ -166,6 +166,8 @@ from meridian.lib.ops.work_lifecycle import (
166
166
  WorkSwitchOutput,
167
167
  WorkUpdateInput,
168
168
  WorkUpdateOutput,
169
+ WorkWorktreeInput,
170
+ WorkWorktreeOutput,
169
171
  work_clear,
170
172
  work_clear_sync,
171
173
  work_clear_worktree,
@@ -186,6 +188,8 @@ from meridian.lib.ops.work_lifecycle import (
186
188
  work_switch_sync,
187
189
  work_update,
188
190
  work_update_sync,
191
+ work_worktree,
192
+ work_worktree_sync,
189
193
  )
190
194
  from meridian.lib.ops.workspace import (
191
195
  WorkspaceInitInput,
@@ -569,6 +573,19 @@ _OP_SPECS: tuple[ExtensionCommandSpec, ...] = (
569
573
  agent_default_format="text",
570
574
  surfaces=frozenset({ExtensionSurface.CLI, ExtensionSurface.HTTP}),
571
575
  ),
576
+ ExtensionCommandSpec.from_op(
577
+ extension_id="meridian.work",
578
+ command_id="worktree",
579
+ summary="Show or ensure worktree state for an active or explicit work item.",
580
+ handler=work_worktree,
581
+ sync_handler=work_worktree_sync,
582
+ input_type=WorkWorktreeInput,
583
+ output_type=WorkWorktreeOutput,
584
+ cli_group="work",
585
+ cli_name="worktree",
586
+ agent_default_format="text",
587
+ surfaces=frozenset({ExtensionSurface.CLI, ExtensionSurface.HTTP}),
588
+ ),
572
589
  ExtensionCommandSpec.from_op(
573
590
  extension_id="meridian.work",
574
591
  command_id="set-worktree",
@@ -126,6 +126,7 @@ class ResolvedRoots:
126
126
  project_root: Path
127
127
  project_state_dir: Path
128
128
  runtime_root: Path
129
+ execution_cwd: Path
129
130
 
130
131
 
131
132
  def runtime_context(ctx: RuntimeContext | None) -> RuntimeContext:
@@ -361,6 +362,7 @@ def resolve_roots(project_root: str | None) -> ResolvedRoots:
361
362
  project_root=authority.project_root,
362
363
  project_state_dir=authority.project_state_dir,
363
364
  runtime_root=authority.runtime_root,
365
+ execution_cwd=authority.execution_cwd,
364
366
  )
365
367
 
366
368
 
@@ -370,6 +372,7 @@ def resolve_roots_for_read(project_root: str | None) -> ResolvedRoots:
370
372
  project_root=authority.project_root,
371
373
  project_state_dir=authority.project_state_dir,
372
374
  runtime_root=authority.runtime_root or authority.project_state_dir,
375
+ execution_cwd=authority.execution_cwd,
373
376
  )
374
377
 
375
378
 
@@ -19,6 +19,7 @@ from meridian.lib.core.spawn_lifecycle import ACTIVE_SPAWN_STATUSES, is_active_s
19
19
  from meridian.lib.core.spawn_service import CancelOutcome
20
20
  from meridian.lib.core.telemetry import register_debug_trace_observer
21
21
  from meridian.lib.core.types import SpawnId
22
+ from meridian.lib.launch.cwd import TaskCwdResolution
22
23
  from meridian.lib.launch.request import SessionRequest
23
24
  from meridian.lib.ops.reference import ResolvedSessionReference, resolve_session_reference
24
25
  from meridian.lib.ops.runtime import (
@@ -33,6 +34,8 @@ from meridian.lib.ops.runtime import (
33
34
  resolve_runtime_root_for_read,
34
35
  runtime_context,
35
36
  )
37
+ from meridian.lib.ops.work_attachment import ensure_explicit_work_item
38
+ from meridian.lib.ops.worktree_ensure import ensure_work_item_worktree
36
39
  from meridian.lib.state import session_store, spawn_store, work_store
37
40
  from meridian.lib.state.paths import resolve_project_paths
38
41
  from meridian.lib.state.primary_meta import (
@@ -247,6 +250,30 @@ def _merge_warnings(*warnings: str | None) -> str | None:
247
250
  return " ".join(merged)
248
251
 
249
252
 
253
+ def _resolve_selected_work_item(
254
+ *,
255
+ payload_work: str,
256
+ context: RuntimeContext,
257
+ runtime_root: Path,
258
+ ) -> str | None:
259
+ explicit_work_id = payload_work.strip() or None
260
+ if explicit_work_id is not None:
261
+ return explicit_work_id
262
+
263
+ ambient_work_id = (context.work_id or "").strip() or None
264
+ if ambient_work_id is not None:
265
+ return ambient_work_id
266
+
267
+ chat_id = (context.chat_id or "").strip()
268
+ if not chat_id:
269
+ return None
270
+ try:
271
+ active_work_id = session_store.get_session_active_work_id(runtime_root, chat_id) or ""
272
+ return active_work_id.strip() or None
273
+ except Exception:
274
+ return None
275
+
276
+
250
277
  def spawn_create_sync(
251
278
  payload: SpawnCreateInput,
252
279
  ctx: RuntimeContext | None = None,
@@ -290,11 +317,57 @@ def spawn_create_sync(
290
317
  work_id=payload.work,
291
318
  )
292
319
  payload = payload.model_copy(update={"work": resolved_work_id})
293
- if not work_exists:
320
+ if not work_exists and payload.worktree is not True:
294
321
  dry_run_work_warning = (
295
322
  f"Work item '{resolved_work_id}' does not exist. "
296
323
  "Dry-run leaves state unchanged; it would be created on launch."
297
324
  )
325
+ ensure_warning: str | None = None
326
+ forced_task_cwd_resolution: TaskCwdResolution | None = None
327
+ if payload.worktree is True:
328
+ resolved_runtime_root = (
329
+ _runtime_root_from_prepared_for_read(
330
+ prepared_context,
331
+ project_root=resolved_root,
332
+ )
333
+ if prepared_context is not None
334
+ else (
335
+ authority.runtime_root
336
+ if authority.runtime_root is not None
337
+ else resolve_runtime_root_for_read(resolved_root)
338
+ )
339
+ )
340
+ selected_work_id = _resolve_selected_work_item(
341
+ payload_work=payload.work,
342
+ context=resolved_context,
343
+ runtime_root=resolved_runtime_root,
344
+ )
345
+ if selected_work_id is not None:
346
+ project_state_dir = resolve_project_paths(resolved_root).root_dir
347
+ explicit_work_requested = bool(payload.work.strip())
348
+ if explicit_work_requested and not payload.dry_run:
349
+ selected_work_id = ensure_explicit_work_item(
350
+ project_state_dir,
351
+ selected_work_id,
352
+ )
353
+ payload = payload.model_copy(update={"work": selected_work_id})
354
+ ensured = ensure_work_item_worktree(
355
+ project_root=resolved_root,
356
+ project_state_dir=project_state_dir,
357
+ work_id=selected_work_id,
358
+ target_repo=payload.repo,
359
+ execution_cwd=authority.execution_cwd,
360
+ dry_run=payload.dry_run,
361
+ allow_missing_dry_run=explicit_work_requested,
362
+ )
363
+ ensure_warning = ensured.warning
364
+ if payload.dry_run:
365
+ forced_task_cwd_resolution = TaskCwdResolution(
366
+ task_cwd=ensured.worktree_path,
367
+ source="forced-worktree",
368
+ work_item=selected_work_id,
369
+ )
370
+ preflight_warning = _merge_warnings(preflight_warning, ensure_warning)
298
371
 
299
372
  runtime = None
300
373
  if not payload.dry_run:
@@ -322,6 +395,7 @@ def spawn_create_sync(
322
395
  runtime=runtime,
323
396
  preflight_warning=preflight_warning,
324
397
  ctx=resolved_context,
398
+ forced_task_cwd_resolution=forced_task_cwd_resolution,
325
399
  )
326
400
  forked_from = _forked_from_output(payload)
327
401
  if payload.dry_run:
@@ -1528,6 +1602,7 @@ def _build_fork_create_input(
1528
1602
  inherited_skills: tuple[str, ...],
1529
1603
  requested_work: str,
1530
1604
  requested_worktree: bool | None,
1605
+ requested_repo: str | None,
1531
1606
  requested_goal: str | None,
1532
1607
  harness: str | None,
1533
1608
  ) -> SpawnCreateInput:
@@ -1543,6 +1618,7 @@ def _build_fork_create_input(
1543
1618
  desc=payload.desc,
1544
1619
  work=requested_work or (resolved_reference.source_work_id or ""),
1545
1620
  worktree=requested_worktree,
1621
+ repo=requested_repo,
1546
1622
  goal=requested_goal,
1547
1623
  session=SessionRequest(
1548
1624
  requested_harness_session_id=resolved_reference.harness_session_id,
@@ -1609,6 +1685,7 @@ def spawn_fork_sync(
1609
1685
  requested_agent = (payload.agent or "").strip() or None
1610
1686
  requested_work = payload.work.strip()
1611
1687
  requested_worktree = payload.worktree
1688
+ requested_repo = payload.repo
1612
1689
  requested_goal = payload.goal
1613
1690
  if requested_goal is None and _looks_like_spawn_ref(normalized_source_ref):
1614
1691
  source_row = read_spawn_row(
@@ -1636,6 +1713,7 @@ def spawn_fork_sync(
1636
1713
  inherited_skills=inherited_skills,
1637
1714
  requested_work=requested_work,
1638
1715
  requested_worktree=requested_worktree,
1716
+ requested_repo=requested_repo,
1639
1717
  requested_goal=requested_goal,
1640
1718
  harness=requested_harness,
1641
1719
  )
@@ -1721,6 +1799,7 @@ def spawn_continue_sync(
1721
1799
  desc=payload.desc,
1722
1800
  work=payload.work,
1723
1801
  worktree=payload.worktree,
1802
+ repo=payload.repo,
1724
1803
  session=SessionRequest(
1725
1804
  requested_harness_session_id=resolved_reference.harness_session_id,
1726
1805
  continue_harness=resolved_reference.harness,
@@ -123,6 +123,7 @@ class SpawnCreateInput(SpawnLaunchOptions):
123
123
  desc: str = ""
124
124
  work: str = ""
125
125
  worktree: bool | None = None
126
+ repo: str | None = None
126
127
  session: SessionRequest = SessionRequest()
127
128
 
128
129
  @field_validator("goal", mode="before")
@@ -1051,6 +1052,7 @@ class SpawnContinueInput(SpawnLaunchOptions):
1051
1052
  desc: str = ""
1052
1053
  work: str = ""
1053
1054
  worktree: bool | None = None
1055
+ repo: str | None = None
1054
1056
  fork: bool = False
1055
1057
 
1056
1058
  @field_validator("goal", mode="before")
@@ -1074,6 +1076,7 @@ class SpawnForkInput(SpawnLaunchOptions):
1074
1076
  desc: str = ""
1075
1077
  work: str = ""
1076
1078
  worktree: bool | None = None
1079
+ repo: str | None = None
1077
1080
 
1078
1081
  @field_validator("goal", mode="before")
1079
1082
  @classmethod
@@ -7,7 +7,7 @@ from meridian.lib.core.overrides import RuntimeOverrides
7
7
  from meridian.lib.diagnostics import capture_library_diagnostics
8
8
  from meridian.lib.harness.registry import get_default_harness_registry
9
9
  from meridian.lib.launch.context import build_launch_context
10
- from meridian.lib.launch.cwd import LaunchDirectoryContext, resolve_task_cwd
10
+ from meridian.lib.launch.cwd import LaunchDirectoryContext, TaskCwdResolution, resolve_task_cwd
11
11
  from meridian.lib.launch.reference import parse_template_assignments, validate_reference_paths
12
12
  from meridian.lib.launch.request import (
13
13
  ExecutionBudget,
@@ -48,6 +48,7 @@ def build_create_payload(
48
48
  runtime: OperationRuntime | None = None,
49
49
  preflight_warning: str | None = None,
50
50
  ctx: RuntimeContext | None = None,
51
+ forced_task_cwd_resolution: TaskCwdResolution | None = None,
51
52
  ) -> SpawnRequest:
52
53
  """Build a spawn request without leaking library warnings to stderr."""
53
54
 
@@ -84,14 +85,18 @@ def build_create_payload(
84
85
  ).strip() or None
85
86
  except Exception:
86
87
  ambient_work_id = None
87
- task_cwd_resolution = resolve_task_cwd(
88
- project_root,
89
- project_state_dir=resolve_project_paths(project_root).root_dir,
90
- explicit_work_id=explicit_work_id,
91
- ambient_work_id=ambient_work_id,
92
- force_worktree=payload.worktree is True,
93
- force_no_worktree=payload.worktree is False,
94
- )
88
+ project_state_dir = resolve_project_paths(project_root).root_dir
89
+ if forced_task_cwd_resolution is not None:
90
+ task_cwd_resolution = forced_task_cwd_resolution
91
+ else:
92
+ task_cwd_resolution = resolve_task_cwd(
93
+ project_root,
94
+ project_state_dir=project_state_dir,
95
+ explicit_work_id=explicit_work_id,
96
+ ambient_work_id=ambient_work_id,
97
+ force_worktree=payload.worktree is True,
98
+ force_no_worktree=payload.worktree is False,
99
+ )
95
100
  directory_context = LaunchDirectoryContext.from_task_cwd_resolution(
96
101
  authority_root=project_root,
97
102
  task_cwd_resolution=task_cwd_resolution,
@@ -148,7 +153,7 @@ def build_create_payload(
148
153
  template_vars=parsed_template_vars,
149
154
  goal=payload.goal,
150
155
  work_id_hint=payload.work.strip() or None,
151
- warning=preflight_warning,
156
+ warning=preflight_warning.strip() if preflight_warning is not None else None,
152
157
  authority_root=directory_context.authority_root.as_posix(),
153
158
  task_cwd=directory_context.logical_task_cwd.as_posix(),
154
159
  reference_anchor=directory_context.reference_anchor.as_posix(),