meridian-cli 0.3.2__tar.gz → 0.3.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 (548) hide show
  1. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/.gitignore +1 -0
  2. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/PKG-INFO +1 -13
  3. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/README.md +0 -12
  4. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/__init__.py +1 -1
  5. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/spawn.py +15 -0
  6. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/settings.py +36 -0
  7. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/child_env.py +1 -1
  8. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/launch_policy_snapshot.py +1 -0
  9. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/spawn_service.py +18 -0
  10. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/.context/CONTEXT.md +7 -6
  11. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/AGENTS.md +17 -3
  12. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_pi_native_tui.py +19 -5
  13. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_pi_rpc.py +19 -5
  14. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/env.py +2 -2
  15. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/policy_snapshot.py +1 -0
  16. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/runner.py +5 -0
  17. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/request.py +1 -0
  18. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/config.py +41 -0
  19. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/api.py +2 -0
  20. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_runner.py +4 -0
  21. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/models.py +3 -0
  22. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/prepare.py +30 -0
  23. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/.context/CONTEXT.md +15 -11
  24. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/AGENTS.md +2 -1
  25. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/.context/CONTEXT.md +23 -3
  26. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/AGENTS.md +8 -6
  27. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/LICENSE +0 -0
  28. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/pyproject.toml +0 -0
  29. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/ag_ui/__init__.pyi +0 -0
  30. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/ag_ui/core.pyi +0 -0
  31. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/AGENTS.md +0 -0
  32. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/__main__.py +0 -0
  33. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/.context/CONTEXT.md +0 -0
  34. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/AGENTS.md +0 -0
  35. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/__init__.py +0 -0
  36. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/_cmd_utils.py +0 -0
  37. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/agent_help.py +0 -0
  38. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/app_tree.py +0 -0
  39. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/argv_normalization.py +0 -0
  40. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/bootstrap.py +0 -0
  41. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/bootstrap_cmd.py +0 -0
  42. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/chat_cmd.py +0 -0
  43. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/config_cmd.py +0 -0
  44. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/doctor_cmd.py +0 -0
  45. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/entrypoint.py +0 -0
  46. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/ext_cmd.py +0 -0
  47. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/ext_registration.py +0 -0
  48. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/hooks_authority.py +0 -0
  49. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/hooks_commands.py +0 -0
  50. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/kg_cmd.py +0 -0
  51. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/main.py +0 -0
  52. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/mars_passthrough.py +0 -0
  53. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/mermaid_cmd.py +0 -0
  54. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/migrate_cmd.py +0 -0
  55. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/misc_commands.py +0 -0
  56. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/models_cmd.py +0 -0
  57. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/output.py +0 -0
  58. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/primary_launch.py +0 -0
  59. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/qi_cmd.py +0 -0
  60. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/report_cmd.py +0 -0
  61. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/session_cmd.py +0 -0
  62. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/spawn_inject.py +0 -0
  63. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/__init__.py +0 -0
  64. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/catalog.py +0 -0
  65. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/classify.py +0 -0
  66. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  67. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/help.py +0 -0
  68. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  69. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/policy.py +0 -0
  70. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/streaming_serve.py +0 -0
  71. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/sync_cmd.py +0 -0
  72. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/telemetry_cmd.py +0 -0
  73. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/utils.py +0 -0
  74. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/work_cmd.py +0 -0
  75. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/workspace_cmd.py +0 -0
  76. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/dev/AGENTS.md +0 -0
  77. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/dev/__init__.py +0 -0
  78. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/dev/pytests.py +0 -0
  79. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/__init__.py +0 -0
  80. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  81. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  82. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/__init__.py +0 -0
  83. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/config.py +0 -0
  84. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/project_state.py +0 -0
  85. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  86. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/services.py +0 -0
  87. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  88. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/AGENTS.md +0 -0
  89. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/__init__.py +0 -0
  90. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/agent.py +0 -0
  91. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/bootstrap.py +0 -0
  92. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/catalog_session.py +0 -0
  93. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/model_aliases.py +0 -0
  94. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/models.py +0 -0
  95. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/skill.py +0 -0
  96. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  97. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/AGENTS.md +0 -0
  98. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/__init__.py +0 -0
  99. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  100. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/backend_handle.py +0 -0
  101. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/checkpoint.py +0 -0
  102. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/command_handler.py +0 -0
  103. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/command_invariants.py +0 -0
  104. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/commands.py +0 -0
  105. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  106. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  107. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  108. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  109. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  110. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  111. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  112. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  113. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  114. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_index.py +0 -0
  115. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_log.py +0 -0
  116. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_observer.py +0 -0
  117. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_pipeline.py +0 -0
  118. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/frontend.py +0 -0
  119. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  120. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  121. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  122. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/base.py +0 -0
  123. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/claude.py +0 -0
  124. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/codex.py +0 -0
  125. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/common.py +0 -0
  126. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  127. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/registry.py +0 -0
  128. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  129. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/policy.py +0 -0
  130. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/protocol.py +0 -0
  131. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/recovery.py +0 -0
  132. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/replay.py +0 -0
  133. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/runtime.py +0 -0
  134. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/server.py +0 -0
  135. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/session_service.py +0 -0
  136. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/ws_fanout.py +0 -0
  137. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
  138. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/AGENTS.md +0 -0
  139. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/__init__.py +0 -0
  140. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/catalog.py +0 -0
  141. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/context_config.py +0 -0
  142. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/preserving_edit.py +0 -0
  143. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/project_config_state.py +0 -0
  144. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/project_paths.py +0 -0
  145. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/project_root.py +0 -0
  146. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/schema.py +0 -0
  147. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/workspace.py +0 -0
  148. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  149. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/AGENTS.md +0 -0
  150. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/__init__.py +0 -0
  151. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/resolver.py +0 -0
  152. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
  153. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/AGENTS.md +0 -0
  154. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/__init__.py +0 -0
  155. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/clock.py +0 -0
  156. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/codec.py +0 -0
  157. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/command_strings.py +0 -0
  158. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/context.py +0 -0
  159. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/conversation.py +0 -0
  160. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/depth.py +0 -0
  161. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/domain.py +0 -0
  162. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/execution_policy.py +0 -0
  163. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/formatting.py +0 -0
  164. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/lifecycle.py +0 -0
  165. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/logging.py +0 -0
  166. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/overrides.py +0 -0
  167. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/process_cleanup.py +0 -0
  168. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/resolved_context.py +0 -0
  169. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/sink.py +0 -0
  170. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
  171. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/spawn_start.py +0 -0
  172. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/telemetry.py +0 -0
  173. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/types.py +0 -0
  174. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/util.py +0 -0
  175. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/diagnostics.py +0 -0
  176. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  177. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/AGENTS.md +0 -0
  178. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/__init__.py +0 -0
  179. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  180. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  181. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  182. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  183. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  184. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  185. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  186. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/context.py +0 -0
  187. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/descriptors.py +0 -0
  188. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/dispatcher.py +0 -0
  189. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/first_party.py +0 -0
  190. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/observability.py +0 -0
  191. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/registry.py +0 -0
  192. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/types.py +0 -0
  193. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
  194. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/AGENTS.md +0 -0
  195. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/__init__.py +0 -0
  196. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/adapter.py +0 -0
  197. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/bundle.py +0 -0
  198. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/claude.py +0 -0
  199. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/claude_preflight.py +0 -0
  200. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/claude_utils.py +0 -0
  201. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/codex.py +0 -0
  202. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/codex_rollout.py +0 -0
  203. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/common.py +0 -0
  204. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/__init__.py +0 -0
  205. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/base.py +0 -0
  206. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
  207. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/codex_ws.py +0 -0
  208. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  209. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/errors.py +0 -0
  210. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/liveness.py +0 -0
  211. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/managed_backend.py +0 -0
  212. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
  213. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
  214. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/resident_backend.py +0 -0
  215. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/control_action.py +0 -0
  216. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/cost.py +0 -0
  217. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/cursor.py +0 -0
  218. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/errors.py +0 -0
  219. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractor.py +0 -0
  220. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  221. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  222. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  223. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/base.py +0 -0
  224. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/claude.py +0 -0
  225. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/codex.py +0 -0
  226. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  227. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  228. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/pi.py +0 -0
  229. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/launch_spec.py +0 -0
  230. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/launch_types.py +0 -0
  231. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/opencode.py +0 -0
  232. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/opencode_storage.py +0 -0
  233. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  234. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  235. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  236. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  237. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/base.py +0 -0
  238. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  239. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/codex.py +0 -0
  240. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  241. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  242. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/permission_broker.py +0 -0
  243. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi.py +0 -0
  244. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
  245. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi_paths.py +0 -0
  246. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  247. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
  248. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  249. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/__init__.py +0 -0
  250. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/_guards.py +0 -0
  251. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  252. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  253. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_claude.py +0 -0
  254. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  255. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
  256. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
  257. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
  258. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
  259. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
  260. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  261. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/registry.py +0 -0
  262. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/semantics.py +0 -0
  263. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/session_detection.py +0 -0
  264. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/transcript.py +0 -0
  265. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  266. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/AGENTS.md +0 -0
  267. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/__init__.py +0 -0
  268. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  269. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  270. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  271. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  272. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/base.py +0 -0
  273. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  274. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  275. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/config.py +0 -0
  276. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/dispatch.py +0 -0
  277. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/interval.py +0 -0
  278. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/registry.py +0 -0
  279. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/runner.py +0 -0
  280. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/types.py +0 -0
  281. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ignores.py +0 -0
  282. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  283. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/AGENTS.md +0 -0
  284. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/__init__.py +0 -0
  285. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/graph.py +0 -0
  286. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/report.py +0 -0
  287. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/serializer.py +0 -0
  288. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/types.py +0 -0
  289. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
  290. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/AGENTS.md +0 -0
  291. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/__init__.py +0 -0
  292. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/artifact_io.py +0 -0
  293. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  294. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/claude_session_access.py +0 -0
  295. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/command.py +0 -0
  296. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/compiler.py +0 -0
  297. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/composition.py +0 -0
  298. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/composition_spawn.py +0 -0
  299. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/constants.py +0 -0
  300. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/context.py +0 -0
  301. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/cwd.py +0 -0
  302. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/errors.py +0 -0
  303. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/extract.py +0 -0
  304. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/fork.py +0 -0
  305. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/launch_types.py +0 -0
  306. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/materialize.py +0 -0
  307. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/permissions.py +0 -0
  308. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/plan.py +0 -0
  309. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/policies.py +0 -0
  310. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  311. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  312. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/__init__.py +0 -0
  313. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/ports.py +0 -0
  314. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/primary_attach.py +0 -0
  315. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  316. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/session.py +0 -0
  317. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
  318. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  319. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/prompt.py +0 -0
  320. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/prompt_context.py +0 -0
  321. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/reference.py +0 -0
  322. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/report.py +0 -0
  323. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/resolution.py +0 -0
  324. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/resolve.py +0 -0
  325. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/run_inputs.py +0 -0
  326. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/runner_helpers.py +0 -0
  327. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/session_scope.py +0 -0
  328. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/signals.py +0 -0
  329. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  330. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  331. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  332. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  333. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  334. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming_runner.py +0 -0
  335. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/text_utils.py +0 -0
  336. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/types.py +0 -0
  337. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/workspace.py +0 -0
  338. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/workspace_projection.py +0 -0
  339. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/written_files.py +0 -0
  340. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  341. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/AGENTS.md +0 -0
  342. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/__init__.py +0 -0
  343. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/extract.py +0 -0
  344. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/types.py +0 -0
  345. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  346. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  347. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/__init__.py +0 -0
  348. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/report.py +0 -0
  349. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/scanner.py +0 -0
  350. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/serializer.py +0 -0
  351. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  352. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  353. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  354. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  355. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  356. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  357. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  358. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  359. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  360. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/types.py +0 -0
  361. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/validator.py +0 -0
  362. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  363. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/AGENTS.md +0 -0
  364. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/__init__.py +0 -0
  365. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/debug_tracer.py +0 -0
  366. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/trace_helpers.py +0 -0
  367. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
  368. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/AGENTS.md +0 -0
  369. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/__init__.py +0 -0
  370. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/catalog.py +0 -0
  371. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/commands.py +0 -0
  372. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/config_surface.py +0 -0
  373. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/context.py +0 -0
  374. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/diag.py +0 -0
  375. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/hooks.py +0 -0
  376. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/init_ops.py +0 -0
  377. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/mars.py +0 -0
  378. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/migration.py +0 -0
  379. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/pruning.py +0 -0
  380. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/qi.py +0 -0
  381. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/reference.py +0 -0
  382. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/reference_recovery.py +0 -0
  383. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/report.py +0 -0
  384. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/runtime.py +0 -0
  385. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_corpus.py +0 -0
  386. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_export.py +0 -0
  387. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_log.py +0 -0
  388. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_log_render.py +0 -0
  389. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_render.py +0 -0
  390. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_repair.py +0 -0
  391. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_search.py +0 -0
  392. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_target.py +0 -0
  393. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_transcript.py +0 -0
  394. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
  395. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  396. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/__init__.py +0 -0
  397. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
  398. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute.py +0 -0
  399. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  400. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
  401. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
  402. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  403. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/pre_init.py +0 -0
  404. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/query.py +0 -0
  405. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  406. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_attachment.py +0 -0
  407. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_dashboard.py +0 -0
  408. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_lifecycle.py +0 -0
  409. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_sessions.py +0 -0
  410. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/workspace.py +0 -0
  411. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  412. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/AGENTS.md +0 -0
  413. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/__init__.py +0 -0
  414. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/detached_process.py +0 -0
  415. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/locking.py +0 -0
  416. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  417. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  418. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  419. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/base.py +0 -0
  420. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
  421. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/posix.py +0 -0
  422. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
  423. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/terminate.py +0 -0
  424. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/unix_modules.py +0 -0
  425. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  426. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/AGENTS.md +0 -0
  427. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/__init__.py +0 -0
  428. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/budget.py +0 -0
  429. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/guardrails.py +0 -0
  430. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/permissions.py +0 -0
  431. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/redaction.py +0 -0
  432. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/service_context.py +0 -0
  433. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  434. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/AGENTS.md +0 -0
  435. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/__init__.py +0 -0
  436. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/archive.py +0 -0
  437. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/__init__.py +0 -0
  438. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/artifact_store.py +0 -0
  439. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/atomic.py +0 -0
  440. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/event_store.py +0 -0
  441. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/history.py +0 -0
  442. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/launch_boundary.py +0 -0
  443. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/liveness.py +0 -0
  444. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/managed_primary.py +0 -0
  445. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/paths.py +0 -0
  446. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/primary_meta.py +0 -0
  447. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/process_scope_projection.py +0 -0
  448. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/reaper.py +0 -0
  449. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/runtime_root.py +0 -0
  450. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/session_identity.py +0 -0
  451. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/session_store.py +0 -0
  452. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  453. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  454. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/__init__.py +0 -0
  455. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/model.py +0 -0
  456. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/repository.py +0 -0
  457. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  458. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/transitions.py +0 -0
  459. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_report.py +0 -0
  460. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_signals.py +0 -0
  461. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_store.py +0 -0
  462. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_tree.py +0 -0
  463. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/timestamps.py +0 -0
  464. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/user_paths.py +0 -0
  465. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/wordgen.py +0 -0
  466. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/wordlists.py +0 -0
  467. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/work_store.py +0 -0
  468. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/__init__.py +0 -0
  469. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/completion_nudge.py +0 -0
  470. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/control_socket.py +0 -0
  471. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/disk_watcher.py +0 -0
  472. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/drain_coordinator.py +0 -0
  473. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/drain_policy.py +0 -0
  474. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/drain_wait.py +0 -0
  475. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/event_observers.py +0 -0
  476. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/heartbeat.py +0 -0
  477. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_drain.py +0 -0
  478. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_process_cleanup.py +0 -0
  479. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_quiescence.py +0 -0
  480. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_subspawn_tracker.py +0 -0
  481. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/resident_drain.py +0 -0
  482. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/signal_canceller.py +0 -0
  483. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_dispatch.py +0 -0
  484. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_drain_loop.py +0 -0
  485. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_manager.py +0 -0
  486. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_session.py +0 -0
  487. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/types.py +0 -0
  488. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/__init__.py +0 -0
  489. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  490. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/correlation.py +0 -0
  491. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/events.py +0 -0
  492. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/init.py +0 -0
  493. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  494. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/maintenance.py +0 -0
  495. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/observer.py +0 -0
  496. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/observers.py +0 -0
  497. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/query.py +0 -0
  498. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/reader.py +0 -0
  499. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/retention.py +0 -0
  500. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/router.py +0 -0
  501. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/sinks.py +0 -0
  502. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/status.py +0 -0
  503. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/tools.py +0 -0
  504. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/utils/__init__.py +0 -0
  505. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/utils/time.py +0 -0
  506. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
  507. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/README.md +0 -0
  508. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/__init__.py +0 -0
  509. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +0 -0
  510. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +0 -0
  511. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
  512. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
  513. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +0 -0
  514. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +0 -0
  515. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  516. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
  517. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.test.ts +0 -0
  518. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +0 -0
  519. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
  520. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
  521. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
  522. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
  523. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
  524. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
  525. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
  526. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +0 -0
  527. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
  528. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
  529. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
  530. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/spawn_origins.test.ts +0 -0
  531. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/spawn_origins.ts +0 -0
  532. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
  533. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/package.json +0 -0
  534. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  535. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
  536. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
  537. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/vitest.config.ts +0 -0
  538. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/AGENTS.md +0 -0
  539. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/__init__.py +0 -0
  540. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/config.py +0 -0
  541. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/fs.py +0 -0
  542. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/git.py +0 -0
  543. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/state.py +0 -0
  544. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/types.py +0 -0
  545. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/py.typed +0 -0
  546. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/server/AGENTS.md +0 -0
  547. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/server/__init__.py +0 -0
  548. {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/server/main.py +0 -0
@@ -17,6 +17,7 @@ smoke/
17
17
  tmp/
18
18
  .tmp-*/
19
19
  plan/
20
+ temp/
20
21
 
21
22
  .orchestrate/
22
23
  .scratch/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meridian-cli
3
- Version: 0.3.2
3
+ Version: 0.3.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
@@ -54,18 +54,6 @@ Orchestrate AI coding agents across Claude Code, Codex, and OpenCode. Each model
54
54
 
55
55
  > **Early development.** Meridian is not stable. Expect breaking changes in any release. If you need a stable workflow, this project is not ready for you yet.
56
56
 
57
- ## v0.1.0 Migration
58
-
59
- v0.1.0 removes all legacy state format support in the state layer.
60
-
61
- If you are upgrading from any pre-0.1.0 build, run:
62
-
63
- ```bash
64
- rm -rf ~/.meridian
65
- ```
66
-
67
- This is a clean break. There is no automatic migration.
68
-
69
57
  ## Why
70
58
 
71
59
  Claude Code is (supposed to be) the best way to run Claude. Codex CLI is often the best way to run GPT. Each provider's harness is optimized for their models — sandboxing, tool use, context handling, everything (supposedly).
@@ -4,18 +4,6 @@ Orchestrate AI coding agents across Claude Code, Codex, and OpenCode. Each model
4
4
 
5
5
  > **Early development.** Meridian is not stable. Expect breaking changes in any release. If you need a stable workflow, this project is not ready for you yet.
6
6
 
7
- ## v0.1.0 Migration
8
-
9
- v0.1.0 removes all legacy state format support in the state layer.
10
-
11
- If you are upgrading from any pre-0.1.0 build, run:
12
-
13
- ```bash
14
- rm -rf ~/.meridian
15
- ```
16
-
17
- This is a clean break. There is no automatic migration.
18
-
19
7
  ## Why
20
8
 
21
9
  Claude Code is (supposed to be) the best way to run Claude. Codex CLI is often the best way to run GPT. Each provider's harness is optimized for their models — sandboxing, tool use, context handling, everything (supposedly).
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.3.2"
5
+ __version__ = "0.3.4"
@@ -185,6 +185,7 @@ def _shared_launch_input_kwargs(
185
185
  debug: bool,
186
186
  task_ping_interval: str | None,
187
187
  task_ping_reset_on_activity: bool | None,
188
+ env: tuple[str, ...],
188
189
  ) -> SpawnLaunchOptionUpdates:
189
190
  return {
190
191
  "dry_run": dry_run,
@@ -204,6 +205,7 @@ def _shared_launch_input_kwargs(
204
205
  "debug": debug,
205
206
  "task_ping_interval": task_ping_interval,
206
207
  "task_ping_reset_on_activity": task_ping_reset_on_activity,
208
+ "env": env,
207
209
  }
208
210
 
209
211
 
@@ -454,6 +456,18 @@ def _spawn_create(
454
456
  show=False,
455
457
  ),
456
458
  ] = False,
459
+ env: Annotated[
460
+ tuple[str, ...],
461
+ Parameter(
462
+ name="--env",
463
+ help=(
464
+ "Environment variables for the spawned harness "
465
+ "in KEY=VALUE form (repeatable). "
466
+ "Overrides config-level [env] defaults."
467
+ ),
468
+ negative_iterable=(),
469
+ ),
470
+ ] = (),
457
471
  ) -> None:
