meridian-cli 0.2.18__tar.gz → 0.2.20__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 (532) hide show
  1. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/PKG-INFO +1 -1
  2. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/__init__.py +1 -1
  3. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/main.py +1 -0
  4. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/primary_launch.py +1 -11
  5. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/.context/CONTEXT.md +14 -0
  6. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/AGENTS.md +12 -0
  7. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/settings.py +38 -0
  8. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/.context/CONTEXT.md +24 -0
  9. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/AGENTS.md +8 -0
  10. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/adapter.py +1 -0
  11. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/claude.py +5 -0
  12. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/codex.py +1 -0
  13. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/cursor.py +1 -0
  14. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/opencode.py +1 -0
  15. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/codex.py +5 -1
  16. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/pi.py +1 -0
  17. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_claude.py +5 -0
  18. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_codex_streaming.py +1 -0
  19. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_codex_subprocess.py +1 -0
  20. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_cursor.py +1 -0
  21. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_opencode_streaming.py +1 -0
  22. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +1 -0
  23. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_pi_native_tui.py +1 -0
  24. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_pi_rpc.py +1 -0
  25. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/AGENTS.md +6 -0
  26. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/__init__.py +37 -13
  27. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/context.py +81 -2
  28. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/cwd.py +5 -1
  29. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/launch_types.py +1 -0
  30. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/plan.py +8 -0
  31. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/request.py +1 -0
  32. meridian_cli-0.2.20/src/meridian/lib/launch/resolution.py +117 -0
  33. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/context_ref.py +11 -0
  34. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/prepare.py +19 -41
  35. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/work_store.py +10 -2
  36. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/.gitignore +0 -0
  37. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/LICENSE +0 -0
  38. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/README.md +0 -0
  39. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/pyproject.toml +0 -0
  40. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/ag_ui/__init__.pyi +0 -0
  41. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/ag_ui/core.pyi +0 -0
  42. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/AGENTS.md +0 -0
  43. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/__main__.py +0 -0
  44. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/.context/CONTEXT.md +0 -0
  45. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/AGENTS.md +0 -0
  46. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/__init__.py +0 -0
  47. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/_cmd_utils.py +0 -0
  48. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/agent_help.py +0 -0
  49. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/app_tree.py +0 -0
  50. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/argv_normalization.py +0 -0
  51. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/bootstrap.py +0 -0
  52. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/bootstrap_cmd.py +0 -0
  53. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/chat_cmd.py +0 -0
  54. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/config_cmd.py +0 -0
  55. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/doctor_cmd.py +0 -0
  56. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/entrypoint.py +0 -0
  57. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/ext_cmd.py +0 -0
  58. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/ext_registration.py +0 -0
  59. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/hooks_authority.py +0 -0
  60. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/hooks_commands.py +0 -0
  61. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/kg_cmd.py +0 -0
  62. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/mars_passthrough.py +0 -0
  63. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/mermaid_cmd.py +0 -0
  64. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/migrate_cmd.py +0 -0
  65. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/misc_commands.py +0 -0
  66. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/models_cmd.py +0 -0
  67. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/output.py +0 -0
  68. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/qi_cmd.py +0 -0
  69. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/report_cmd.py +0 -0
  70. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/session_cmd.py +0 -0
  71. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/spawn.py +0 -0
  72. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/spawn_inject.py +0 -0
  73. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/startup/__init__.py +0 -0
  74. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/startup/catalog.py +0 -0
  75. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/startup/classify.py +0 -0
  76. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  77. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/startup/help.py +0 -0
  78. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  79. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/startup/policy.py +0 -0
  80. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/streaming_serve.py +0 -0
  81. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/sync_cmd.py +0 -0
  82. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/telemetry_cmd.py +0 -0
  83. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/utils.py +0 -0
  84. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/work_cmd.py +0 -0
  85. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/cli/workspace_cmd.py +0 -0
  86. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/dev/AGENTS.md +0 -0
  87. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/dev/__init__.py +0 -0
  88. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/dev/pytests.py +0 -0
  89. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/__init__.py +0 -0
  90. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  91. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  92. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/bootstrap/__init__.py +0 -0
  93. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/bootstrap/config.py +0 -0
  94. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/bootstrap/project_state.py +0 -0
  95. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  96. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/bootstrap/services.py +0 -0
  97. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  98. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/AGENTS.md +0 -0
  99. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/__init__.py +0 -0
  100. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/agent.py +0 -0
  101. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/bootstrap.py +0 -0
  102. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/catalog_session.py +0 -0
  103. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/model_aliases.py +0 -0
  104. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/models.py +0 -0
  105. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/catalog/skill.py +0 -0
  106. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  107. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/AGENTS.md +0 -0
  108. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/__init__.py +0 -0
  109. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  110. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/backend_handle.py +0 -0
  111. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/checkpoint.py +0 -0
  112. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/command_handler.py +0 -0
  113. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/command_invariants.py +0 -0
  114. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/commands.py +0 -0
  115. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  116. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  117. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  118. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  119. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  120. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  121. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  122. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  123. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  124. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/event_index.py +0 -0
  125. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/event_log.py +0 -0
  126. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/event_observer.py +0 -0
  127. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/event_pipeline.py +0 -0
  128. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/frontend.py +0 -0
  129. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  130. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  131. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  132. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/base.py +0 -0
  133. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/claude.py +0 -0
  134. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/codex.py +0 -0
  135. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/common.py +0 -0
  136. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  137. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/registry.py +0 -0
  138. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  139. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/policy.py +0 -0
  140. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/protocol.py +0 -0
  141. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/recovery.py +0 -0
  142. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/replay.py +0 -0
  143. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/runtime.py +0 -0
  144. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/server.py +0 -0
  145. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/session_service.py +0 -0
  146. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/chat/ws_fanout.py +0 -0
  147. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/__init__.py +0 -0
  148. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/catalog.py +0 -0
  149. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/context_config.py +0 -0
  150. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/preserving_edit.py +0 -0
  151. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/project_config_state.py +0 -0
  152. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/project_paths.py +0 -0
  153. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/project_root.py +0 -0
  154. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/schema.py +0 -0
  155. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/config/workspace.py +0 -0
  156. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  157. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/context/AGENTS.md +0 -0
  158. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/context/__init__.py +0 -0
  159. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/context/resolver.py +0 -0
  160. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
  161. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/AGENTS.md +0 -0
  162. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/__init__.py +0 -0
  163. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/child_env.py +0 -0
  164. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/clock.py +0 -0
  165. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/codec.py +0 -0
  166. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/command_strings.py +0 -0
  167. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/context.py +0 -0
  168. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/conversation.py +0 -0
  169. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/depth.py +0 -0
  170. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/domain.py +0 -0
  171. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/execution_policy.py +0 -0
  172. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/formatting.py +0 -0
  173. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/launch_policy_snapshot.py +0 -0
  174. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/lifecycle.py +0 -0
  175. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/logging.py +0 -0
  176. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/overrides.py +0 -0
  177. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/process_cleanup.py +0 -0
  178. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/resolved_context.py +0 -0
  179. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/sink.py +0 -0
  180. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
  181. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/spawn_service.py +0 -0
  182. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/spawn_start.py +0 -0
  183. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/telemetry.py +0 -0
  184. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/types.py +0 -0
  185. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/core/util.py +0 -0
  186. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/diagnostics.py +0 -0
  187. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  188. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/AGENTS.md +0 -0
  189. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/__init__.py +0 -0
  190. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  191. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  192. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  193. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  194. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  195. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  196. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  197. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/context.py +0 -0
  198. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/descriptors.py +0 -0
  199. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/dispatcher.py +0 -0
  200. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/first_party.py +0 -0
  201. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/observability.py +0 -0
  202. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/registry.py +0 -0
  203. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/extensions/types.py +0 -0
  204. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/__init__.py +0 -0
  205. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/bundle.py +0 -0
  206. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/claude_preflight.py +0 -0
  207. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/claude_utils.py +0 -0
  208. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/codex_rollout.py +0 -0
  209. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/common.py +0 -0
  210. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/.context/CONTEXT.md +0 -0
  211. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/AGENTS.md +0 -0
  212. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/__init__.py +0 -0
  213. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/base.py +0 -0
  214. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
  215. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/codex_ws.py +0 -0
  216. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  217. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/errors.py +0 -0
  218. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
  219. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
  220. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/control_action.py +0 -0
  221. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/cost.py +0 -0
  222. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/errors.py +0 -0
  223. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractor.py +0 -0
  224. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  225. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  226. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  227. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/base.py +0 -0
  228. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/claude.py +0 -0
  229. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/codex.py +0 -0
  230. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  231. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  232. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/extractors/pi.py +0 -0
  233. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/launch_spec.py +0 -0
  234. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/launch_types.py +0 -0
  235. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/opencode_storage.py +0 -0
  236. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  237. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  238. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  239. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  240. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/base.py +0 -0
  241. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  242. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  243. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  244. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/permission_broker.py +0 -0
  245. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
  246. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/pi_paths.py +0 -0
  247. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  248. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
  249. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  250. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/__init__.py +0 -0
  251. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/_guards.py +0 -0
  252. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  253. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  254. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  255. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  256. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/registry.py +0 -0
  257. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/semantics.py +0 -0
  258. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/session_detection.py +0 -0
  259. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/harness/transcript.py +0 -0
  260. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  261. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/AGENTS.md +0 -0
  262. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/__init__.py +0 -0
  263. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  264. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  265. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  266. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  267. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/builtin/base.py +0 -0
  268. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  269. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  270. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/config.py +0 -0
  271. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/dispatch.py +0 -0
  272. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/interval.py +0 -0
  273. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/registry.py +0 -0
  274. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/runner.py +0 -0
  275. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/hooks/types.py +0 -0
  276. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ignores.py +0 -0
  277. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  278. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/kg/AGENTS.md +0 -0
  279. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/kg/__init__.py +0 -0
  280. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/kg/graph.py +0 -0
  281. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/kg/report.py +0 -0
  282. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/kg/serializer.py +0 -0
  283. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/kg/types.py +0 -0
  284. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
  285. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/artifact_io.py +0 -0
  286. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  287. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/claude_session_access.py +0 -0
  288. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/command.py +0 -0
  289. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/compiler.py +0 -0
  290. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/composition.py +0 -0
  291. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/composition_spawn.py +0 -0
  292. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/constants.py +0 -0
  293. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/env.py +0 -0
  294. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/errors.py +0 -0
  295. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/extract.py +0 -0
  296. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/fork.py +0 -0
  297. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/materialize.py +0 -0
  298. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/permissions.py +0 -0
  299. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/policies.py +0 -0
  300. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/policy_snapshot.py +0 -0
  301. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  302. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  303. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/__init__.py +0 -0
  304. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/ports.py +0 -0
  305. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/primary_attach.py +0 -0
  306. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  307. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/runner.py +0 -0
  308. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/session.py +0 -0
  309. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
  310. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  311. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/prompt.py +0 -0
  312. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/reference.py +0 -0
  313. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/report.py +0 -0
  314. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/resolve.py +0 -0
  315. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/run_inputs.py +0 -0
  316. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/runner_helpers.py +0 -0
  317. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/session_scope.py +0 -0
  318. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/signals.py +0 -0
  319. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  320. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  321. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  322. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  323. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  324. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/streaming_runner.py +0 -0
  325. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/text_utils.py +0 -0
  326. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/types.py +0 -0
  327. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/workspace.py +0 -0
  328. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/workspace_projection.py +0 -0
  329. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/launch/written_files.py +0 -0
  330. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  331. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/markdown/AGENTS.md +0 -0
  332. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/markdown/__init__.py +0 -0
  333. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/markdown/extract.py +0 -0
  334. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/markdown/types.py +0 -0
  335. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  336. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  337. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/__init__.py +0 -0
  338. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/report.py +0 -0
  339. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/scanner.py +0 -0
  340. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/serializer.py +0 -0
  341. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  342. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  343. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  344. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  345. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  346. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  347. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  348. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  349. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  350. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/style/types.py +0 -0
  351. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/mermaid/validator.py +0 -0
  352. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  353. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/observability/AGENTS.md +0 -0
  354. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/observability/__init__.py +0 -0
  355. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/observability/debug_tracer.py +0 -0
  356. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/observability/trace_helpers.py +0 -0
  357. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
  358. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/AGENTS.md +0 -0
  359. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/__init__.py +0 -0
  360. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/catalog.py +0 -0
  361. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/commands.py +0 -0
  362. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/config.py +0 -0
  363. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/config_surface.py +0 -0
  364. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/context.py +0 -0
  365. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/diag.py +0 -0
  366. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/hooks.py +0 -0
  367. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/init_ops.py +0 -0
  368. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/mars.py +0 -0
  369. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/migration.py +0 -0
  370. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/pruning.py +0 -0
  371. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/qi.py +0 -0
  372. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/reference.py +0 -0
  373. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/reference_recovery.py +0 -0
  374. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/report.py +0 -0
  375. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/runtime.py +0 -0
  376. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_corpus.py +0 -0
  377. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_export.py +0 -0
  378. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_log.py +0 -0
  379. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_log_render.py +0 -0
  380. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_render.py +0 -0
  381. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_repair.py +0 -0
  382. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_search.py +0 -0
  383. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_target.py +0 -0
  384. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/session_transcript.py +0 -0
  385. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
  386. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  387. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/__init__.py +0 -0
  388. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/api.py +0 -0
  389. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/execute.py +0 -0
  390. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  391. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
  392. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/execute_runner.py +0 -0
  393. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
  394. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  395. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/models.py +0 -0
  396. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/spawn/query.py +0 -0
  397. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  398. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/work_attachment.py +0 -0
  399. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/work_dashboard.py +0 -0
  400. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/work_lifecycle.py +0 -0
  401. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/work_sessions.py +0 -0
  402. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/ops/workspace.py +0 -0
  403. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  404. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/AGENTS.md +0 -0
  405. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/__init__.py +0 -0
  406. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/locking.py +0 -0
  407. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  408. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  409. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  410. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/process_scope/base.py +0 -0
  411. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
  412. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/process_scope/posix.py +0 -0
  413. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
  414. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/terminate.py +0 -0
  415. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/unix_modules.py +0 -0
  416. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/platform/windows_job.py +0 -0
  417. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  418. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/safety/AGENTS.md +0 -0
  419. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/safety/__init__.py +0 -0
  420. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/safety/budget.py +0 -0
  421. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/safety/guardrails.py +0 -0
  422. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/safety/permissions.py +0 -0
  423. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/safety/redaction.py +0 -0
  424. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/service_context.py +0 -0
  425. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  426. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/spawn/AGENTS.md +0 -0
  427. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/spawn/__init__.py +0 -0
  428. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/spawn/archive.py +0 -0
  429. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/.context/CONTEXT.md +0 -0
  430. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/AGENTS.md +0 -0
  431. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/__init__.py +0 -0
  432. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/artifact_store.py +0 -0
  433. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/atomic.py +0 -0
  434. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/event_store.py +0 -0
  435. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/history.py +0 -0
  436. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/launch_boundary.py +0 -0
  437. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/liveness.py +0 -0
  438. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/managed_primary.py +0 -0
  439. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/paths.py +0 -0
  440. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/primary_meta.py +0 -0
  441. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/process_scope_projection.py +0 -0
  442. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/reaper.py +0 -0
  443. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/runtime_root.py +0 -0
  444. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/session_store.py +0 -0
  445. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  446. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  447. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn/__init__.py +0 -0
  448. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn/model.py +0 -0
  449. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn/repository.py +0 -0
  450. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  451. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn/transitions.py +0 -0
  452. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/spawn_store.py +0 -0
  453. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/user_paths.py +0 -0
  454. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/wordgen.py +0 -0
  455. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/state/wordlists.py +0 -0
  456. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/.context/CONTEXT.md +0 -0
  457. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/AGENTS.md +0 -0
  458. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/__init__.py +0 -0
  459. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/control_socket.py +0 -0
  460. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/disk_watcher.py +0 -0
  461. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/drain_policy.py +0 -0
  462. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/drain_wait.py +0 -0
  463. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/event_observers.py +0 -0
  464. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/heartbeat.py +0 -0
  465. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/pi_drain.py +0 -0
  466. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/pi_process_cleanup.py +0 -0
  467. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/pi_quiescence.py +0 -0
  468. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/pi_subspawn_tracker.py +0 -0
  469. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/signal_canceller.py +0 -0
  470. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/spawn_dispatch.py +0 -0
  471. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/spawn_drain_loop.py +0 -0
  472. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/spawn_manager.py +0 -0
  473. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/spawn_session.py +0 -0
  474. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/streaming/types.py +0 -0
  475. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/__init__.py +0 -0
  476. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  477. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/correlation.py +0 -0
  478. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/events.py +0 -0
  479. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/init.py +0 -0
  480. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  481. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/maintenance.py +0 -0
  482. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/observer.py +0 -0
  483. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/observers.py +0 -0
  484. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/query.py +0 -0
  485. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/reader.py +0 -0
  486. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/retention.py +0 -0
  487. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/router.py +0 -0
  488. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/sinks.py +0 -0
  489. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/telemetry/status.py +0 -0
  490. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/tools.py +0 -0
  491. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/utils/__init__.py +0 -0
  492. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/lib/utils/time.py +0 -0
  493. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
  494. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/README.md +0 -0
  495. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/__init__.py +0 -0
  496. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +0 -0
  497. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +0 -0
  498. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
  499. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
  500. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +0 -0
  501. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +0 -0
  502. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  503. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
  504. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +0 -0
  505. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
  506. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
  507. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
  508. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
  509. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
  510. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
  511. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
  512. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +0 -0
  513. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
  514. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
  515. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
  516. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
  517. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/package.json +0 -0
  518. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  519. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
  520. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
  521. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/pi_runtime/vitest.config.ts +0 -0
  522. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/plugin_api/AGENTS.md +0 -0
  523. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/plugin_api/__init__.py +0 -0
  524. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/plugin_api/config.py +0 -0
  525. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/plugin_api/fs.py +0 -0
  526. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/plugin_api/git.py +0 -0
  527. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/plugin_api/state.py +0 -0
  528. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/plugin_api/types.py +0 -0
  529. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/py.typed +0 -0
  530. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/server/AGENTS.md +0 -0
  531. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/src/meridian/server/__init__.py +0 -0
  532. {meridian_cli-0.2.18 → meridian_cli-0.2.20}/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.18
