meridian-cli 0.2.2__tar.gz → 0.2.4__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.4}/.gitignore +1 -0
  2. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/PKG-INFO +3 -3
  3. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/README.md +1 -1
  4. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/pyproject.toml +1 -2
  5. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/__init__.py +1 -1
  6. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/spawn.py +17 -1
  7. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/startup/catalog.py +5 -0
  8. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/work_cmd.py +48 -1
  9. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/codex_ws.py +12 -3
  10. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/.context/CONTEXT.md +12 -8
  11. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/context.py +4 -1
  12. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/cwd.py +11 -3
  13. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/.context/CONTEXT.md +51 -3
  14. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/commands.py +17 -0
  15. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/runtime.py +3 -0
  16. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/api.py +80 -1
  17. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/models.py +3 -0
  18. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/prepare.py +15 -10
  19. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/work_lifecycle.py +54 -72
  20. meridian_cli-0.2.4/src/meridian/lib/ops/work_worktree.py +231 -0
  21. meridian_cli-0.2.4/src/meridian/lib/ops/worktree_ensure.py +775 -0
  22. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/worktree_lifecycle.py +69 -27
  23. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/worktree_ops.py +13 -2
  24. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/.context/CONTEXT.md +22 -0
  25. meridian_cli-0.2.4/src/meridian/lib/state/temp_worktree_store.py +107 -0
  26. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/work_store.py +84 -5
  27. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/LICENSE +0 -0
  28. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/ag_ui/__init__.pyi +0 -0
  29. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/ag_ui/core.pyi +0 -0
  30. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/AGENTS.md +0 -0
  31. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/__main__.py +0 -0
  32. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/.context/CONTEXT.md +0 -0
  33. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/AGENTS.md +0 -0
  34. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/__init__.py +0 -0
  35. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/_cmd_utils.py +0 -0
  36. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/agent_help.py +0 -0
  37. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/app_tree.py +0 -0
  38. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/argv_normalization.py +0 -0
  39. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/bootstrap.py +0 -0
  40. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/bootstrap_cmd.py +0 -0
  41. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/chat_cmd.py +0 -0
  42. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/config_cmd.py +0 -0
  43. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/doctor_cmd.py +0 -0
  44. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/entrypoint.py +0 -0
  45. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/ext_cmd.py +0 -0
  46. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/ext_registration.py +0 -0
  47. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/hooks_authority.py +0 -0
  48. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/hooks_commands.py +0 -0
  49. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/kg_cmd.py +0 -0
  50. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/main.py +0 -0
  51. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/mars_passthrough.py +0 -0
  52. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/mermaid_cmd.py +0 -0
  53. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/migrate_cmd.py +0 -0
  54. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/misc_commands.py +0 -0
  55. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/models_cmd.py +0 -0
  56. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/output.py +0 -0
  57. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/primary_launch.py +0 -0
  58. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/qi_cmd.py +0 -0
  59. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/report_cmd.py +0 -0
  60. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/session_cmd.py +0 -0
  61. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/spawn_inject.py +0 -0
  62. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/startup/__init__.py +0 -0
  63. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/startup/classify.py +0 -0
  64. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  65. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/startup/help.py +0 -0
  66. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  67. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/startup/policy.py +0 -0
  68. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/streaming_serve.py +0 -0
  69. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/sync_cmd.py +0 -0
  70. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/telemetry_cmd.py +0 -0
  71. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/utils.py +0 -0
  72. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/cli/workspace_cmd.py +0 -0
  73. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/dev/AGENTS.md +0 -0
  74. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/dev/__init__.py +0 -0
  75. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/dev/pytests.py +0 -0
  76. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/__init__.py +0 -0
  77. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  78. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  79. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/bootstrap/__init__.py +0 -0
  80. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/bootstrap/config.py +0 -0
  81. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/bootstrap/project_state.py +0 -0
  82. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  83. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/bootstrap/services.py +0 -0
  84. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  85. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/AGENTS.md +0 -0
  86. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/__init__.py +0 -0
  87. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/agent.py +0 -0
  88. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/bootstrap.py +0 -0
  89. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/catalog_session.py +0 -0
  90. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/model_aliases.py +0 -0
  91. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/models.py +0 -0
  92. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/catalog/skill.py +0 -0
  93. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  94. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/AGENTS.md +0 -0
  95. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/__init__.py +0 -0
  96. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  97. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/backend_handle.py +0 -0
  98. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/checkpoint.py +0 -0
  99. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/command_handler.py +0 -0
  100. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/command_invariants.py +0 -0
  101. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/commands.py +0 -0
  102. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  103. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  104. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  105. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  106. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  107. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  108. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  109. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  110. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  111. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/event_index.py +0 -0
  112. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/event_log.py +0 -0
  113. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/event_observer.py +0 -0
  114. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/event_pipeline.py +0 -0
  115. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/frontend.py +0 -0
  116. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  117. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  118. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  119. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/base.py +0 -0
  120. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/claude.py +0 -0
  121. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/codex.py +0 -0
  122. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/common.py +0 -0
  123. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  124. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/registry.py +0 -0
  125. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  126. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/policy.py +0 -0
  127. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/protocol.py +0 -0
  128. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/recovery.py +0 -0
  129. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/replay.py +0 -0
  130. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/runtime.py +0 -0
  131. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/server.py +0 -0
  132. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/session_service.py +0 -0
  133. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/chat/ws_fanout.py +0 -0
  134. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
  135. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/AGENTS.md +0 -0
  136. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/__init__.py +0 -0
  137. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/catalog.py +0 -0
  138. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/context_config.py +0 -0
  139. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/preserving_edit.py +0 -0
  140. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/project_config_state.py +0 -0
  141. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/project_paths.py +0 -0
  142. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/project_root.py +0 -0
  143. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/schema.py +0 -0
  144. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/settings.py +0 -0
  145. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/config/workspace.py +0 -0
  146. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  147. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/context/AGENTS.md +0 -0
  148. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/context/__init__.py +0 -0
  149. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/context/resolver.py +0 -0
  150. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
  151. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/AGENTS.md +0 -0
  152. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/__init__.py +0 -0
  153. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/child_env.py +0 -0
  154. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/clock.py +0 -0
  155. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/codec.py +0 -0
  156. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/context.py +0 -0
  157. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/conversation.py +0 -0
  158. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/depth.py +0 -0
  159. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/domain.py +0 -0
  160. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/execution_policy.py +0 -0
  161. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/formatting.py +0 -0
  162. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/lifecycle.py +0 -0
  163. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/logging.py +0 -0
  164. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/overrides.py +0 -0
  165. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/process_cleanup.py +0 -0
  166. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/resolved_context.py +0 -0
  167. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/sink.py +0 -0
  168. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
  169. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/spawn_service.py +0 -0
  170. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/spawn_start.py +0 -0
  171. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/telemetry.py +0 -0
  172. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/types.py +0 -0
  173. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/core/util.py +0 -0
  174. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/diagnostics.py +0 -0
  175. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  176. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/AGENTS.md +0 -0
  177. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/__init__.py +0 -0
  178. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  179. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  180. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  181. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  182. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  183. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  184. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  185. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/context.py +0 -0
  186. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/descriptors.py +0 -0
  187. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/dispatcher.py +0 -0
  188. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/first_party.py +0 -0
  189. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/observability.py +0 -0
  190. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/registry.py +0 -0
  191. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/extensions/types.py +0 -0
  192. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
  193. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/AGENTS.md +0 -0
  194. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/__init__.py +0 -0
  195. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/adapter.py +0 -0
  196. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/bundle.py +0 -0
  197. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/claude.py +0 -0
  198. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/claude_preflight.py +0 -0
  199. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/claude_utils.py +0 -0
  200. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/codex.py +0 -0
  201. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/codex_rollout.py +0 -0
  202. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/common.py +0 -0
  203. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/.context/CONTEXT.md +0 -0
  204. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/AGENTS.md +0 -0
  205. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/__init__.py +0 -0
  206. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/base.py +0 -0
  207. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
  208. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  209. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/errors.py +0 -0
  210. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
  211. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/pi_lifecycle_file.py +0 -0
  212. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
  213. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/control_action.py +0 -0
  214. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/cost.py +0 -0
  215. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/cursor.py +0 -0
  216. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/errors.py +0 -0
  217. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractor.py +0 -0
  218. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  219. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  220. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  221. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/base.py +0 -0
  222. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/claude.py +0 -0
  223. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/codex.py +0 -0
  224. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  225. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  226. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/extractors/pi.py +0 -0
  227. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/launch_spec.py +0 -0
  228. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/launch_types.py +0 -0
  229. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/opencode.py +0 -0
  230. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/opencode_storage.py +0 -0
  231. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  232. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  233. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  234. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  235. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/base.py +0 -0
  236. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  237. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/codex.py +0 -0
  238. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  239. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  240. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/permission_broker.py +0 -0
  241. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/pi.py +0 -0
  242. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
  243. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  244. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
  245. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  246. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/__init__.py +0 -0
  247. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/_guards.py +0 -0
  248. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  249. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  250. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_claude.py +0 -0
  251. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  252. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
  253. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
  254. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
  255. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
  256. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
  257. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_pi_native_tui.py +0 -0
  258. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/project_pi_rpc.py +0 -0
  259. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  260. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/registry.py +0 -0
  261. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/semantics.py +0 -0
  262. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/session_detection.py +0 -0
  263. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/harness/transcript.py +0 -0
  264. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  265. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/AGENTS.md +0 -0
  266. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/__init__.py +0 -0
  267. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  268. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  269. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  270. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  271. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/builtin/base.py +0 -0
  272. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  273. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  274. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/config.py +0 -0
  275. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/dispatch.py +0 -0
  276. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/interval.py +0 -0
  277. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/registry.py +0 -0
  278. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/runner.py +0 -0
  279. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/hooks/types.py +0 -0
  280. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ignores.py +0 -0
  281. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  282. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/kg/AGENTS.md +0 -0
  283. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/kg/__init__.py +0 -0
  284. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/kg/graph.py +0 -0
  285. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/kg/report.py +0 -0
  286. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/kg/serializer.py +0 -0
  287. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/kg/types.py +0 -0
  288. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/AGENTS.md +0 -0
  289. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/__init__.py +0 -0
  290. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/artifact_io.py +0 -0
  291. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  292. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/claude_session_access.py +0 -0
  293. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/command.py +0 -0
  294. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/compiler.py +0 -0
  295. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/composition.py +0 -0
  296. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/constants.py +0 -0
  297. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/env.py +0 -0
  298. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/errors.py +0 -0
  299. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/extract.py +0 -0
  300. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/fork.py +0 -0
  301. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/launch_types.py +0 -0
  302. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/materialize.py +0 -0
  303. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/permissions.py +0 -0
  304. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/plan.py +0 -0
  305. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/policies.py +0 -0
  306. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  307. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  308. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/__init__.py +0 -0
  309. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/ports.py +0 -0
  310. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/primary_attach.py +0 -0
  311. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  312. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/runner.py +0 -0
  313. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/session.py +0 -0
  314. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
  315. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  316. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/prompt.py +0 -0
  317. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/reference.py +0 -0
  318. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/report.py +0 -0
  319. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/request.py +0 -0
  320. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/resolve.py +0 -0
  321. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/run_inputs.py +0 -0
  322. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/runner_helpers.py +0 -0
  323. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/session_scope.py +0 -0
  324. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/signals.py +0 -0
  325. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  326. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  327. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  328. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  329. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  330. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/streaming_runner.py +0 -0
  331. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/text_utils.py +0 -0
  332. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/types.py +0 -0
  333. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/workspace.py +0 -0
  334. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/workspace_projection.py +0 -0
  335. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/launch/written_files.py +0 -0
  336. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  337. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/markdown/AGENTS.md +0 -0
  338. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/markdown/__init__.py +0 -0
  339. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/markdown/extract.py +0 -0
  340. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/markdown/types.py +0 -0
  341. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  342. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  343. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/__init__.py +0 -0
  344. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/report.py +0 -0
  345. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/scanner.py +0 -0
  346. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/serializer.py +0 -0
  347. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  348. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  349. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  350. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  351. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  352. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  353. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  354. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  355. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  356. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/style/types.py +0 -0
  357. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/mermaid/validator.py +0 -0
  358. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  359. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/observability/AGENTS.md +0 -0
  360. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/observability/__init__.py +0 -0
  361. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/observability/debug_tracer.py +0 -0
  362. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/observability/trace_helpers.py +0 -0
  363. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/AGENTS.md +0 -0
  364. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/__init__.py +0 -0
  365. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/catalog.py +0 -0
  366. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/config.py +0 -0
  367. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/config_surface.py +0 -0
  368. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/context.py +0 -0
  369. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/diag.py +0 -0
  370. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/hooks.py +0 -0
  371. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/init_ops.py +0 -0
  372. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/mars.py +0 -0
  373. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/migration.py +0 -0
  374. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/pruning.py +0 -0
  375. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/qi.py +0 -0
  376. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/reference.py +0 -0
  377. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/reference_recovery.py +0 -0
  378. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/report.py +0 -0
  379. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/session_export.py +0 -0
  380. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/session_log.py +0 -0
  381. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/session_read.py +0 -0
  382. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/session_render.py +0 -0
  383. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/session_repair.py +0 -0
  384. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/session_search.py +0 -0
  385. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/session_target.py +0 -0
  386. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
  387. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  388. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/__init__.py +0 -0
  389. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
  390. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/execute.py +0 -0
  391. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  392. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
  393. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/execute_runner.py +0 -0
  394. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
  395. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  396. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/spawn/query.py +0 -0
  397. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  398. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/work_attachment.py +0 -0
  399. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/work_dashboard.py +0 -0
  400. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/workspace.py +0 -0
  401. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/ops/worktree_format.py +0 -0
  402. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  403. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/AGENTS.md +0 -0
  404. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/__init__.py +0 -0
  405. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/locking.py +0 -0
  406. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  407. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  408. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  409. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/process_scope/base.py +0 -0
  410. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
  411. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/process_scope/posix.py +0 -0
  412. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
  413. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/terminate.py +0 -0
  414. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/unix_modules.py +0 -0
  415. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/platform/windows_job.py +0 -0
  416. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  417. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/safety/AGENTS.md +0 -0
  418. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/safety/__init__.py +0 -0
  419. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/safety/budget.py +0 -0
  420. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/safety/guardrails.py +0 -0
  421. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/safety/permissions.py +0 -0
  422. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/safety/redaction.py +0 -0
  423. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/service_context.py +0 -0
  424. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  425. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/spawn/AGENTS.md +0 -0
  426. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/spawn/__init__.py +0 -0
  427. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/spawn/archive.py +0 -0
  428. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/AGENTS.md +0 -0
  429. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/__init__.py +0 -0
  430. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/artifact_store.py +0 -0
  431. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/atomic.py +0 -0
  432. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/event_store.py +0 -0
  433. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/history.py +0 -0
  434. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/launch_boundary.py +0 -0
  435. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/liveness.py +0 -0
  436. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/managed_primary.py +0 -0
  437. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/paths.py +0 -0
  438. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/primary_meta.py +0 -0
  439. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/process_scope_projection.py +0 -0
  440. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/reaper.py +0 -0
  441. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/session_store.py +0 -0
  442. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  443. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  444. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn/__init__.py +0 -0
  445. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn/model.py +0 -0
  446. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn/repository.py +0 -0
  447. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  448. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn/transitions.py +0 -0
  449. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/spawn_store.py +0 -0
  450. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/user_paths.py +0 -0
  451. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/wordgen.py +0 -0
  452. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/state/wordlists.py +0 -0
  453. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/.context/CONTEXT.md +0 -0
  454. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/AGENTS.md +0 -0
  455. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/__init__.py +0 -0
  456. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/control_socket.py +0 -0
  457. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/drain_policy.py +0 -0
  458. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/event_observers.py +0 -0
  459. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/heartbeat.py +0 -0
  460. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/inject_lock.py +0 -0
  461. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/signal_canceller.py +0 -0
  462. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/spawn_manager.py +0 -0
  463. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/streaming/types.py +0 -0
  464. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/__init__.py +0 -0
  465. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  466. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/correlation.py +0 -0
  467. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/events.py +0 -0
  468. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/init.py +0 -0
  469. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  470. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/maintenance.py +0 -0
  471. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/observer.py +0 -0
  472. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/observers.py +0 -0
  473. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/query.py +0 -0
  474. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/reader.py +0 -0
  475. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/retention.py +0 -0
  476. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/router.py +0 -0
  477. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/sinks.py +0 -0
  478. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/telemetry/status.py +0 -0
  479. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/tools.py +0 -0
  480. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/utils/__init__.py +0 -0
  481. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/lib/utils/time.py +0 -0
  482. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
  483. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/README.md +0 -0
  484. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/__init__.py +0 -0
  485. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/extensions/managed-bash/.context/CONTEXT.md +0 -0
  486. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  487. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/extensions/meridian-lifecycle/.context/CONTEXT.md +0 -0
  488. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/extensions/meridian-lifecycle/src/index.ts +0 -0
  489. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/extensions/shared/lifecycle_sidecar.ts +0 -0
  490. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/extensions/types.ts +0 -0
  491. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/package.json +0 -0
  492. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  493. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
  494. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/plugin_api/AGENTS.md +0 -0
  495. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/plugin_api/__init__.py +0 -0
  496. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/plugin_api/config.py +0 -0
  497. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/plugin_api/fs.py +0 -0
  498. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/plugin_api/git.py +0 -0
  499. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/plugin_api/state.py +0 -0
  500. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/plugin_api/types.py +0 -0
  501. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/py.typed +0 -0
  502. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/server/AGENTS.md +0 -0
  503. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/server/__init__.py +0 -0
  504. {meridian_cli-0.2.2 → meridian_cli-0.2.4}/src/meridian/server/main.py +0 -0