458
472
  # Passthrough lives on GlobalOptions, not a function parameter — see
459
473
  # _split_passthrough_args() for why cyclopts can't handle ``--`` correctly.
@@ -500,6 +514,7 @@ def _spawn_create(
500
514
  task_ping_interval=task_ping_interval,
501
515
  task_ping_reset_on_activity=task_ping_reset_on_activity,
502
516
  debug=debug,
517
+ env=env,
503
518
  )
504
519
  resolved_prompt = _resolve_spawn_prompt(
505
520
  prompt,
@@ -428,6 +428,23 @@ def _normalize_harness_table(
428
428
  return values
429
429
 
430
430
 
431
+ def _normalize_env_table(raw_value: object, *, source: str) -> dict[str, str]:
432
+ if not isinstance(raw_value, dict):
433
+ raise ValueError(f"Invalid value for '{source}': expected table.")
434
+ values: dict[str, str] = {}
435
+ for raw_key, raw_val in cast("dict[str, object]", raw_value).items():
436
+ key = str(raw_key).strip()
437
+ if not key:
438
+ raise ValueError(f"Invalid value for '{source}': expected non-empty key.")
439
+ if not isinstance(raw_val, str):
440
+ raise ValueError(
441
+ f"Invalid value for '{source}.{key}': expected string, got "
442
+ f"{type(raw_val).__name__} ({raw_val!r})."
443
+ )
444
+ values[key] = raw_val
445
+ return values
446
+
447
+
431
448
  def _normalize_spawn_table(raw_value: object, *, source: str) -> dict[str, object]:
432
449
  if not isinstance(raw_value, dict):
433
450
  raise ValueError(f"Invalid value for '{source}': expected table.")
@@ -766,6 +783,19 @@ DYNAMIC_SECTION_DESCRIPTORS: dict[str, DynamicSectionDescriptor] = {
766
783
  "",
767
784
  ),
768
785
  ),
786
+ "env": DynamicSectionDescriptor(
787
+ section_key="env",
788
+ merge_kind="nested_dict",
789
+ scaffold_lines=(
790
+ "# -- Environment variables passed to spawned harnesses -----------------------",
791
+ "# Flat key-value string map. Applied to every spawn from this project.",
792
+ "# Keys from meridian.local.toml override meridian.toml; project overrides user.",
793
+ "",
794
+ "# [env]",
795
+ '# OPENCODE_ENABLE_EXA = "1"',
796
+ "",
797
+ ),
798
+ ),
769
799
  }
