meridian-cli 0.2.22__tar.gz → 0.2.24__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 (535) hide show
  1. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/PKG-INFO +2 -2
  2. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/pyproject.toml +1 -1
  3. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/__init__.py +1 -1
  4. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/.context/CONTEXT.md +6 -4
  5. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/AGENTS.md +6 -3
  6. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/.context/CONTEXT.md +30 -22
  7. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/AGENTS.md +8 -7
  8. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/claude.py +3 -1
  9. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/codex_ws.py +1 -1
  10. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_claude.py +42 -2
  11. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_codex_streaming.py +1 -0
  12. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_codex_subprocess.py +1 -0
  13. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_cursor.py +1 -0
  14. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_opencode_streaming.py +1 -0
  15. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +1 -0
  16. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_pi_native_tui.py +1 -0
  17. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_pi_rpc.py +1 -0
  18. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/context.py +41 -11
  19. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/launch_types.py +1 -0
  20. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/permissions.py +95 -1
  21. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/prompt.py +51 -2
  22. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/.context/CONTEXT.md +14 -2
  23. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +44 -0
  24. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +224 -151
  25. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +4 -2
  26. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +2 -0
  27. meridian_cli-0.2.24/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.test.ts +384 -0
  28. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +213 -161
  29. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +4 -0
  30. meridian_cli-0.2.24/src/meridian/pi_runtime/extensions/shared/spawn_origins.test.ts +42 -0
  31. meridian_cli-0.2.24/src/meridian/pi_runtime/extensions/shared/spawn_origins.ts +46 -0
  32. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/.gitignore +0 -0
  33. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/LICENSE +0 -0
  34. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/README.md +0 -0
  35. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/ag_ui/__init__.pyi +0 -0
  36. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/ag_ui/core.pyi +0 -0
  37. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/AGENTS.md +0 -0
  38. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/__main__.py +0 -0
  39. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/.context/CONTEXT.md +0 -0
  40. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/AGENTS.md +0 -0
  41. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/__init__.py +0 -0
  42. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/_cmd_utils.py +0 -0
  43. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/agent_help.py +0 -0
  44. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/app_tree.py +0 -0
  45. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/argv_normalization.py +0 -0
  46. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/bootstrap.py +0 -0
  47. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/bootstrap_cmd.py +0 -0
  48. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/chat_cmd.py +0 -0
  49. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/config_cmd.py +0 -0
  50. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/doctor_cmd.py +0 -0
  51. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/entrypoint.py +0 -0
  52. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/ext_cmd.py +0 -0
  53. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/ext_registration.py +0 -0
  54. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/hooks_authority.py +0 -0
  55. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/hooks_commands.py +0 -0
  56. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/kg_cmd.py +0 -0
  57. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/main.py +0 -0
  58. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/mars_passthrough.py +0 -0
  59. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/mermaid_cmd.py +0 -0
  60. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/migrate_cmd.py +0 -0
  61. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/misc_commands.py +0 -0
  62. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/models_cmd.py +0 -0
  63. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/output.py +0 -0
  64. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/primary_launch.py +0 -0
  65. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/qi_cmd.py +0 -0
  66. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/report_cmd.py +0 -0
  67. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/session_cmd.py +0 -0
  68. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/spawn.py +0 -0
  69. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/spawn_inject.py +0 -0
  70. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/startup/__init__.py +0 -0
  71. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/startup/catalog.py +0 -0
  72. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/startup/classify.py +0 -0
  73. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  74. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/startup/help.py +0 -0
  75. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  76. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/startup/policy.py +0 -0
  77. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/streaming_serve.py +0 -0
  78. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/sync_cmd.py +0 -0
  79. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/telemetry_cmd.py +0 -0
  80. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/utils.py +0 -0
  81. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/work_cmd.py +0 -0
  82. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/cli/workspace_cmd.py +0 -0
  83. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/dev/AGENTS.md +0 -0
  84. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/dev/__init__.py +0 -0
  85. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/dev/pytests.py +0 -0
  86. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/__init__.py +0 -0
  87. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  88. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  89. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/bootstrap/__init__.py +0 -0
  90. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/bootstrap/config.py +0 -0
  91. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/bootstrap/project_state.py +0 -0
  92. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  93. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/bootstrap/services.py +0 -0
  94. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  95. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/AGENTS.md +0 -0
  96. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/__init__.py +0 -0
  97. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/agent.py +0 -0
  98. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/bootstrap.py +0 -0
  99. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/catalog_session.py +0 -0
  100. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/model_aliases.py +0 -0
  101. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/models.py +0 -0
  102. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/catalog/skill.py +0 -0
  103. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  104. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/AGENTS.md +0 -0
  105. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/__init__.py +0 -0
  106. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  107. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/backend_handle.py +0 -0
  108. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/checkpoint.py +0 -0
  109. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/command_handler.py +0 -0
  110. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/command_invariants.py +0 -0
  111. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/commands.py +0 -0
  112. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  113. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  114. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  115. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  116. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  117. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  118. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  119. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  120. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  121. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/event_index.py +0 -0
  122. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/event_log.py +0 -0
  123. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/event_observer.py +0 -0
  124. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/event_pipeline.py +0 -0
  125. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/frontend.py +0 -0
  126. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  127. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  128. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  129. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/base.py +0 -0
  130. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/claude.py +0 -0
  131. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/codex.py +0 -0
  132. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/common.py +0 -0
  133. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  134. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/registry.py +0 -0
  135. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  136. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/policy.py +0 -0
  137. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/protocol.py +0 -0
  138. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/recovery.py +0 -0
  139. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/replay.py +0 -0
  140. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/runtime.py +0 -0
  141. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/server.py +0 -0
  142. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/session_service.py +0 -0
  143. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/chat/ws_fanout.py +0 -0
  144. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/__init__.py +0 -0
  145. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/catalog.py +0 -0
  146. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/context_config.py +0 -0
  147. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/preserving_edit.py +0 -0
  148. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/project_config_state.py +0 -0
  149. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/project_paths.py +0 -0
  150. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/project_root.py +0 -0
  151. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/schema.py +0 -0
  152. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/settings.py +0 -0
  153. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/config/workspace.py +0 -0
  154. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  155. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/context/AGENTS.md +0 -0
  156. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/context/__init__.py +0 -0
  157. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/context/resolver.py +0 -0
  158. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
  159. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/AGENTS.md +0 -0
  160. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/__init__.py +0 -0
  161. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/child_env.py +0 -0
  162. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/clock.py +0 -0
  163. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/codec.py +0 -0
  164. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/command_strings.py +0 -0
  165. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/context.py +0 -0
  166. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/conversation.py +0 -0
  167. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/depth.py +0 -0
  168. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/domain.py +0 -0
  169. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/execution_policy.py +0 -0
  170. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/formatting.py +0 -0
  171. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/launch_policy_snapshot.py +0 -0
  172. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/lifecycle.py +0 -0
  173. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/logging.py +0 -0
  174. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/overrides.py +0 -0
  175. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/process_cleanup.py +0 -0
  176. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/resolved_context.py +0 -0
  177. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/sink.py +0 -0
  178. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
  179. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/spawn_service.py +0 -0
  180. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/spawn_start.py +0 -0
  181. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/telemetry.py +0 -0
  182. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/types.py +0 -0
  183. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/core/util.py +0 -0
  184. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/diagnostics.py +0 -0
  185. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  186. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/AGENTS.md +0 -0
  187. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/__init__.py +0 -0
  188. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  189. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  190. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  191. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  192. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  193. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  194. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  195. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/context.py +0 -0
  196. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/descriptors.py +0 -0
  197. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/dispatcher.py +0 -0
  198. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/first_party.py +0 -0
  199. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/observability.py +0 -0
  200. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/registry.py +0 -0
  201. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/extensions/types.py +0 -0
  202. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/__init__.py +0 -0
  203. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/adapter.py +0 -0
  204. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/bundle.py +0 -0
  205. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/claude_preflight.py +0 -0
  206. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/claude_utils.py +0 -0
  207. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/codex.py +0 -0
  208. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/codex_rollout.py +0 -0
  209. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/common.py +0 -0
  210. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/.context/CONTEXT.md +0 -0
  211. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/AGENTS.md +0 -0
  212. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/__init__.py +0 -0
  213. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/base.py +0 -0
  214. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
  215. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  216. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/errors.py +0 -0
  217. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
  218. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
  219. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/control_action.py +0 -0
  220. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/cost.py +0 -0
  221. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/cursor.py +0 -0
  222. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/errors.py +0 -0
  223. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractor.py +0 -0
  224. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  225. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  226. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  227. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/base.py +0 -0
  228. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/claude.py +0 -0
  229. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/codex.py +0 -0
  230. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  231. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  232. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/extractors/pi.py +0 -0
  233. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/launch_spec.py +0 -0
  234. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/launch_types.py +0 -0
  235. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/opencode.py +0 -0
  236. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/opencode_storage.py +0 -0
  237. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  238. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  239. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  240. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  241. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/base.py +0 -0
  242. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  243. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/codex.py +0 -0
  244. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  245. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  246. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/permission_broker.py +0 -0
  247. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/pi.py +0 -0
  248. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
  249. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/pi_paths.py +0 -0
  250. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  251. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
  252. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  253. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/__init__.py +0 -0
  254. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/_guards.py +0 -0
  255. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  256. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  257. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  258. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  259. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/registry.py +0 -0
  260. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/semantics.py +0 -0
  261. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/session_detection.py +0 -0
  262. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/harness/transcript.py +0 -0
  263. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  264. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/AGENTS.md +0 -0
  265. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/__init__.py +0 -0
  266. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  267. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  268. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  269. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  270. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/builtin/base.py +0 -0
  271. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  272. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  273. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/config.py +0 -0
  274. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/dispatch.py +0 -0
  275. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/interval.py +0 -0
  276. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/registry.py +0 -0
  277. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/runner.py +0 -0
  278. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/hooks/types.py +0 -0
  279. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ignores.py +0 -0
  280. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  281. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/kg/AGENTS.md +0 -0
  282. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/kg/__init__.py +0 -0
  283. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/kg/graph.py +0 -0
  284. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/kg/report.py +0 -0
  285. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/kg/serializer.py +0 -0
  286. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/kg/types.py +0 -0
  287. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
  288. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/AGENTS.md +0 -0
  289. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/__init__.py +0 -0
  290. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/artifact_io.py +0 -0
  291. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  292. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/claude_session_access.py +0 -0
  293. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/command.py +0 -0
  294. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/compiler.py +0 -0
  295. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/composition.py +0 -0
  296. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/composition_spawn.py +0 -0
  297. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/constants.py +0 -0
  298. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/cwd.py +0 -0
  299. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/env.py +0 -0
  300. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/errors.py +0 -0
  301. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/extract.py +0 -0
  302. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/fork.py +0 -0
  303. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/materialize.py +0 -0
  304. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/plan.py +0 -0
  305. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/policies.py +0 -0
  306. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/policy_snapshot.py +0 -0
  307. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  308. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  309. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/__init__.py +0 -0
  310. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/ports.py +0 -0
  311. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/primary_attach.py +0 -0
  312. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  313. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/runner.py +0 -0
  314. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/session.py +0 -0
  315. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
  316. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  317. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/reference.py +0 -0
  318. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/report.py +0 -0
  319. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/request.py +0 -0
  320. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/resolution.py +0 -0
  321. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/resolve.py +0 -0
  322. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/run_inputs.py +0 -0
  323. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/runner_helpers.py +0 -0
  324. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/session_scope.py +0 -0
  325. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/signals.py +0 -0
  326. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  327. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  328. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  329. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  330. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  331. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/streaming_runner.py +0 -0
  332. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/text_utils.py +0 -0
  333. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/types.py +0 -0
  334. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/workspace.py +0 -0
  335. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/workspace_projection.py +0 -0
  336. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/launch/written_files.py +0 -0
  337. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  338. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/markdown/AGENTS.md +0 -0
  339. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/markdown/__init__.py +0 -0
  340. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/markdown/extract.py +0 -0
  341. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/markdown/types.py +0 -0
  342. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  343. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  344. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/__init__.py +0 -0
  345. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/report.py +0 -0
  346. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/scanner.py +0 -0
  347. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/serializer.py +0 -0
  348. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  349. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  350. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  351. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  352. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  353. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  354. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  355. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  356. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  357. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/style/types.py +0 -0
  358. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/mermaid/validator.py +0 -0
  359. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  360. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/observability/AGENTS.md +0 -0
  361. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/observability/__init__.py +0 -0
  362. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/observability/debug_tracer.py +0 -0
  363. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/observability/trace_helpers.py +0 -0
  364. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
  365. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/AGENTS.md +0 -0
  366. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/__init__.py +0 -0
  367. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/catalog.py +0 -0
  368. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/commands.py +0 -0
  369. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/config.py +0 -0
  370. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/config_surface.py +0 -0
  371. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/context.py +0 -0
  372. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/diag.py +0 -0
  373. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/hooks.py +0 -0
  374. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/init_ops.py +0 -0
  375. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/mars.py +0 -0
  376. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/migration.py +0 -0
  377. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/pruning.py +0 -0
  378. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/qi.py +0 -0
  379. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/reference.py +0 -0
  380. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/reference_recovery.py +0 -0
  381. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/report.py +0 -0
  382. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/runtime.py +0 -0
  383. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_corpus.py +0 -0
  384. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_export.py +0 -0
  385. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_log.py +0 -0
  386. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_log_render.py +0 -0
  387. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_render.py +0 -0
  388. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_repair.py +0 -0
  389. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_search.py +0 -0
  390. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_target.py +0 -0
  391. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/session_transcript.py +0 -0
  392. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
  393. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  394. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/__init__.py +0 -0
  395. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/api.py +0 -0
  396. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
  397. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/execute.py +0 -0
  398. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  399. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
  400. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/execute_runner.py +0 -0
  401. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
  402. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  403. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/models.py +0 -0
  404. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/prepare.py +0 -0
  405. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/spawn/query.py +0 -0
  406. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  407. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/work_attachment.py +0 -0
  408. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/work_dashboard.py +0 -0
  409. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/work_lifecycle.py +0 -0
  410. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/work_sessions.py +0 -0
  411. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/ops/workspace.py +0 -0
  412. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  413. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/AGENTS.md +0 -0
  414. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/__init__.py +0 -0
  415. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/locking.py +0 -0
  416. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  417. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  418. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  419. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/process_scope/base.py +0 -0
  420. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
  421. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/process_scope/posix.py +0 -0
  422. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
  423. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/terminate.py +0 -0
  424. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/unix_modules.py +0 -0
  425. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/platform/windows_job.py +0 -0
  426. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  427. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/safety/AGENTS.md +0 -0
  428. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/safety/__init__.py +0 -0
  429. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/safety/budget.py +0 -0
  430. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/safety/guardrails.py +0 -0
  431. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/safety/permissions.py +0 -0
  432. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/safety/redaction.py +0 -0
  433. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/service_context.py +0 -0
  434. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  435. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/spawn/AGENTS.md +0 -0
  436. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/spawn/__init__.py +0 -0
  437. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/spawn/archive.py +0 -0
  438. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/.context/CONTEXT.md +0 -0
  439. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/AGENTS.md +0 -0
  440. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/__init__.py +0 -0
  441. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/artifact_store.py +0 -0
  442. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/atomic.py +0 -0
  443. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/event_store.py +0 -0
  444. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/history.py +0 -0
  445. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/launch_boundary.py +0 -0
  446. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/liveness.py +0 -0
  447. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/managed_primary.py +0 -0
  448. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/paths.py +0 -0
  449. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/primary_meta.py +0 -0
  450. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/process_scope_projection.py +0 -0
  451. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/reaper.py +0 -0
  452. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/runtime_root.py +0 -0
  453. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/session_store.py +0 -0
  454. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  455. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  456. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn/__init__.py +0 -0
  457. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn/model.py +0 -0
  458. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn/repository.py +0 -0
  459. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  460. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn/transitions.py +0 -0
  461. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/spawn_store.py +0 -0
  462. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/user_paths.py +0 -0
  463. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/wordgen.py +0 -0
  464. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/wordlists.py +0 -0
  465. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/state/work_store.py +0 -0
  466. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/.context/CONTEXT.md +0 -0
  467. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/AGENTS.md +0 -0
  468. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/__init__.py +0 -0
  469. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/control_socket.py +0 -0
  470. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/disk_watcher.py +0 -0
  471. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/drain_policy.py +0 -0
  472. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/drain_wait.py +0 -0
  473. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/event_observers.py +0 -0
  474. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/heartbeat.py +0 -0
  475. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/pi_drain.py +0 -0
  476. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/pi_process_cleanup.py +0 -0
  477. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/pi_quiescence.py +0 -0
  478. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/pi_subspawn_tracker.py +0 -0
  479. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/signal_canceller.py +0 -0
  480. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/spawn_dispatch.py +0 -0
  481. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/spawn_drain_loop.py +0 -0
  482. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/spawn_manager.py +0 -0
  483. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/spawn_session.py +0 -0
  484. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/streaming/types.py +0 -0
  485. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/__init__.py +0 -0
  486. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  487. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/correlation.py +0 -0
  488. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/events.py +0 -0
  489. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/init.py +0 -0
  490. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  491. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/maintenance.py +0 -0
  492. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/observer.py +0 -0
  493. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/observers.py +0 -0
  494. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/query.py +0 -0
  495. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/reader.py +0 -0
  496. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/retention.py +0 -0
  497. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/router.py +0 -0
  498. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/sinks.py +0 -0
  499. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/telemetry/status.py +0 -0
  500. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/tools.py +0 -0
  501. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/utils/__init__.py +0 -0
  502. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/lib/utils/time.py +0 -0
  503. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/README.md +0 -0
  504. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/__init__.py +0 -0
  505. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
  506. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
  507. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  508. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
  509. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
  510. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
  511. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
  512. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
  513. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
  514. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
  515. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
  516. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
  517. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
  518. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
  519. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
  520. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/package.json +0 -0
  521. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  522. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
  523. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
  524. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/pi_runtime/vitest.config.ts +0 -0
  525. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/plugin_api/AGENTS.md +0 -0
  526. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/plugin_api/__init__.py +0 -0
  527. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/plugin_api/config.py +0 -0
  528. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/plugin_api/fs.py +0 -0
  529. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/plugin_api/git.py +0 -0
  530. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/plugin_api/state.py +0 -0
  531. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/plugin_api/types.py +0 -0
  532. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/py.typed +0 -0
  533. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/server/AGENTS.md +0 -0
  534. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/src/meridian/server/__init__.py +0 -0
  535. {meridian_cli-0.2.22 → meridian_cli-0.2.24}/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.22