3
+ Version: 0.2.20
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
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.2.18"
5
+ __version__ = "0.2.20"
@@ -599,6 +599,7 @@ def _run_primary_launch(
599
599
 
600
600
  emit(
601
601
  primary_launch.run_primary_launch(
602
+ project_root=get_global_options().project_root,
602
603
  continue_ref=continue_ref,
603
604
  fork_ref=fork_ref,
604
605
  fork_fresh_ref=fork_fresh_ref,
@@ -14,11 +14,9 @@ from meridian.lib.core.util import FormatContext
14
14
  from meridian.lib.harness.registry import get_default_harness_registry
15
15
  from meridian.lib.launch import LaunchRequest, SessionMode, launch_primary
16
16
  from meridian.lib.launch.composition import PromptDocument
17
- from meridian.lib.launch.reference import validate_reference_paths
18
17
  from meridian.lib.launch.request import SessionRequest
19
18
  from meridian.lib.ops.reference import resolve_session_reference
20
19
  from meridian.lib.ops.spawn.models import normalize_goal
21
- from meridian.lib.state.paths import resolve_kb_dir
22
20
 
23
21
 
24
22
  class PrimaryLaunchOutput(BaseModel):
@@ -314,14 +312,6 @@ def run_primary_launch(
314
312
  if requested_work_id is None and resolved_fork.source_work_id is not None:
315
313
  requested_work_id = resolved_fork.source_work_id
316
314
 
317
- validated_reference_files = tuple(
318
- path.as_posix()
319
- for path in validate_reference_paths(
320
- reference_files,
321
- reference_anchor=project_root,
322
- kb_dir=resolve_kb_dir(project_root),
323
- )
324
- )
325
315
  resolved_goal = normalize_goal(goal)
326
316
 
327
317
  launch_result = launch_primary(
@@ -341,7 +331,7 @@ def run_primary_launch(
341
331
  supplemental_prompt_documents=supplemental_prompt_documents,
342
332
  include_bootstrap_documents=include_bootstrap_documents,
343
333
  context_from=fork_resolution.resolved_context_from,
344
- reference_files=validated_reference_files,
334
+ reference_files=reference_files,
345
335
  prompt=prompt,
346
336
  skills=skills,
347
337
  goal=resolved_goal,
@@ -104,6 +104,20 @@ For `replace`, the entire section from the higher-precedence file wins.
104
104
  use `structlog` here. The launch diagnostic boundary (`capture_library_diagnostics()`)
105
105
  captures stdlib warnings during spawn; structlog bypasses it and leaks to stderr.
106
106
 
107
+ ## Launch-Time Harness Profile Resolution
108
+
109
+ Some harness profile fields are resolved at launch time rather than at config load
110
+ time. These follow the same pattern: ambient config snapshot → launch-time env override:
111
+
112
+ - `resolve_pi_harness_profile_for_launch()` — resolves `[harness.pi]` (managed bash,
113
+ load_all_extensions, background_tasks, spawn_watch)
114
+ - `resolve_claude_allow_builtin_agents_for_launch()` — resolves
115
+ `[harness.claude] allow_builtin_agents` from the launch config snapshot, falling
116
+ back to `load_config()` if the snapshot is absent or invalid
117
+
118
+ Both are called from `bind_launch_context()` in `lib/launch/context.py` and threaded
119
+ into the harness adapter's `resolve_launch_spec()`.
120
+
107
121
  ## Schema Metadata (`schema.py`)
108
122
 
109
123
  `config_field(canonical_key, value_kind=..., file_aliases=..., env_vars=...)` attaches
@@ -62,6 +62,18 @@ and formatting. Use `preserving_edit.py` when editing config programmatically.
62
62
  - `context_config.py` — `ContextConfig`, `ContextSourceType`: context path schema
63
63
  - `catalog.py` — `build_option_catalog()`: introspects `MeridianConfig` for CLI/docs
64
64
 
65
+ ### Harness Profile Config Settings
66
+
67
+ Per-harness profile configs under `HarnessConfig` expose TOML-settable fields. The
68
+ Claude profile includes:
69
+
70
+ - `[harness.claude] model` — default model (string, env: `MERIDIAN_HARNESS_MODEL_CLAUDE`)
71
+ - `[harness.claude] wait_yield_seconds` — polling interval (float, env:
72
+ `MERIDIAN_HARNESS_WAIT_YIELD_SECONDS_CLAUDE`)
73
+ - `[harness.claude] allow_builtin_agents` — whether to permit Claude's built-in
74
+ subagents (Explore, Plan, general-purpose). Default `false` — Meridian denies them
75
+ so sessions use custom Meridian agents exclusively. Set `true` to opt out.
76
+
65
77
  ## Depth
66
78
 
67
79
  → [.context/CONTEXT.md](.context/CONTEXT.md) — ContextVar thread-local pattern,
@@ -345,6 +345,15 @@ def _normalize_harness_table(
345
345
  )
346
346
  harness_values["wait_yield_seconds"] = float(harness_value)
347
347
  continue
348
+ if key == "claude" and harness_key == "allow_builtin_agents":
349
+ if not isinstance(harness_value, bool):
350
+ raise ValueError(
351
+ f"Invalid value for '{source}.{key}.allow_builtin_agents': "
352
+ f"expected bool, got "
353
+ f"{type(harness_value).__name__} ({harness_value!r})."
354
+ )
355
+ harness_values["allow_builtin_agents"] = harness_value
356
+ continue
348
357
  if key == "pi" and harness_key == "disable_managed_bash":
349
358
  if not isinstance(harness_value, bool):
350
359
  raise ValueError(
@@ -425,6 +434,9 @@ def _normalize_spawn_table(raw_value: object, *, source: str) -> dict[str, objec
425
434
 
426
435
  values: dict[str, object] = {}
427
436
  for key, value in cast("dict[str, object]", raw_value).items():
437
+ if key == "deny_headless_harnesses":
438
+ values[key] = _parse_toml_list(raw_value=value, source=f"{source}.{key}")
439
+ continue
428
440
  if key not in {"default_wait_yield_seconds", "min_wait_yield_seconds"}:
429
441
  logger.warning("Ignoring unknown Meridian config key '%s.%s'.", source, key)
430
442
  continue
@@ -1154,6 +1166,7 @@ class HarnessProfileConfig(BaseModel):
1154
1166
 
1155
1167
 
1156
1168
  class ClaudeHarnessProfileConfig(HarnessProfileConfig):
1169
+ allow_builtin_agents: bool = False
1157
1170
  model: Annotated[
1158
1171
  str,
1159
1172
  config_field(
@@ -1354,6 +1367,14 @@ class MeridianConfig(BaseSettings):
1354
1367
  env_vars=("MERIDIAN_MIN_WAIT_YIELD_SECONDS",),
1355
1368
  ),
1356
1369
  ] = 30.0
1370
+ deny_headless_harnesses: Annotated[
1371
+ tuple[str, ...],
1372
+ config_field(
1373
+ "spawn.deny_headless_harnesses",
1374
+ value_kind="str_list",
1375
+ file_aliases=(file_alias("spawn", "deny_headless_harnesses"),),
1376
+ ),
1377
+ ] = ()
1357
1378
  harness: HarnessConfig = Field(default_factory=HarnessConfig)
1358
1379
  primary: PrimaryConfig = Field(default_factory=PrimaryConfig)
1359
1380
  output: OutputConfig = Field(default_factory=OutputConfig)
@@ -1560,6 +1581,23 @@ def resolve_pi_harness_profile_for_launch(
1560
1581
  )
1561
1582
 
1562
1583
 
1584
+ def resolve_claude_allow_builtin_agents_for_launch(
1585
+ *,
1586
+ config_snapshot: dict[str, object] | None,
1587
+ project_root: Path,
1588
+ ) -> bool:
1589
+ """Resolve ``[harness.claude].allow_builtin_agents`` from a launch config snapshot."""
1590
+
1591
+ if config_snapshot:
1592
+ try:
1593
+ return bool(
1594
+ MeridianConfig.model_validate(config_snapshot).harness.claude.allow_builtin_agents
1595
+ )
1596
+ except Exception:
1597
+ pass
1598
+ return bool(load_config(project_root).harness.claude.allow_builtin_agents)
1599
+
1600
+
1563
1601
  def resolve_pi_disable_managed_bash() -> bool:
1564
1602
  """Resolve whether Meridian should skip Pi's managed bash extension."""
1565
1603
 
@@ -38,6 +38,10 @@ for streaming app server and `meridian chat`.
38
38
  Per-harness mapping:
39
39
  - Claude subprocess: `claude -p --output-format stream-json --verbose -`
40
40
  - Claude connection: `claude -p --input-format stream-json --output-format stream-json --verbose` (stdin/stdout NDJSON, not WebSocket despite `claude_ws.py` name)
41
+ - **Claude built-in agent denial**: Meridian injects `--disallowedTools
42
+ Agent(Explore),Agent(Plan),Agent(general-purpose)` by default. Gated by
43
+ `[harness.claude] allow_builtin_agents` (bool, default `false`). The denials
44
+ merge into permission-derived `--disallowedTools` via `dedupe_nonempty()`.
41
45
  - Codex subprocess: `codex exec --json`; connection: `codex app-server` (real WebSocket, JSON-RPC 2.0)
42
46
  - OpenCode subprocess: `opencode run`; connection: `opencode serve` (HTTP+SSE)
43
47
  - Cursor subprocess: `cursor agent <prompt>` (stdout NDJSON, no connection path — subprocess-only)
@@ -184,6 +188,26 @@ it's captured. This is the minimum-intrusive mechanism for an otherwise unobserv
184
188
  value. Windows does not support PTY — Claude primary uses a fallback detection path
185
189
  (`session_detection.py`) on Windows.
186
190
 
191
+ ### Claude: Built-in Subagent Denial
192
+
193
+ Claude Code ships with three built-in subagents: Explore, Plan, and general-purpose.
194
+ These conflict with Meridian's own agent system. Meridian injects
195
+ `--disallowedTools Agent(Explore),Agent(Plan),Agent(general-purpose)` by default
196
+ so Claude sessions use custom Meridian agents exclusively. The behavior is gated by
197
+ `[harness.claude] allow_builtin_agents` (bool, default `false`).
198
+
199
+ The flag is resolved in `bind_launch_context()` via
200
+ `resolve_claude_allow_builtin_agents_for_launch()`, threaded through
201
+ `SpawnParams.claude_allow_builtin_agents` → `ResolvedLaunchSpec.disallowed_tools`,
202
+ and projected by `project_claude.py`. The builtin denials merge into
203
+ permission-derived `--disallowedTools` so exactly one flag is emitted.
204
+
205
+ This is implemented as a Meridian platform policy (harness adapter injection),
206
+ not as a per-agent `disallowed-tools` field. This means individual agent profiles
207
+ no longer need to carry deny entries like
208
+ `disallowed-tools: [Agent(Explore), Agent(Plan), Agent(general-purpose)]` —
209
+ they're inherited from the harness adapter.
210
+
187
211
  ### Claude: System-Prompt File Channel
188
212
 
189
213
  `--append-system-prompt-file <path>` avoids `ARG_MAX` limits when skills and profile
@@ -37,6 +37,12 @@ streaming and `meridian chat`.
37
37
  Per-harness commands:
38
38
  - Claude subprocess: `claude -p --output-format stream-json --verbose -`
39
39
  - Claude connection: stdin/stdout NDJSON (not WebSocket despite `claude_ws.py` name)
40
+ - **Claude built-in agent denial**: Meridian injects
41
+ `--disallowedTools Agent(Explore),Agent(Plan),Agent(general-purpose)` by default
42
+ so sessions use custom Meridian agents instead of Claude's built-in subagents.
43
+ Gated by `[harness.claude] allow_builtin_agents` (bool, default `false`).
44
+ The builtin denials merge into permission-derived `--disallowedTools` via
45
+ `dedupe_nonempty()` so exactly one flag is emitted.
40
46
  - Codex subprocess: `codex exec --json`; connection: `codex app-server` (real WebSocket, JSON-RPC 2.0)
41
47
  - OpenCode subprocess: `opencode run`; connection: `opencode serve` (HTTP+SSE)
42
48
  - Cursor subprocess: `cursor agent <prompt>` (stdout NDJSON, no connection path — subprocess-only)
@@ -77,6 +83,8 @@ unique — always check `event.harness_id`. `turn/completed` is Codex; OpenCode
77
83
  Source of truth for what every adapter must implement.
78
84
  - `registry.py` — `HarnessRegistry`, `with_defaults()`. The global singleton.
79
85
  - `claude.py` / `codex.py` / `opencode.py` / `cursor.py` — concrete adapter implementations.
86
+ Claude adapter now threads `claude_allow_builtin_agents` from config → SpawnParams →
87
+ `ResolvedLaunchSpec.disallowed_tools`, mirroring the `pi.disable_managed_bash` pattern.
80
88
  - `__init__.py` — `HARNESS_EXTENSION_TOUCHPOINTS` and `ensure_bootstrap()`.
81
89
  Read before adding a harness — lists every file that must be touched.
82
90
  - `semantics.py` — `terminal_outcome()`, `activity_transition()`, `clears_signal()`.
@@ -237,6 +237,7 @@ class SpawnParams(BaseModel):
237
237
  context_from_payload: tuple[str, ...] = ()
238
238
  reference_items: tuple[Any, ...] = ()
239
239
  pi_harness_profile: PiHarnessProfileConfig | None = None
240
+ claude_allow_builtin_agents: bool = False
240
241
 
241
242
 
242
243
  class McpConfig(BaseModel):
@@ -265,6 +265,7 @@ class ClaudeAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
265
265
  "mcp_tools",
266
266
  "projected_roots",
267
267
  "user_turn_content",
268
+ "claude_allow_builtin_agents",
268
269
  }
269
270
  )
270
271
  _EXPLICITLY_IGNORED_FIELDS: ClassVar[frozenset[str]] = frozenset(
@@ -374,6 +375,9 @@ class ClaudeAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
374
375
  prompt_file_path = str(Path(run.control_root) / "system-prompt.md")
375
376
  # Extract user_turn_content from run params if available
376
377
  user_turn_content = getattr(run, "user_turn_content", None)
378
+ disallowed_tools: tuple[str, ...] = ()
379
+ if not run.claude_allow_builtin_agents:
380
+ disallowed_tools = ("Agent(Explore),Agent(Plan),Agent(general-purpose)",)
377
381
  return ResolvedLaunchSpec(
378
382
  harness=HarnessId.CLAUDE,
379
383
  model=str(run.model).strip() if run.model else None,
@@ -391,6 +395,7 @@ class ClaudeAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
391
395
  agent_name=run.agent,
392
396
  prompt_file_path=prompt_file_path,
393
397
  user_turn_content=user_turn_content,
398
+ disallowed_tools=disallowed_tools,
394
399
  )
395
400
 
396
401
  def preflight(
@@ -286,6 +286,7 @@ class CodexAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
286
286
  "reference_items",
287
287
  "task_cwd",
288
288
  "pi_harness_profile",
289
+ "claude_allow_builtin_agents",
289
290
  }
290
291
  )
291
292
 
@@ -75,6 +75,7 @@ class CursorAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
75
75
  "continue_fork",
76
76
  "effort",
77
77
  "pi_harness_profile",
78
+ "claude_allow_builtin_agents",
78
79
  }
79
80
  )
80
81
 
@@ -350,6 +350,7 @@ class OpenCodeAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
350
350
  "reference_items",
351
351
  "task_cwd",
352
352
  "pi_harness_profile",
353
+ "claude_allow_builtin_agents",
353
354
  }
354
355
  )
355
356
 
@@ -42,13 +42,16 @@ def _require_observer_endpoint_url(
42
42
  def _build_codex_attach_command(
43
43
  session_id: str,
44
44
  ws_url: str,
45
+ prompt: str | None,
45
46
  projected_roots: tuple[Path, ...],
46
47
  ) -> tuple[str, ...]:
47
- """Build `codex resume {session_id} --remote {ws_url}`."""
48
+ """Build `codex resume {session_id} --remote {ws_url} [prompt]`."""
48
49
 
49
50
  command = ["codex", "resume", session_id, "--remote", ws_url]
50
51
  for root in projected_roots:
51
52
  command.extend(("--add-dir", root.as_posix()))
53
+ if prompt and prompt.strip():
54
+ command.append(prompt)
52
55
  return tuple(command)
53
56
 
54
57
 
@@ -85,6 +88,7 @@ class CodexPassthrough:
85
88
  return lambda session_id: _build_codex_attach_command(
86
89
  session_id=session_id,
87
90
  ws_url=_require_observer_endpoint_url(connection, transport="ws"),
91
+ prompt=spec.user_turn_content,
88
92
  projected_roots=spec.projected_roots,
89
93
  )
90
94
 
@@ -116,6 +116,7 @@ class PiAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
116
116
  "context_from_payload",
117
117
  "reference_items",
118
118
  "task_cwd",
119
+ "claude_allow_builtin_agents",
119
120
  }
120
121
  )
121
122
 
@@ -33,6 +33,7 @@ _PROJECTED_FIELDS: frozenset[str] = frozenset(
33
33
  "prompt",
34
34
  "prompt_file_path",
35
35
  "user_turn_content",
36
+ "disallowed_tools",
36
37
  }
37
38
  )