770
800
 
771
801
 
@@ -791,6 +821,8 @@ def normalize_dynamic_sections(
791
821
  source=section_key,
792
822
  project_root=project_root,
793
823
  )
824
+ elif section_key == "env":
825
+ value = _normalize_env_table(raw_value, source=section_key)
794
826
  else:
795
827
  continue
796
828
  if descriptor.merge_kind != "external" and value is not None:
@@ -862,6 +894,9 @@ def _normalize_toml_payload(
862
894
  _normalize_spawn_table(raw_value, source="spawn"),
863
895
  )
864
896
  continue
897
+ if key == "env":
898
+ normalized["env"] = _normalize_env_table(raw_value, source="env")
899
+ continue
865
900
  if key in DYNAMIC_SECTION_DESCRIPTORS:
866
901
  normalized = merge_dynamic_sections(
867
902
  normalized,
@@ -1404,6 +1439,7 @@ class MeridianConfig(BaseSettings):
1404
1439
  output: OutputConfig = Field(default_factory=OutputConfig)
1405
1440
  state: StateConfig = Field(default_factory=StateConfig)
1406
1441
  work: WorkConfig = Field(default_factory=WorkConfig)
1442
+ env: dict[str, str] = Field(default_factory=dict)
1407
1443
 
1408
1444
  @field_validator("default_wait_yield_seconds", "min_wait_yield_seconds")
1409
1445
  @classmethod
@@ -31,7 +31,7 @@ def validate_child_env_keys(overrides: Mapping[str, str]) -> None:
31
31
  :data:`ALLOWED_CHILD_ENV_KEYS`.
32
32
  """
33
33
  for key in overrides:
34
- if not key.startswith("MERIDIAN_"):
34
+ if not key.upper().startswith("MERIDIAN_"):
35
35
  continue
36
36
  if key in ALLOWED_CHILD_ENV_KEYS:
37
37
  continue
@@ -25,6 +25,7 @@ class LaunchPolicySnapshot(BaseModel):
25
25
  skill_paths: tuple[str, ...] = ()
26
26
  loaded_skills: tuple[SkillContent, ...] = ()
27
27
  extra_args: tuple[str, ...] = ()
28
+ env: dict[str, str] = Field(default_factory=dict)
28
29
  execution_policy: ResolvedExecutionPolicy = Field(default_factory=ResolvedExecutionPolicy)
29
30
  tools: ToolsField | None = None
30
31
  mcp_tools: tuple[str, ...] = ()
@@ -76,6 +76,20 @@ _MAX_REAP_PASSES = 4
76
76
  logger = structlog.get_logger()
77
77
 
78
78
 
79
+ def _config_snapshot_env(config_snapshot: dict[str, object]) -> dict[str, str]:
80
+ env = config_snapshot.get("env")
81
+ if isinstance(env, dict):
82
+ result: dict[str, str] = {}
83
+ for k, v in cast("dict[str, object]", env).items():
84
+ if not k.strip():
85
+ continue
86
+ if not isinstance(v, str):
87
+ continue
88
+ result[k] = v
89
+ return result
90
+ return {}
91
+
92
+
79
93
  def _resolve_explicit_timeout_seconds(resolved_request: object) -> float | None:
80
94
  """Extract explicit timeout seconds from resolved request-like objects."""
81
95
 
@@ -360,6 +374,9 @@ class SpawnApplicationService:
360
374
  project_paths=project_paths,
361
375
  spawn_id=str(final_spawn_id),
362
376
  )
377
+ config_env = _config_snapshot_env(payload.runtime.config_snapshot)
378
+ request_env = dict(prepared_surface.request.env)
379
+ resolved_env = {**config_env, **request_env}
363
380
  launch_ctx = await asyncio.to_thread(
364
381
  bind_spawn_launch_context,
365
382
  prepared=prepared_surface,
@@ -368,6 +385,7 @@ class SpawnApplicationService:
368
385
  report_output_path=report_output_path,
369
386
  runtime_work_id=effective_work_id,
370
387
  dry_run=False,
388
+ plan_overrides=resolved_env,
371
389
  ),
372
390
  runtime=payload.runtime,
373
391
  harness_registry=payload.harness_registry,
@@ -45,12 +45,16 @@ Required abstract methods — every subclass must implement all of these:
45
45
  - `harness_id`, `spawn_id`, `capabilities` properties
46
46
  - `session_id` → `str | None` (None until the transport delivers a session identifier)
47
47
  - `subprocess_pid` → `int | None`
48
+ - `resident_backend` → `ResidentBackendControl | None`; Codex/OpenCode expose
49
+ this for resident-until-done structured liveness and follow-up turns;
50
+ non-resident transports return None. This is the only public resident control
51
+ seam — callers do not reach for adapter-specific backend objects.
52
+ - `scope_snapshot` → `ProcessScopeSnapshot | None`; managed backends expose the
53
+ process-scope facts captured at launch so primary attach and cleanup paths do
54
+ not reconstruct containment from PID fields.
48
55
  - `start(config, spec)` → async; raises if already started
49
56
  - `stop()` → async; idempotent
50
57
  - `health()` → bool
51
- - `resident_backend` → `ResidentBackendControl | None`; Codex/OpenCode expose
52
- this for resident-until-done structured liveness and follow-up turns;
53
- non-resident transports return None.
54
58
  - `send_user_message(text)` → async
55
59
  - `send_cancel()` → async
56
60
  - `events()` → `AsyncIterator[HarnessEvent]`
@@ -61,9 +65,6 @@ supports the capability:
61
65
  - `start_observer(config, spec)` — observer mode; guard with `capabilities.supports_primary_observer`
62
66
  - `configure_primary_runtime_requests(policy, event_sink, request_handler)`
63
67
  - `inject_runtime_event(event)`
64
- - `inject_turn(message)` — compatibility wrapper that delegates to
65
- `resident_backend.begin_followup_turn`; transports should implement follow-up
66
- turns through the resident backend seam instead of overriding this directly.
67
68
  - `respond_request(request_id, decision, payload)` — Codex only
68
69
  - `respond_user_input(request_id, answers)` — Codex only
69
70
 
@@ -11,12 +11,13 @@ Each transport wraps a long-lived process and turns its output into a stream of
11
11
  `HarnessEvent` objects consumed by the drain loop. The drain loop calls
12
12
  `terminal_outcome(event)` on each event; when that returns non-None, it breaks.
13
13
 
14
- Three transports exist, each different at the wire level:
14
+ Transports differ at the wire level:
15
15
  - **Claude** (`claude_ws.py`): stdin/stdout NDJSON. No WebSocket despite the filename.
16
- - **Codex** (`codex_ws.py`): real WebSocket to `codex app-server`, JSON-RPC 2.0.
16
+ - **Codex** (`codex_ws.py`): real WebSocket to a managed `codex app-server`, JSON-RPC 2.0.
17
17
  Codex's `requestApproval` and `requestUserInput` messages are dispatched to
18
18
  either `AutoAcceptHandler` (spawn paths) or `InteractiveHandler` (managed-primary attach).
19
- - **OpenCode** (`opencode_http.py`): HTTP+SSE to `opencode serve`.
19
+ - **OpenCode** (`opencode_http.py`): HTTP+SSE to managed `opencode serve`.
20
+ - **Cursor/Pi**: narrower spawned-session transports; no resident backend seam.
20
21
 
21
22
  ## Key Rules
22
23
 
@@ -31,6 +32,14 @@ distinction.
31
32
  implement all abstract methods, register in the bundle. Missing registration →
32
33
  `KeyError` at lookup time.
33
34
 
35
+ **Resident control goes through `resident_backend`.** Do not add connection-level
36
+ turn-injection or managed-backend shims. Codex/OpenCode return a
37
+ `ResidentBackendControl`; callers use `begin_followup_turn()` through that seam.
38
+
39
+ **Managed backend liveness belongs to `BackendLivenessPolicy`.** Adapters feed it
40
+ activity, active turns, active requests, backend pid, and birth time; callers consume
41
+ its structured decisions instead of inventing per-adapter alive checks.
42
+
34
43
  ## Entry Points
35
44
 
36
45
  - `base.py` — `HarnessConnection` ABC, `HarnessEvent`, `ConnectionCapabilities`,
@@ -39,6 +48,11 @@ implement all abstract methods, register in the bundle. Missing registration →
39
48
  `ResidentDrainCoordinator` for structured liveness, awaiting-done signaling,
40
49
  and follow-up turns. This seam's presence, not the harness id, selects the
41
50
  resident drain coordinator.
51
+ - `liveness.py` — `BackendLivenessPolicy`, the shared managed-backend liveness
52
+ classifier for Codex/OpenCode.
53
+ - `managed_backend.py` — single helper for launching managed backend subprocesses,
54
+ building `ProcessScopeSnapshot`, linking parent-death behavior when possible,
55
+ and recording `process_scopes.json`.
42
56
  - `__init__.py` — `get_connection_class(harness_id, transport_id)`.
43
57
 
44
58
  ## Depth
@@ -52,6 +52,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
52
52
 
53
53
  _MANAGED_FLAG_ALIASES: dict[str, tuple[str, ...]] = {
54
54
  "--model": ("--model", "-m"),
55
+ "--thinking": ("--thinking",),
55
56
  "--append-system-prompt": ("--append-system-prompt",),
56
57
  "--session": ("--session",),
57
58
  "--fork": ("--fork",),
@@ -148,12 +149,13 @@ def _project_model_arg(spec: ResolvedLaunchSpec) -> str | None:
148
149
  if not model:
149
150
  return None
150
151
 
151
- thinking = _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
152
- if thinking:
153
- return f"{model}:{thinking}"
154
152
  return model
155
153
 
156
154
 
155
+ def _project_thinking_level(spec: ResolvedLaunchSpec) -> str | None:
156
+ return _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
157
+
158
+
157
159
  def project_pi_native_tui_spec_to_cli_args(
158
160
  spec: ResolvedLaunchSpec,
159
161
  *,
@@ -162,19 +164,26 @@ def project_pi_native_tui_spec_to_cli_args(
162
164
  """Project one ``ResolvedLaunchSpec`` into an ordered native Pi TUI command list."""
163
165
 
164
166
  command: list[str] = list(base_command)
167
+ passthrough_tail = spec.extra_args
165
168
 
166
169
  model_arg = _project_model_arg(spec)
167
170
  if model_arg is not None:
168
171
  command.extend(("--model", model_arg))
169
172
 
173
+ thinking_level = _project_thinking_level(spec)
174
+ model_override_in_passthrough = any(
175
+ _has_flag(passthrough_tail, alias) for alias in _MANAGED_FLAG_ALIASES["--model"]
176
+ )
177
+ emit_thinking = thinking_level is not None and not model_override_in_passthrough
178
+ if emit_thinking and thinking_level is not None:
179
+ command.extend(("--thinking", thinking_level))
180
+
170
181
  if spec.appended_system_prompt:
171
182
  command.extend(("--append-system-prompt", spec.appended_system_prompt))
172
183
 
173
184
  continue_session_id = (spec.continue_session_id or "").strip()
174
185
  has_continue_session = bool(continue_session_id)
175
186
  has_continue_fork = has_continue_session and spec.continue_fork
176
-
177
- passthrough_tail = spec.extra_args
178
187
  _reject_mode_collisions(passthrough_tail)
179
188
  _reject_continue_collisions(passthrough_tail)
180
189
  _reject_extension_collisions(passthrough_tail)
@@ -184,6 +193,11 @@ def project_pi_native_tui_spec_to_cli_args(
184
193
  has_managed_value=model_arg is not None,
185
194
  passthrough_tail=passthrough_tail,
186
195
  )
196
+ _log_collision_if_needed(
197
+ managed_flag="--thinking",
198
+ has_managed_value=emit_thinking,
199
+ passthrough_tail=passthrough_tail,
200
+ )
187
201
  _log_collision_if_needed(
188
202
  managed_flag="--append-system-prompt",
189
203
  has_managed_value=bool(spec.appended_system_prompt),
@@ -53,6 +53,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
53
53
 
54
54
  _MANAGED_FLAG_ALIASES: dict[str, tuple[str, ...]] = {
55
55
  "--model": ("--model", "-m"),
56
+ "--thinking": ("--thinking",),
56
57
  "--append-system-prompt": ("--append-system-prompt",),
57
58
  "--session": ("--session",),
58
59
  "--fork": ("--fork",),
@@ -143,12 +144,13 @@ def _project_model_arg(spec: ResolvedLaunchSpec) -> str | None:
143
144
  if not model:
144
145
  return None
145
146
 
146
- thinking = _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
147
- if thinking:
148
- return f"{model}:{thinking}"
149
147
  return model
150
148
 
151
149
 
150
+ def _project_thinking_level(spec: ResolvedLaunchSpec) -> str | None:
151
+ return _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
152
+
153
+
152
154
  def _default_pi_session_dir() -> str:
153
155
  return str(resolve_pi_spawn_session_root())
154
156
 
@@ -161,19 +163,26 @@ def project_pi_spec_to_cli_args(
161
163
  """Project one ``ResolvedLaunchSpec`` into an ordered Pi RPC command list."""
162
164
 
163
165
  command: list[str] = list(base_command)
166
+ passthrough_tail = spec.extra_args
164
167
 
165
168
  model_arg = _project_model_arg(spec)
166
169
  if model_arg is not None:
167
170
  command.extend(("--model", model_arg))
168
171
 
172
+ thinking_level = _project_thinking_level(spec)
173
+ model_override_in_passthrough = any(
174
+ _has_flag(passthrough_tail, alias) for alias in _MANAGED_FLAG_ALIASES["--model"]
175
+ )
176
+ emit_thinking = thinking_level is not None and not model_override_in_passthrough
177
+ if emit_thinking and thinking_level is not None:
178
+ command.extend(("--thinking", thinking_level))
179
+
169
180
  if spec.appended_system_prompt:
170
181
  command.extend(("--append-system-prompt", spec.appended_system_prompt))
171
182
 
172
183
  continue_session_id = (spec.continue_session_id or "").strip()
173
184
  has_continue_session = bool(continue_session_id)
174
185
  has_continue_fork = has_continue_session and spec.continue_fork
175
-
176
- passthrough_tail = spec.extra_args
177
186
  _reject_mode_collisions(passthrough_tail)
178
187
  _reject_extension_collisions(passthrough_tail)
179
188
  _reject_session_dir_collisions(passthrough_tail)
@@ -183,6 +192,11 @@ def project_pi_spec_to_cli_args(
183
192
  has_managed_value=model_arg is not None,
184
193
  passthrough_tail=passthrough_tail,
185
194
  )
195
+ _log_collision_if_needed(
196
+ managed_flag="--thinking",
197
+ has_managed_value=emit_thinking,
198
+ passthrough_tail=passthrough_tail,
199
+ )
186
200
  _log_collision_if_needed(
187
201
  managed_flag="--append-system-prompt",
188
202
  has_managed_value=bool(spec.appended_system_prompt),
@@ -178,10 +178,10 @@ def merge_env_overrides(
178
178
  """
179
179
  forbidden: list[tuple[str, str]] = []
180
180
  for key in plan_overrides:
181
- if key.startswith("MERIDIAN_"):
181
+ if key.upper().startswith("MERIDIAN_"):
182
182
  forbidden.append((key, "plan_overrides"))
183
183
  for key in preflight_overrides:
184
- if key.startswith("MERIDIAN_"):
184
+ if key.upper().startswith("MERIDIAN_"):
185
185
  forbidden.append((key, "preflight_overrides"))
186
186
 
187
187
  if forbidden:
@@ -95,6 +95,7 @@ def build_launch_policy_snapshot(
95
95
  tools=request.tools,
96
96
  mcp_tools=request.mcp_tools,
97
97
  extra_args=request.extra_args,
98
+ env=request.env,
98
99
  model_selection_requested_token=request.model_selection_requested_token,
99
100
  model_selection_selected_token=(
100
101
  model_selection.selected_model_token
@@ -990,6 +990,11 @@ def run_harness_process(
990
990
  }
991
991
  )
992
992
  plan_overrides: dict[str, str] = {}
993
+ config_env = runtime.config_snapshot.get("env")
994
+ if isinstance(config_env, dict):
995
+ for k, v in cast("dict[str, str]", config_env).items():
996
+ if k.strip():
997
+ plan_overrides[k] = v
993
998
  if runtime_request.execution_policy.autocompact is not None:
994
999
  plan_overrides["CLAUDE_AUTOCOMPACT_PCT_OVERRIDE"] = str(
995
1000
  runtime_request.execution_policy.autocompact
@@ -90,6 +90,7 @@ class SpawnRequest(BaseModel):
90
90
  extra_args: tuple[str, ...] = ()
91
91
  mcp_tools: tuple[str, ...] = ()
92
92
  tools: ToolsField | None = None
93
+ env: dict[str, str] = Field(default_factory=dict)
93
94
 
94
95
  # Execution policy carrier (replaces flat effort/sandbox/approval/autocompact/autocompact_pct)
95
96
  execution_policy: ResolvedExecutionPolicy = Field(default_factory=ResolvedExecutionPolicy)
@@ -500,6 +500,29 @@ def _dynamic_value_source(
500
500
  return "builtin"
501
501
 
502
502
 
503
+ def _resolve_env_config_source(
504
+ *,
505
+ env_key: str,
506
+ project_dynamic_overrides: dict[str, object],
507
+ user_dynamic_overrides: dict[str, object],
508
+ ) -> Literal["file", "user-config", "builtin"]:
509
+ project_env = project_dynamic_overrides.get("env")
510
+ if isinstance(project_env, dict) and env_key in project_env:
511
+ return "file"
512
+ user_env = user_dynamic_overrides.get("env")
513
+ if isinstance(user_env, dict) and env_key in user_env:
514
+ return "user-config"
515
+ return "builtin"
516
+
517
+
518
+ _SECRET_ENV_KEY_SUFFIXES = ("_TOKEN", "_KEY", "_SECRET")
519
+
520
+
521
+ def _looks_like_secret_env_key(key: str) -> bool:
522
+ normalized = key.upper()
523
+ return any(normalized.endswith(suffix) for suffix in _SECRET_ENV_KEY_SUFFIXES)
524
+
525
+
503
526
  def _dynamic_config_values(inspection: _ConfigInspectionState) -> list[ConfigResolvedValue]:
504
527
  values: list[ConfigResolvedValue] = []
505
528
  resolved = inspection.resolved_dynamic_overrides
@@ -569,6 +592,24 @@ def _dynamic_config_values(inspection: _ConfigInspectionState) -> list[ConfigRes
569
592
  )
570
593
  )
571
594
 
595
+ env_config = inspection.surface.resolved_config.env
596
+ if env_config:
597
+ for env_key, env_value in sorted(env_config.items()):
598
+ display_value: object = env_value
599
+ if _looks_like_secret_env_key(env_key):
600
+ display_value = "[redacted]"
601
+ values.append(
602
+ ConfigResolvedValue(
603
+ key=f"env.{env_key}",
604
+ value=display_value,
605
+ source=_resolve_env_config_source(
606
+ env_key=env_key,
607
+ project_dynamic_overrides=inspection.project_dynamic_overrides,
608
+ user_dynamic_overrides=inspection.user_dynamic_overrides,
609
+ ),
610
+ )
611
+ )
612
+
572
613
  return values
573
614
 
574
615
 
@@ -1868,6 +1868,8 @@ def _reject_continue_policy_overrides(payload: SpawnContinueInput) -> None:
1868
1868
  rejected.append("--autocompact-pct")
1869
1869
  if payload.passthrough_args:
1870
1870
  rejected.append("--")
1871
+ if payload.env:
1872
+ rejected.append("--env")
1871
1873
  if payload.work.strip():
1872
1874
  rejected.append("--work")
1873
1875
  if payload.task_dir is not None and payload.task_dir.strip():
@@ -236,6 +236,10 @@ async def _prepare_execution_handoff(
236
236
  autocompact=request.execution_policy.autocompact,
237
237
  ctx=resolved_context,
238
238
  )
239
+ if runtime.config.env or request.env:
240
+ resolved_env = dict(runtime.config.env)
241
+ resolved_env.update(request.env)
242
+ run_env_overrides = {**resolved_env, **run_env_overrides}
239
243
  runtime_work_id = session_context.work_id or work_id
240
244
  final_request = resolved_request.model_copy(update={"work_id_hint": runtime_work_id})
241
245
  launch_runtime = runtime_request.model_copy(
@@ -73,6 +73,7 @@ class SpawnLaunchOptionUpdates(TypedDict):
73
73
  debug: bool
74
74
  task_ping_interval: str | None
75
75
  task_ping_reset_on_activity: bool | None
76
+ env: tuple[str, ...]
76
77
 
77
78
 
78
79
  class SpawnLaunchOptions(BaseModel):
@@ -95,6 +96,7 @@ class SpawnLaunchOptions(BaseModel):
95
96
  debug: bool = False
96
97
  task_ping_interval: str | None = None
97
98
  task_ping_reset_on_activity: bool | None = None
99
+ env: tuple[str, ...] = ()
98
100
 
99
101
  def launch_option_updates(self) -> SpawnLaunchOptionUpdates:
100
102
  return {
@@ -115,6 +117,7 @@ class SpawnLaunchOptions(BaseModel):
115
117
  "debug": self.debug,
116
118
  "task_ping_interval": self.task_ping_interval,
117
119
  "task_ping_reset_on_activity": self.task_ping_reset_on_activity,
120
+ "env": self.env,
118
121
  }
119
122
 
120
123
 
@@ -41,6 +41,32 @@ from .models import SpawnCreateInput
41
41
  _DRY_RUN_REPORT_PATH = "<spawn-report-path>"
42
42
 
43
43
 
44
+ def _parse_env_assignments(raw: tuple[str, ...]) -> dict[str, str]:
45
+ parsed: dict[str, str] = {}
46
+ for item in raw:
47
+ if "=" not in item:
48
+ raise ValueError(
49
+ f"Invalid --env value {item!r}: expected KEY=VALUE format."
50
+ )
51
+ key, _, value = item.partition("=")
52
+ key = key.strip()
53
+ if not key:
54
+ raise ValueError(
55
+ f"Invalid --env value {item!r}: KEY is empty."
56
+ )
57
+ parsed[key] = value
58
+ return parsed
59
+
60
+
61
+ def _resolve_spawn_env(payload: SpawnCreateInput) -> dict[str, str]:
62
+ cli_env = _parse_env_assignments(payload.env)
63
+ if cli_env:
64
+ return cli_env
65
+ if payload.launch_policy_snapshot is not None:
66
+ return dict(payload.launch_policy_snapshot.env)
67
+ return {}
68
+
69
+
44
70
  @dataclass(frozen=True)
45
71
  class SpawnCreateArtifacts:
46
72
  """Resolved spawn request plus expensive prepared surface for bind-only execute."""
@@ -171,6 +197,7 @@ def build_create_payload(
171
197
  launch_policy_snapshot=payload.launch_policy_snapshot,
172
198
  pi_task_ping_interval_seconds=parse_duration_seconds(payload.task_ping_interval),
173
199
  pi_task_ping_reset_on_activity=payload.task_ping_reset_on_activity,
200
+ env=_resolve_spawn_env(payload),
174
201
  )
175
202
 
176
203
  mars_runtime_source = runtime or build_runtime_from_root_and_config(
@@ -200,12 +227,15 @@ def build_create_payload(
200
227
  ),
201
228
  )
202
229
  if composition_dry_run:
230
+ plan_overrides = dict(config.env)
231
+ plan_overrides.update(raw_request.env)
203
232
  preview_context = bind_spawn_launch_context(
204
233
  prepared=prepared_surface,
205
234
  bindings=RuntimeBindings(
206
235
  spawn_id="dry-run",
207
236
  report_output_path=Path(_DRY_RUN_REPORT_PATH),
208
237
  dry_run=True,
238
+ plan_overrides=plan_overrides,
209
239
  ),
210
240
  runtime=preview_runtime,
211
241
  harness_registry=harness_registry,