@@ -27,6 +27,7 @@ plan/
27
27
  err
28
28
  out
29
29
  .mars/
30
+ mars.lock
30
31
  mars.local.toml
31
32
  *.log
32
33
  .claude/scheduled_tasks.lock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meridian-cli
3
- Version: 0.2.2
3
+ Version: 0.2.4
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.4"
@@ -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
  }
@@ -312,6 +312,7 @@ class CodexConnection(HarnessConnection[ResolvedLaunchSpec]):
312
312
 
313
313
  env = inherit_child_env(os.environ, config.env_overrides)
314
314
  self._codex_home = resolve_codex_home(env)
315
+ effective_cwd = self._effective_project_root()
315
316
  spawn_dir = resolve_spawn_log_dir(config.control_root, config.spawn_id)
316
317
  spawn_dir.mkdir(parents=True, exist_ok=True)
317
318
  self._stderr_log_path = spawn_dir / "stderr.log"
@@ -329,7 +330,7 @@ class CodexConnection(HarnessConnection[ResolvedLaunchSpec]):
329
330
  self._emit_startup_phase(StartupPhase.LAUNCHING_SUBPROCESS)
330
331
  self._process = await asyncio.create_subprocess_exec(
331
332
  *appserver_command,
332
- cwd=str(config.control_root),
333
+ cwd=str(effective_cwd),
333
334
  env=env,
334
335
  stdout=asyncio.subprocess.DEVNULL,
335
336
  stderr=self._stderr_handle,
@@ -1109,6 +1110,14 @@ class CodexConnection(HarnessConnection[ResolvedLaunchSpec]):
1109
1110
  """Check if this is a fresh session (not resume or fork)."""
1110
1111
  return not (spec.continue_session_id or "").strip()
1111
1112
 
1113
+ def _effective_project_root(self) -> Path:
1114
+ """Project root Codex should bind the app-server/thread/rollout to."""
1115
+
1116
+ config = self._config
1117
+ if config is None:
1118
+ raise RuntimeError("Codex connection config is unavailable")
1119
+ return config.task_cwd or config.control_root
1120
+
1112
1121
  async def _send_bootstrap_turn_and_wait(self) -> None:
1113
1122
  """Send a minimal bootstrap turn and wait for completion.
1114
1123
 
@@ -1149,7 +1158,7 @@ class CodexConnection(HarnessConnection[ResolvedLaunchSpec]):
1149
1158
  if (
1150
1159
  find_attachable_rollout_session_id(
1151
1160
  codex_home=codex_home,
1152
- project_root=config.control_root,
1161
+ project_root=self._effective_project_root(),
1153
1162
  session_id=thread_id,
1154
1163
  )
1155
1164
  == thread_id
@@ -1182,7 +1191,7 @@ class CodexConnection(HarnessConnection[ResolvedLaunchSpec]):
1182
1191
  projected = project_managed_primary_bootstrap(
1183
1192
  self.harness_id,
1184
1193
  spec,
1185
- project_root=config.control_root,
1194
+ project_root=self._effective_project_root(),
1186
1195
  )
1187
1196
  if not isinstance(projected, tuple):
1188
1197
  raise TypeError("Codex managed-primary bootstrap must be (method, payload)")
@@ -196,11 +196,13 @@ to `logical_task_cwd` but may differ — Claude harness forces it to `authority_
196
196
  when `has_distinct_task_cwd` is true, because Claude's `--add-dir` grants access
197
197
  without needing the process to start in the task directory.
198
198
 
199
- **Task CWD instruction injection.** When `actual_process_cwd != logical_task_cwd`,
200
- the launch composition adds a prompt instruction telling the agent to `cd` into
201
- the task cwd before any filesystem operations. This is the fallback mechanism —
202
- the agent is informed of the intended working directory when the process didn't
203
- start there. Controlled by `LaunchDirectoryContext.requires_task_cwd_instruction`.
199
+ **Task CWD instruction injection.** For non-primary child spawns with a distinct
200
+ `logical_task_cwd`, launch composition always adds a prompt instruction telling
201
+ the agent to `cd` into the task cwd before filesystem operations. This is a
202
+ conservative child-spawn safety contract: harnesses may bind tools differently
203
+ than Meridian's requested process cwd. Primary sessions stay quiet unless a
204
+ future primary flow explicitly needs task-cwd steering. Controlled by
205
+ `LaunchDirectoryContext.should_inject_task_cwd_instruction(surface)`.
204
206
 
205
207
  Resolution priority in `resolve_task_cwd()`:
206
208
  1. `--no-worktree` → authority root
@@ -263,11 +265,13 @@ Two steps inside `bind_launch_context()`:
263
265
  `--add-dir` args; OpenCode gets `OPENCODE_CONFIG_CONTENT` env override (deep-merged).
264
266
 
265
267
  Roots include workspace roots, git context clone roots, context projection roots
266
- (work, kb, extras), runtime root, and system temp dir deduplicated in order.
267
- Extra args remain user-owned passthrough; they are not a workspace projection channel.
268
+ (work, kb, extras), task cwd when task cwd is external, runtime root, and system
269
+ temp dir — deduplicated in order. Extra args remain user-owned passthrough; they
270
+ are not a workspace projection channel.
268
271
 
269
272
  **Task CWD projection gap.** When `task_cwd` is outside both `control_root` and
270
- all projected workspace roots, and workspace projection is not active, a
273
+ all projected workspace roots, launch composition projects the exact task cwd
274
+ for active projection harnesses. If workspace projection is not active, a
271
275
  `task_cwd_not_projected` warning is emitted. The launch continues but the agent
272
276
  doesn't automatically get access to the task directory — harness-specific
273
277
  configuration would be needed.
@@ -1549,6 +1549,9 @@ def bind_launch_context(
1549
1549
  )
1550
1550
 
1551
1551
  is_primary_launch = runtime.composition_surface == LaunchCompositionSurface.PRIMARY
1552
+ inject_task_cwd_instruction = directory_context.should_inject_task_cwd_instruction(
1553
+ runtime.composition_surface
1554
+ )
1552
1555
  materialized = materialize_launch_artifacts(
1553
1556
  harness=harness,
1554
1557
  prompt=resolved_request.prompt,
@@ -1560,7 +1563,7 @@ def bind_launch_context(
1560
1563
  extra_args=projected_extra_args,
1561
1564
  control_root=resolved_control_root.as_posix(),
1562
1565
  task_cwd=(task_cwd.as_posix() if task_cwd is not None else None),
1563
- inject_task_cwd_instruction=directory_context.requires_task_cwd_instruction,
1566
+ inject_task_cwd_instruction=inject_task_cwd_instruction,
1564
1567
  mcp_tools=resolved_request.mcp_tools,
1565
1568
  projected_roots=projected_roots,
1566
1569
  interactive=is_primary_launch,
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  from dataclasses import dataclass, replace
6
6
  from pathlib import Path
7
7
 
8
+ from meridian.lib.launch.request import LaunchCompositionSurface
8
9
  from meridian.lib.state import work_store
9
10
 
10
11
 
@@ -56,9 +57,16 @@ class LaunchDirectoryContext:
56
57
  def has_distinct_task_cwd(self) -> bool:
57
58
  return self.logical_task_cwd != self.authority_root
58
59
 
59
- @property
60
- def requires_task_cwd_instruction(self) -> bool:
61
- return self.actual_process_cwd != self.logical_task_cwd
60
+ def should_inject_task_cwd_instruction(self, surface: LaunchCompositionSurface) -> bool:
61
+ """Whether launch composition should tell the agent to cd into task cwd.
62
+
63
+ Child spawn tool cwd can vary by harness even when Meridian requests the
64
+ task cwd. Be conservative for all non-primary child launches with a
65
+ distinct task cwd; keep primary sessions quiet unless a future primary
66
+ flow needs explicit task-cwd steering.
67
+ """
68
+
69
+ return self.has_distinct_task_cwd and surface != LaunchCompositionSurface.PRIMARY
62
70
 
63
71
 
64
72
  def _active_worktree_path_for_item(
@@ -77,9 +77,18 @@ 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.
87
+
88
+ Managed worktree creation writes a `mars.local.toml` guard with
89
+ `[settings] targets = []` when the worktree is newly created. This prevents
90
+ repo-local `meridian mars sync` from materializing harness targets inside each
91
+ worktree. Existing `mars.local.toml` files are user-owned and preserved.
83
92
 
84
93
  **Destructive operations guard against three conditions:**
85
94
 
@@ -124,6 +133,45 @@ type (e.g., `{"agents": [...], "skills": [...]}`). This avoids coupling Python
124
133
  to the mars JSON report shape — new content types (hooks, MCP servers, etc.) are
125
134
  automatically counted without Python model changes.
126
135
 
136
+ ### ops/worktree_ensure.py — Managed Worktree Orchestration
137
+
138
+ `worktree_ensure.py` sits above `worktree_lifecycle.py` and provides high-level
139
+ ensure semantics with state management, dry-run support, and session-scoped temporary
140
+ worktrees. Used by `work_worktree.py` and `spawn/api.py`.
141
+
142
+ **Key contracts:**
143
+
144
+ `ensure_work_item_worktree()` is idempotent — calling twice returns `already_available`
145
+ on the second call. Once managed metadata (repo_path + name) is persisted, subsequent
146
+ calls reuse it regardless of `--repo` or cwd. Accepts dry-run mode and `allow_missing_dry_run`
147
+ for work items that don't exist yet. Returns `WorktreeEnsureResult` with status, metadata,
148
+ repo_root, canonical_path, and optional warning.
149
+
150
+ `ensure_temporary_worktree()` provides session-scoped isolation keyed by spawn_id/chat_id
151
+ (via `_temporary_key(ctx)` → `worktree-temp/` store). Uses same pending/rollback discipline:
152
+ set pending before git, clear on failure, upgrade to ready on success.
153
+
154
+ `get_temporary_worktree_status()` is read-only; heals pending-but-dir-exists records.
155
+
156
+ Repo resolution (`_resolve_target_repo()`, `_resolve_repo_root()`) supports path selectors,
157
+ workspace aliases, and cwd-based inference. Dry-run mode uses `.git` marker scanning
158
+ without running git commands.
159
+
160
+ Managed path policy: `_canonical_target()` derives `<repo>.worktrees/<name>`. Non-canonical
161
+ paths are detected as drift and fail clearly.
162
+
163
+ ### ops/work_worktree.py — Work Worktree Command Orchestration
164
+
165
+ `work_worktree.py` orchestrates `meridian work worktree` command logic. Accepts
166
+ `WorkWorktreeInput` (work_id, ensure, repo, chat_id, project_root), returns
167
+ `WorkWorktreeOutput` with worktree path, branch, name, repo_root, managed status,
168
+ exists flag, temporary flag, ensured flag, message, and warning.
169
+
170
+ Routes based on whether a work item is active: calls `ensure_work_item_worktree()`
171
+ if present, else delegates to `ensure_temporary_worktree()`. When `ensure=False`,
172
+ returns status-only response (no-op) if path already exists. When work_id is empty
173
+ and no active work item, uses temporary worktree path.
174
+
127
175
  ## Contracts
128
176
 
129
177
  ### 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