38
39
 
@@ -179,6 +180,10 @@ def project_claude_spec_to_cli_args(
179
180
 
180
181
  permission_flags = resolve_permission_flags(spec.permission_resolver, HarnessId.CLAUDE)
181
182
  permission_tail, allowed_tools, disallowed_tools = _extract_claude_tool_flags(permission_flags)
183
+ spec_disallowed: list[str] = []
184
+ for entry in spec.disallowed_tools:
185
+ spec_disallowed.extend(split_csv_entries(entry))
186
+ disallowed_tools = dedupe_nonempty((*disallowed_tools, *spec_disallowed))
182
187
  allowed_tools = dedupe_nonempty((*allowed_tools, *parent_allowed_tools))
183
188
  command.extend(permission_tail)
184
189
  if allowed_tools:
@@ -75,6 +75,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
75
75
  "harness",
76
76
  "pi_extension_entrypoints",
77
77
  "load_all_pi_extensions",
78
+ "disallowed_tools",
78
79
  "prompt_file_path",
79
80
  "reference_items",
80
81
  "skills",
@@ -43,6 +43,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
43
43
  "harness",
44
44
  "pi_extension_entrypoints",
45
45
  "load_all_pi_extensions",
46
+ "disallowed_tools",
46
47
  "prompt_file_path",
47
48
  "reference_items",
48
49
  "skills",
@@ -43,6 +43,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
43
43
  "reference_items",
44
44
  "pi_extension_entrypoints",
45
45
  "load_all_pi_extensions",
46
+ "disallowed_tools",
46
47
  }