3
+ Version: 0.2.24
4
4
  Summary: Orchestrate CLI + MCP server for multi-model agent workflows
5
5
  Project-URL: Homepage, https://github.com/haowjy/meridian-cli
6
6
  Project-URL: Repository, https://github.com/haowjy/meridian-cli
@@ -24,7 +24,7 @@ Requires-Dist: coolname>=4.0.0
24
24
  Requires-Dist: cyclopts>=3.0
25
25
  Requires-Dist: fastapi>=0.115
26
26
  Requires-Dist: markdown-it-py>=4.0
27
- Requires-Dist: mars-agents==0.7.11
27
+ Requires-Dist: mars-agents==0.7.12
28
28
  Requires-Dist: mcp>=1.0
29
29
  Requires-Dist: pathspec>=1.1.0
30
30
  Requires-Dist: psutil>=7.2.2
@@ -24,7 +24,7 @@ dependencies = [
24
24
  "cyclopts>=3.0",
25
25
  "fastapi>=0.115",
26
26
  "markdown-it-py>=4.0",
27
- "mars-agents==0.7.11",
27
+ "mars-agents==0.7.12",
28
28
  "mcp>=1.0",
29
29
  "pathspec>=1.1.0",
30
30
  "psutil>=7.2.2",
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.2.22"
5
+ __version__ = "0.2.24"
@@ -111,13 +111,15 @@ time. These follow the same pattern: ambient config snapshot → launch-time env
111
111
 
112
112
  - `resolve_pi_harness_profile_for_launch()` — resolves `[harness.pi]` (managed bash,
113
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
114
 
118
- Both are called from `bind_launch_context()` in `lib/launch/context.py` and threaded
115
+ Called from `bind_launch_context()` in `lib/launch/context.py` and threaded
119
116
  into the harness adapter's `resolve_launch_spec()`.
120
117
 
118
+ Claude native Agent routing does not use a `meridian.toml` harness option.
119
+ Built-in Claude agents stay denied unconditionally; generic `Agent` permission
120
+ follows Mars `[settings.agent_copy]` via `project_has_claude_agent_copy()` in
121
+ `lib/launch/permissions.py`.
122
+
121
123
  ## Schema Metadata (`schema.py`)
122
124
 
123
125
  `config_field(canonical_key, value_kind=..., file_aliases=..., env_vars=...)` attaches
@@ -70,9 +70,12 @@ Claude profile includes:
70
70
  - `[harness.claude] model` — default model (string, env: `MERIDIAN_HARNESS_MODEL_CLAUDE`)
71
71
  - `[harness.claude] wait_yield_seconds` — polling interval (float, env:
72
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.
73
+ - `[harness.claude] allow_builtin_agents` — parsed Claude harness field from
74
+ config release plumbing; Claude native Agent routing is still enforced by the
75
+ harness projection.
76
+ - Claude native Agent routing is not a `meridian.toml` harness policy. Built-in
77
+ Claude agents stay denied; generic `Agent` follows Mars `[settings.agent_copy]`
78
+ with `.claude` target materialization.
76
79
 
77
80
  ## Depth
78
81
 
@@ -39,9 +39,12 @@ 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
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()`.
42
+ Agent(Explore),Agent(Plan),Agent(General-purpose),Agent(general-purpose)`
43
+ unconditionally. The denials merge into permission-derived `--disallowedTools` via
44
+ `dedupe_nonempty()`. Generic
45
+ `Agent` is gated by Mars `[settings.agent_copy]`: allowed only when
46
+ `harnesses = ["claude"]` and `.claude` is a target. Parent/passthrough allowed-tool
47
+ tails are merged into the managed projection; Meridian's Agent denies stay authoritative.
45
48
  - Codex subprocess: `codex exec --json`; connection: `codex app-server` (real WebSocket, JSON-RPC 2.0)
46
49
  - OpenCode subprocess: `opencode run`; connection: `opencode serve` (HTTP+SSE)
47
50
  - Cursor subprocess: `cursor agent <prompt>` (stdout NDJSON, no connection path — subprocess-only)
@@ -188,25 +191,30 @@ it's captured. This is the minimum-intrusive mechanism for an otherwise unobserv
188
191
  value. Windows does not support PTY — Claude primary uses a fallback detection path
189
192
  (`session_detection.py`) on Windows.
190
193
 
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.
194
+ ### Claude: Native Agent Routing Boundary
195
+
196
+ Claude Code ships with three built-in subagents (Explore, Plan, General-purpose) plus
197
+ a generic `Agent` tool. Meridian's policy distinguishes between these:
198
+
199
+ - **Built-in agents are always denied.** Meridian injects
200
+ `--disallowedTools Agent(Explore),Agent(Plan),Agent(General-purpose),Agent(general-purpose)`.
201
+ There is no config toggle — built-ins are a Meridian platform policy.
202
+
203
+ - **Generic `Agent` follows the Mars agent-copy boundary.** Meridian reads
204
+ `mars.toml` to check whether `[settings.agent_copy] harnesses = ["claude"]` AND
205
+ `.claude` is in `targets`. If both hold, generic `Agent` is allowed (Claude's
206
+ native agent surface is Meridian-owned through agent copy). Otherwise, generic
207
+ `Agent` is denied by default and delegation routes through `meridian spawn`.
208
+
209
+ The detection runs in `bind_launch_context()` via `project_has_claude_agent_copy()` in
210
+ `permissions.py`, which reads `mars.toml` and `mars.local.toml`. The result flows into
211
+ `ResolvedLaunchSpec.claude_native_agents_enabled` and is projected by
212
+ `project_claude.py`. The projection strips `Agent` and `Agent(...)` from allowed-tools
213
+ when `claude_native_agents_enabled=False`, including parent-inherited allowed-tool tails.
214
+
215
+ This is implemented as a Meridian platform policy (harness adapter injection), not as
216
+ a per-agent `tools:` field. Agent profiles do not need to carry `agent: deny` entries —
217
+ the denial is inherited from the harness adapter when agent copy is absent.
210
218
 
211
219
  ### Claude: System-Prompt File Channel
212
220
 
@@ -38,11 +38,12 @@ 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
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.
41
+ `--disallowedTools Agent(Explore),Agent(Plan),Agent(General-purpose),Agent(general-purpose)`
42
+ unconditionally so sessions use Meridian delegation instead of Claude's built-in
43
+ subagents. Generic `Agent` is allowed only when Mars effective config has
44
+ `[settings.agent_copy] harnesses = ["claude"]` and `.claude` is a target.
45
+ Parent/passthrough allowed-tool tails are merged into the managed projection;
46
+ Meridian's Agent denies stay authoritative.
46
47
  - Codex subprocess: `codex exec --json`; connection: `codex app-server` (real WebSocket, JSON-RPC 2.0)
47
48
  - OpenCode subprocess: `opencode run`; connection: `opencode serve` (HTTP+SSE)
48
49
  - Cursor subprocess: `cursor agent <prompt>` (stdout NDJSON, no connection path — subprocess-only)
@@ -83,8 +84,8 @@ unique — always check `event.harness_id`. `turn/completed` is Codex; OpenCode
83
84
  Source of truth for what every adapter must implement.
84
85
  - `registry.py` — `HarnessRegistry`, `with_defaults()`. The global singleton.
85
86
  - `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.
87
+ Claude adapter threads `ResolvedLaunchSpec.claude_native_agents_enabled` into projection so
88
+ parent inherited `Agent` grants cannot bypass the Mars `agent_copy` boundary.
88
89
  - `__init__.py` — `HARNESS_EXTENSION_TOUCHPOINTS` and `ensure_bootstrap()`.
89
90
  Read before adding a harness — lists every file that must be touched.
90
91
  - `semantics.py` — `terminal_outcome()`, `activity_transition()`, `clears_signal()`.
@@ -377,7 +377,9 @@ class ClaudeAdapter(BaseHarnessAdapter[ResolvedLaunchSpec]):
377
377
  user_turn_content = getattr(run, "user_turn_content", None)
378
378
  disallowed_tools: tuple[str, ...] = ()
379
379
  if not run.claude_allow_builtin_agents:
380
- disallowed_tools = ("Agent(Explore),Agent(Plan),Agent(general-purpose)",)
380
+ disallowed_tools = (
381
+ "Agent(Explore),Agent(Plan),Agent(General-purpose),Agent(general-purpose)",
382
+ )
381
383
  return ResolvedLaunchSpec(
382
384
  harness=HarnessId.CLAUDE,
383
385
  model=str(run.model).strip() if run.model else None,
@@ -79,7 +79,7 @@ _ADDRESS_IN_USE_MARKERS: Final[tuple[str, ...]] = (
79
79
  "eaddrinuse",
80
80
  )
81
81
  _BOOTSTRAP_TURN_PROMPT: Final[str] = (
82
- "Meridian bootstrap. Acknowledge readiness only; do not perform a user task."
82
+ "Meridian started"
83
83
  )
84
84
 
85
85
 
@@ -16,6 +16,13 @@ from meridian.lib.launch.text_utils import dedupe_nonempty, split_csv_entries
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
19
+ _CLAUDE_BUILTIN_AGENT_DENY_TOOLS: tuple[str, ...] = (
20
+ "Agent(Explore)",
21
+ "Agent(Plan)",
22
+ "Agent(General-purpose)",
23
+ "Agent(general-purpose)",
24
+ )
25
+
19
26
  _PROJECTED_FIELDS: frozenset[str] = frozenset(
20
27
  {
21
28
  "agent_name",
@@ -32,6 +39,7 @@ _PROJECTED_FIELDS: frozenset[str] = frozenset(
32
39
  "permission_resolver",
33
40
  "prompt",
34
41
  "prompt_file_path",
42
+ "claude_native_agents_enabled",
35
43
  "user_turn_content",
36
44
  "disallowed_tools",
37
45
  }
@@ -129,6 +137,14 @@ def _has_flag(args: Sequence[str], flag: str) -> bool:
129
137
  return any(token == flag or token.startswith(f"{flag}=") for token in args)
130
138
 
131
139
 
140
+ def _is_claude_agent_tool(tool: str) -> bool:
141
+ return tool == "Agent" or tool.startswith("Agent(")
142
+
143
+
144
+ def _is_denied_tool(tool: str, denied_tools: set[str]) -> bool:
145
+ return tool in denied_tools or ("Agent" in denied_tools and _is_claude_agent_tool(tool))
146
+
147
+
132
148
  def _log_collision_if_needed(
133
149
  *,
134
150
  managed_flag: str,
@@ -177,14 +193,38 @@ def project_claude_spec_to_cli_args(
177
193
  command.extend(("--agent", str(spec.agent_name)))
178
194
 
179
195
  passthrough_tail, parent_allowed_tools = _split_internal_parent_allowed_tools(spec.extra_args)
196
+ projected_passthrough_tail, passthrough_allowed_tools, passthrough_disallowed_tools = (
197
+ _extract_claude_tool_flags(passthrough_tail)
198
+ )
199
+ passthrough_tail = tuple(projected_passthrough_tail)
180
200
 
181
201
  permission_flags = resolve_permission_flags(spec.permission_resolver, HarnessId.CLAUDE)
182
202
  permission_tail, allowed_tools, disallowed_tools = _extract_claude_tool_flags(permission_flags)
183
203
  spec_disallowed: list[str] = []
184
204
  for entry in spec.disallowed_tools:
185
205
  spec_disallowed.extend(split_csv_entries(entry))
186
- disallowed_tools = dedupe_nonempty((*disallowed_tools, *spec_disallowed))
187
- allowed_tools = dedupe_nonempty((*allowed_tools, *parent_allowed_tools))
206
+ if not spec.claude_native_agents_enabled:
207
+ allowed_tools = [tool for tool in allowed_tools if not _is_claude_agent_tool(tool)]
208
+ parent_allowed_tools = [
209
+ tool for tool in parent_allowed_tools if not _is_claude_agent_tool(tool)
210
+ ]
211
+ passthrough_allowed_tools = [
212
+ tool for tool in passthrough_allowed_tools if not _is_claude_agent_tool(tool)
213
+ ]
214
+ allowed_tools = dedupe_nonempty(
215
+ (*allowed_tools, *parent_allowed_tools, *passthrough_allowed_tools)
216
+ )
217
+ disallowed_tools = dedupe_nonempty(
218
+ (
219
+ *disallowed_tools,
220
+ *spec_disallowed,
221
+ *passthrough_disallowed_tools,
222
+ *_CLAUDE_BUILTIN_AGENT_DENY_TOOLS,
223
+ )
224
+ )
225
+ if disallowed_tools:
226
+ denied_tools = set(disallowed_tools)
227
+ allowed_tools = [tool for tool in allowed_tools if not _is_denied_tool(tool, denied_tools)]
188
228
  command.extend(permission_tail)
189
229
  if allowed_tools:
190
230
  command.extend(("--allowedTools", ",".join(allowed_tools)))
@@ -71,6 +71,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
71
71
  {
72
72
  "agent_name",
73
73
  "agents_payload",
74
+ "claude_native_agents_enabled",
74
75
  "appended_system_prompt",
75
76
  "harness",
76
77
  "pi_extension_entrypoints",
@@ -39,6 +39,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
39
39
  {
40
40
  "agent_name",
41
41
  "agents_payload",
42
+ "claude_native_agents_enabled",
42
43
  "appended_system_prompt",
43
44
  "harness",
44
45
  "pi_extension_entrypoints",
@@ -34,6 +34,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
34
34
  "agent_name",
35
35
  "appended_system_prompt",
36
36
  "agents_payload",
37
+ "claude_native_agents_enabled",
37
38
  "prompt_file_path",
38
39
  "user_turn_content",
39
40
  "report_output_path",
@@ -45,6 +45,7 @@ _PROJECTED_FIELDS: frozenset[str] = _ACCOUNTED_FIELDS
45
45
  _DELEGATED_FIELDS: frozenset[str] = frozenset(
46
46
  {
47
47
  "agents_payload",
48
+ "claude_native_agents_enabled",
48
49
  "base_instructions",
49
50
  "developer_instructions",
50
51
  "harness",
@@ -37,6 +37,7 @@ _PROJECTED_FIELDS: frozenset[str] = frozenset(
37
37
  _DELEGATED_FIELDS: frozenset[str] = frozenset(
38
38
  {
39
39
  "agents_payload",
40
+ "claude_native_agents_enabled",
40
41
  "base_instructions",
41
42
  "developer_instructions",
42
43
  "harness",
@@ -34,6 +34,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
34
34
  "harness",
35
35
  "agent_name",
36
36
  "agents_payload",
37
+ "claude_native_agents_enabled",
37
38
  "prompt",
38
39
  "prompt_file_path",
39
40
  "base_instructions",
@@ -37,6 +37,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
37
37
  "harness",
38
38
  "agent_name",
39
39
  "agents_payload",
40
+ "claude_native_agents_enabled",
40
41
  "prompt",
41
42
  "prompt_file_path",
42
43
  "base_instructions",
@@ -82,6 +82,8 @@ from .env import build_env_plan
82
82
  from .env import merge_env_overrides as _merge_env_overrides
83
83
  from .permissions import (
84
84
  CLAUDE_NATIVE_DELEGATION_TOOLS,
85
+ project_has_claude_agent_copy,
86
+ resolve_claude_native_agent_permission_request,
85
87
  resolve_nested_claude_permission_request,
86
88
  resolve_permission_pipeline,
87
89
  )
@@ -103,6 +105,7 @@ from .prompt import (
103
105
  compose_skill_prompt_documents,
104
106
  sanitize_prior_output,
105
107
  strip_stale_report_paths,
108
+ with_agent_inventory_guidance,
106
109
  )
107
110
  from .reference import (
108
111
  ReferenceItem,
@@ -556,6 +559,7 @@ def materialize_launch_artifacts(
556
559
  approval: str | None = None,
557
560
  unsafe_no_permissions: bool = False,
558
561
  pi_harness_profile: PiHarnessProfileConfig | None = None,
562
+ claude_native_agents_enabled: bool = False,
559
563
  claude_allow_builtin_agents: bool = False,
560
564
  ) -> MaterializedLaunchArtifacts:
561
565
  """Build shared run/spec/permission launch artifacts."""
@@ -606,6 +610,10 @@ def materialize_launch_artifacts(
606
610
  unsafe_no_permissions=unsafe_no_permissions,
607
611
  )
608
612
  spec = resolve_launch_spec_stage(adapter=harness, run_inputs=run_params, perms=perms)
613
+ if harness.id == HarnessId.CLAUDE:
614
+ spec = spec.model_copy(
615
+ update={"claude_native_agents_enabled": claude_native_agents_enabled}
616
+ )
609
617
  return MaterializedLaunchArtifacts(
610
618
  run_params=run_params,
611
619
  permission_config=permission_config,
@@ -643,8 +651,11 @@ def _inject_claude_delegation_guidance(
643
651
  prompt_payload: PreparedPromptPayload,
644
652
  *,
645
653
  project_root: Path,
654
+ claude_native_agents_enabled: bool,
646
655
  ) -> PreparedPromptPayload:
647
656
  """Append delegation guidance when Claude has native agents available."""
657
+ if not claude_native_agents_enabled:
658
+ return prompt_payload
648
659
  claude_agents_dir = project_root / ".claude" / "agents"
649
660
  try:
650
661
  has_claude_agents = claude_agents_dir.is_dir() and any(claude_agents_dir.iterdir())
@@ -1035,7 +1046,9 @@ def _resolve_spawn_prepare_projection(
1035
1046
 
1036
1047
  # Prefer the pre-built, pre-filtered inventory prompt from the bundle.
1037
1048
  if policy.bundle_inventory_prompt:
1038
- agent_inventory_prompt: str | None = policy.bundle_inventory_prompt
1049
+ agent_inventory_prompt: str | None = with_agent_inventory_guidance(
1050
+ policy.bundle_inventory_prompt
1051
+ )
1039
1052
  _, context_prompt = build_launch_context_documents(
1040
1053
  project_root=project_paths.project_root,
1041
1054
  alias_catalog=policy.alias_catalog,
@@ -1111,7 +1124,7 @@ def _resolve_primary_projection(
1111
1124
  if session_mode != "resume":
1112
1125
  # Prefer the pre-built, pre-filtered inventory prompt from the bundle.
1113
1126
  if policy.bundle_inventory_prompt:
1114
- agent_inventory_prompt = policy.bundle_inventory_prompt
1127
+ agent_inventory_prompt = with_agent_inventory_guidance(policy.bundle_inventory_prompt)
1115
1128
  _, context_prompt = build_launch_context_documents(
1116
1129
  project_root=project_paths.project_root,
1117
1130
  alias_catalog=policy.alias_catalog,
@@ -1714,6 +1727,19 @@ def bind_launch_context(
1714
1727
  if model_selection is not None and model_selection.harness_model_id is not None:
1715
1728
  effective_model = model_selection.harness_model_id
1716
1729
 
1730
+ claude_native_agents_enabled = (
1731
+ harness.id == HarnessId.CLAUDE
1732
+ and project_has_claude_agent_copy(project_paths.project_root)
1733
+ )
1734
+ claude_allow_builtin_agents = (
1735
+ resolve_claude_allow_builtin_agents_for_launch(
1736
+ config_snapshot=runtime.config_snapshot,
1737
+ project_root=project_paths.project_root,
1738
+ )
1739
+ if harness.id == HarnessId.CLAUDE
1740
+ else False
1741
+ )
1742
+
1717
1743
  if (
1718
1744
  runtime.composition_surface == LaunchCompositionSurface.SPAWN_PREPARE
1719
1745
  and harness.id == HarnessId.CLAUDE
@@ -1723,6 +1749,7 @@ def bind_launch_context(
1723
1749
  tools=resolved_request.tools,
1724
1750
  profile_tools=profile_tools_for_nested_deny,
1725
1751
  has_profile=has_profile_for_nested_deny,
1752
+ allow_native_agent_tool=claude_native_agents_enabled,
1726
1753
  )
1727
1754
  if tools != resolved_request.tools:
1728
1755
  resolved_request = resolved_request.model_copy(
@@ -1731,6 +1758,14 @@ def bind_launch_context(
1731
1758
  }
1732
1759
  )
1733
1760
 
1761
+ if harness.id == HarnessId.CLAUDE:
1762
+ tools = resolve_claude_native_agent_permission_request(
1763
+ tools=resolved_request.tools,
1764
+ has_claude_agent_copy=claude_native_agents_enabled,
1765
+ )
1766
+ if tools != resolved_request.tools:
1767
+ resolved_request = resolved_request.model_copy(update={"tools": tools})
1768
+
1734
1769
  if (
1735
1770
  runtime.composition_surface == LaunchCompositionSurface.SPAWN_PREPARE
1736
1771
  and harness.id.value in _resolve_deny_headless_harnesses(runtime, project_paths)
@@ -1754,20 +1789,14 @@ def bind_launch_context(
1754
1789
  if harness.id == HarnessId.PI
1755
1790
  else None
1756
1791
  )
1757
- claude_allow_builtin_agents = (
1758
- resolve_claude_allow_builtin_agents_for_launch(
1759
- config_snapshot=runtime.config_snapshot,
1760
- project_root=project_paths.project_root,
1761
- )
1762
- if harness.id == HarnessId.CLAUDE
1763
- else False
1764
- )
1765
1792
  if (
1766
1793
  harness.id == HarnessId.CLAUDE
1767
1794
  and runtime.composition_surface == LaunchCompositionSurface.PRIMARY
1768
1795
  ):
1769
1796
  prompt_payload = _inject_claude_delegation_guidance(
1770
- prompt_payload, project_root=project_root
1797
+ prompt_payload,
1798
+ project_root=project_root,
1799
+ claude_native_agents_enabled=claude_native_agents_enabled,
1771
1800
  )
1772
1801
  materialized = materialize_launch_artifacts(
1773
1802
  harness=harness,
@@ -1798,6 +1827,7 @@ def bind_launch_context(
1798
1827
  approval=resolved_request.execution_policy.approval,
1799
1828
  unsafe_no_permissions=runtime.unsafe_no_permissions,
1800
1829
  pi_harness_profile=pi_harness_profile,
1830
+ claude_native_agents_enabled=claude_native_agents_enabled,
1801
1831
  claude_allow_builtin_agents=claude_allow_builtin_agents,
1802
1832
  )
1803
1833
  run_params = materialized.run_params
@@ -106,6 +106,7 @@ class ResolvedLaunchSpec(BaseModel):
106
106
  # Claude only
107
107
  agents_payload: str | None = None
108
108
  prompt_file_path: str | None = None
109
+ claude_native_agents_enabled: bool = False
109
110
  disallowed_tools: tuple[str, ...] = ()
110
111
 
111
112
  # Claude + Codex
@@ -2,6 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import tomllib
6
+ from pathlib import Path
7
+ from typing import cast
8
+
5
9
  from meridian.lib.safety.permissions import (
6
10
  PermissionConfig,
7
11
  TieredPermissionResolver,
@@ -12,7 +16,14 @@ from meridian.lib.safety.permissions import (
12
16
  compile_tools_to_opencode_permission,
13
17
  infer_codex_sandbox_from_tools,
14
18
  )
15
- from meridian.lib.tools import ToolsField, resolve_tool_action, tools_field_to_map
19
+ from meridian.lib.tools import (
20
+ ToolAction,
21
+ ToolsField,
22
+ normalize_tool_action,
23
+ normalize_tool_key,
24
+ resolve_tool_action,
25
+ tools_field_to_map,
26
+ )
16
27
 
17
28
  PermissionResolverImpl = (
18
29
  TieredPermissionResolver
@@ -39,6 +50,12 @@ and policy enforcement. Profiles can opt out per tool via `tools:`.
39
50
 
40
51
 
41
52
  _NESTED_CLAUDE_DELEGATION_CAPABILITIES: frozenset[str] = frozenset({"agent", "task"})
53
+ _CLAUDE_BUILTIN_AGENT_DENY_RULES: tuple[str, ...] = (
54
+ "agent(Explore)",
55
+ "agent(Plan)",
56
+ "agent(General-purpose)",
57
+ "agent(general-purpose)",
58
+ )
42
59
 
43
60
 
44
61
  def _resolve_opencode_override(*, tools: ToolsField | None) -> str | None:
@@ -47,6 +64,76 @@ def _resolve_opencode_override(*, tools: ToolsField | None) -> str | None:
47
64
  return compile_tools_to_opencode_permission(tools)
48
65
 
49
66
 
67
+ def project_has_claude_agent_copy(project_root: Path) -> bool:
68
+ """Return whether effective Mars config enables Claude native agent copies."""
69
+
70
+ targets: tuple[str, ...] = ()
71
+ agent_copy_harnesses: tuple[str, ...] = ()
72
+ for config_name in ("mars.toml", "mars.local.toml"):
73
+ config_path = project_root / config_name
74
+ if not config_path.is_file():
75
+ continue
76
+ with config_path.open("rb") as handle:
77
+ payload = tomllib.load(handle)
78
+ settings = cast("object", payload.get("settings"))
79
+ if not isinstance(settings, dict):
80
+ continue
81
+ typed_settings = cast("dict[str, object]", settings)
82
+ raw_targets = typed_settings.get("targets")
83
+ if isinstance(raw_targets, list):
84
+ targets = tuple(
85
+ str(target).strip().lower()
86
+ for target in cast("list[object]", raw_targets)
87
+ )
88
+ raw_managed_root = typed_settings.get("managed_root")
89
+ if not targets and isinstance(raw_managed_root, str):
90
+ normalized_root = raw_managed_root.strip().lower()
91
+ if normalized_root:
92
+ targets = (normalized_root,)
93
+ agent_copy = typed_settings.get("agent_copy")
94
+ if not isinstance(agent_copy, dict) or "harnesses" not in agent_copy:
95
+ continue
96
+ typed_agent_copy = cast("dict[str, object]", agent_copy)
97
+ harnesses = typed_agent_copy.get("harnesses")
98
+ if isinstance(harnesses, list):
99
+ agent_copy_harnesses = tuple(
100
+ str(harness).strip().lower()
101
+ for harness in cast("list[object]", harnesses)
102
+ )
103
+ return "claude" in agent_copy_harnesses and ".claude" in targets
104
+
105
+
106
+ def _normalized_tools_map(tools: ToolsField | None) -> dict[str, ToolAction]:
107
+ return {
108
+ normalize_tool_key(key, source="tools"): normalize_tool_action(
109
+ action,
110
+ source=f"tools.{key}",
111
+ )
112
+ for key, action in tools_field_to_map(tools).items()
113
+ }
114
+
115
+
116
+ def resolve_claude_native_agent_permission_request(
117
+ *,
118
+ tools: ToolsField | None,
119
+ has_claude_agent_copy: bool,
120
+ ) -> ToolsField | None:
121
+ """Apply Claude native Agent defaults from the Mars agent-copy boundary."""
122
+
123
+ rules = _normalized_tools_map(tools)
124
+ if not has_claude_agent_copy:
125
+ for key in tuple(rules):
126
+ capability, _separator, _scope = key.partition("(")
127
+ if capability == "agent":
128
+ rules[key] = "deny"
129
+ rules["agent"] = "deny"
130
+ for key in _CLAUDE_BUILTIN_AGENT_DENY_RULES:
131
+ rules[key] = "deny"
132
+ if not rules:
133
+ return tools
134
+ return rules
135
+
136
+
50
137
  def compute_nested_claude_deny_additions(
51
138
  *,
52
139
  profile_tools: ToolsField | None,
@@ -102,6 +189,7 @@ def resolve_nested_claude_permission_request(
102
189
  tools: ToolsField | None,
103
190
  profile_tools: ToolsField | None,
104
191
  has_profile: bool,
192
+ allow_native_agent_tool: bool = False,
105
193
  ) -> ToolsField | None:
106
194
  """Apply Meridian's managed-spawn boundary for nested Claude launches."""
107
195
 
@@ -110,6 +198,10 @@ def resolve_nested_claude_permission_request(
110
198
  profile_tools=profile_tools,
111
199
  existing_tools=tools,
112
200
  )
201
+ if allow_native_agent_tool:
202
+ deny_additions = tuple(
203
+ capability for capability in deny_additions if capability != "agent"
204
+ )
113
205
  resolved_tools = _apply_nested_claude_denies(tools=tools, denied_capabilities=deny_additions)
114
206
  return resolved_tools
115
207
 
@@ -146,6 +238,8 @@ __all__ = [
146
238
  "CLAUDE_NATIVE_DELEGATION_TOOLS",
147
239
  "PermissionResolverImpl",
148
240
  "compute_nested_claude_deny_additions",
241
+ "project_has_claude_agent_copy",
242
+ "resolve_claude_native_agent_permission_request",
149
243
  "resolve_nested_claude_permission_request",
150
244
  "resolve_permission_pipeline",
151
245
  ]