47
48
  )
48
49
 
@@ -50,6 +50,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
50
50
  "harness",
51
51
  "pi_extension_entrypoints",
52
52
  "load_all_pi_extensions",
53
+ "disallowed_tools",
53
54
  "prompt_file_path",
54
55
  "report_output_path",
55
56
  "task_cwd",
@@ -42,6 +42,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
42
42
  "harness",
43
43
  "pi_extension_entrypoints",
44
44
  "load_all_pi_extensions",
45
+ "disallowed_tools",
45
46
  "prompt_file_path",
46
47
  "reference_items",
47
48
  "report_output_path",
@@ -45,6 +45,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
45
45
  "mcp_tools",
46
46
  "projected_roots",
47
47
  "task_cwd",
48
+ "disallowed_tools",
48
49
  }
49
50
  )
50
51
 
@@ -46,6 +46,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
46
46
  "skills",
47
47
  "reference_items",
48
48
  "task_cwd",
49
+ "disallowed_tools",
49
50
  }
50
51
  )
51
52
 
@@ -38,6 +38,12 @@ bind_launch_context() ← env, cwd, spec, argv, permissions
38
38
  LaunchContext ← complete at construction; ready to run
39
39
  ```
40
40
 
41
+ Before callers enter this pipeline, they must resolve the shared launch-input
42
+ surface with `resolution.py:resolve_launch_inputs()`. That seam owns work
43
+ precedence, `--from` work inheritance, task cwd selection, reference anchoring,
44
+ and `-f` validation. Primary and spawn may differ in prompt/session projection,
45
+ but they should not hand-roll directory or reference resolution.
46
+
41
47
  **Why the split?** The primary CLI path calls `bind_launch_context()` twice: once
42
48
  with `dry_run=True` for `--dry-run` display, then again with real spawn ID and paths.
43
49
  `prepare_launch_surface()` is expensive and safe to call once. `bind_launch_context()`
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
  from typing import TYPE_CHECKING, Any
7
7
 
8
8
  from meridian.lib.launch.launch_types import summarize_composition_warnings
9
+ from meridian.lib.launch.resolution import resolve_launch_inputs
9
10
  from meridian.lib.state import work_store
10
11
  from meridian.lib.state.paths import resolve_project_paths, resolve_work_scratch_dir_for_project
11
12
 
@@ -78,7 +79,9 @@ def launch_primary(
78
79
  """Launch the primary agent process and wait for exit."""
79
80
 
80
81
  from meridian.lib.catalog.catalog_session import CatalogSession
82
+ from meridian.lib.config.project_root import resolve_project_root_resolution
81
83
  from meridian.lib.core.context import resolve_runtime_context
84
+ from meridian.lib.ops.runtime import resolve_runtime_root_for_read
82
85
 
83
86
  from .context import (
84
87
  RuntimeBindings,
@@ -90,11 +93,31 @@ def launch_primary(
90
93
  from .process import run_harness_process
91
94
  from .types import LaunchResult
92
95
 
93
- runtime = build_primary_launch_runtime(project_root=project_root, execution_cwd=project_root)
96
+ resolved_project_root = resolve_project_root_resolution(project_root).project_root
97
+ preview_work_id = _preview_work_id_for_launch(request)
98
+ runtime_root_for_context = resolve_runtime_root_for_read(resolved_project_root)
99
+ runtime_context = resolve_runtime_context(
100
+ project_root=resolved_project_root,
101
+ runtime_root=runtime_root_for_context,
102
+ )
103
+ ambient_work_id = None if preview_work_id is not None else runtime_context.work_id
104
+ project_state_dir = resolve_project_paths(resolved_project_root).root_dir
105
+ launch_resolution = resolve_launch_inputs(
106
+ authority_root=resolved_project_root,
107
+ project_state_dir=project_state_dir,
108
+ context_from=request.context_from,
109
+ reference_files=request.reference_files,
110
+ explicit_work_id=preview_work_id,
111
+ ambient_work_id=ambient_work_id,
112
+ )
113
+
114
+ runtime = build_primary_launch_runtime(
115
+ project_root=resolved_project_root,
116
+ execution_cwd=resolved_project_root,
117
+ )
94
118
  if request.include_bootstrap_documents:
95
119
  from meridian.lib.catalog.bootstrap import BootstrapRegistry
96
120
 
97
- resolved_project_root = Path(runtime.resolved_config_root)
98
121
  request = request.model_copy(
99
122
  update={
100
123
  "supplemental_prompt_documents": (
@@ -106,23 +129,24 @@ def launch_primary(
106
129
  resolved_work_id = (
107
130
  _preview_work_id_for_launch(request)
108
131
  if request.dry_run
109
- else _resolve_work_id_for_launch(project_root, request)
132
+ else _resolve_work_id_for_launch(resolved_project_root, request)
110
133
  )
111
134
 
112
- resolved_project_root = Path(runtime.resolved_config_root).expanduser().resolve()
113
- runtime_root = Path(runtime.runtime_root).expanduser().resolve()
135
+ runtime = runtime.model_copy(update=launch_resolution.runtime_updates)
136
+ effective_work_id = resolved_work_id or launch_resolution.effective_work_id
114
137
  active_work_dir = (
115
138
  resolve_work_scratch_dir_for_project(
116
139
  resolved_project_root,
117
- resolved_work_id,
140
+ effective_work_id,
118
141
  )
119
- if resolved_work_id is not None
120
- else resolve_runtime_context(
121
- project_root=resolved_project_root,
122
- runtime_root=runtime_root,
123
- ).work_dir
142
+ if effective_work_id is not None
143
+ else runtime_context.work_dir
144
+ )
145
+ request_updates = dict(launch_resolution.request_updates)
146
+ request_updates["work_id_hint"] = effective_work_id
147
+ spawn_request = build_primary_spawn_request(request=request).model_copy(
148
+ update=request_updates
124
149
  )
125
- spawn_request = build_primary_spawn_request(request=request)
126
150
  prepared_policy = compile_prepared_policy_surface(
127
151
  request=spawn_request,
128
152
  runtime=runtime,
@@ -142,7 +166,7 @@ def launch_primary(
142
166
  bindings=RuntimeBindings(
143
167
  spawn_id="dry-run-primary",
144
168
  report_output_path=Path(runtime.report_output_path or "report.md"),
145
- runtime_work_id=resolved_work_id,
169
+ runtime_work_id=effective_work_id,
146
170
  dry_run=True,
147
171
  ),
148
172
  runtime=runtime,