meridian-cli 0.2.16__tar.gz → 0.2.18__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.16 → meridian_cli-0.2.18}/PKG-INFO +1 -1
  2. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/__init__.py +1 -1
  3. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/main.py +2 -1
  4. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/.context/CONTEXT.md +1 -1
  5. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/AGENTS.md +2 -2
  6. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/.context/CONTEXT.md +56 -61
  7. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/.context/CONTEXT.md +1 -1
  8. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/.context/CONTEXT.md +28 -3
  9. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/AGENTS.md +10 -3
  10. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/__init__.py +4 -2
  11. meridian_cli-0.2.18/src/meridian/lib/streaming/disk_watcher.py +277 -0
  12. meridian_cli-0.2.18/src/meridian/lib/streaming/drain_wait.py +120 -0
  13. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/pi_drain.py +51 -368
  14. meridian_cli-0.2.18/src/meridian/lib/streaming/pi_process_cleanup.py +125 -0
  15. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/pi_quiescence.py +7 -0
  16. meridian_cli-0.2.18/src/meridian/lib/streaming/pi_subspawn_tracker.py +359 -0
  17. meridian_cli-0.2.18/src/meridian/lib/streaming/spawn_dispatch.py +93 -0
  18. meridian_cli-0.2.18/src/meridian/lib/streaming/spawn_drain_loop.py +341 -0
  19. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/spawn_manager.py +20 -506
  20. meridian_cli-0.2.18/src/meridian/lib/streaming/spawn_session.py +42 -0
  21. meridian_cli-0.2.18/src/meridian/pi_runtime/.context/CONTEXT.md +143 -0
  22. meridian_cli-0.2.18/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +1399 -0
  23. meridian_cli-0.2.18/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +1211 -0
  24. meridian_cli-0.2.18/src/meridian/pi_runtime/pnpm-workspace.yaml +6 -0
  25. meridian_cli-0.2.16/src/meridian/lib/streaming/disk_watcher.py +0 -202
  26. meridian_cli-0.2.16/src/meridian/lib/streaming/inject_lock.py +0 -21
  27. meridian_cli-0.2.16/src/meridian/pi_runtime/.context/CONTEXT.md +0 -126
  28. meridian_cli-0.2.16/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -4
  29. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/.gitignore +0 -0
  30. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/LICENSE +0 -0
  31. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/README.md +0 -0
  32. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/pyproject.toml +0 -0
  33. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/ag_ui/__init__.pyi +0 -0
  34. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/ag_ui/core.pyi +0 -0
  35. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/AGENTS.md +0 -0
  36. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/__main__.py +0 -0
  37. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/.context/CONTEXT.md +0 -0
  38. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/AGENTS.md +0 -0
  39. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/__init__.py +0 -0
  40. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/_cmd_utils.py +0 -0
  41. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/agent_help.py +0 -0
  42. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/app_tree.py +0 -0
  43. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/argv_normalization.py +0 -0
  44. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/bootstrap.py +0 -0
  45. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/bootstrap_cmd.py +0 -0
  46. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/chat_cmd.py +0 -0
  47. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/config_cmd.py +0 -0
  48. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/doctor_cmd.py +0 -0
  49. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/entrypoint.py +0 -0
  50. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/ext_cmd.py +0 -0
  51. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/ext_registration.py +0 -0
  52. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/hooks_authority.py +0 -0
  53. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/hooks_commands.py +0 -0
  54. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/kg_cmd.py +0 -0
  55. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/mars_passthrough.py +0 -0
  56. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/mermaid_cmd.py +0 -0
  57. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/migrate_cmd.py +0 -0
  58. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/misc_commands.py +0 -0
  59. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/models_cmd.py +0 -0
  60. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/output.py +0 -0
  61. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/primary_launch.py +0 -0
  62. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/qi_cmd.py +0 -0
  63. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/report_cmd.py +0 -0
  64. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/session_cmd.py +0 -0
  65. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/spawn.py +0 -0
  66. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/spawn_inject.py +0 -0
  67. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/startup/__init__.py +0 -0
  68. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/startup/catalog.py +0 -0
  69. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/startup/classify.py +0 -0
  70. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  71. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/startup/help.py +0 -0
  72. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  73. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/startup/policy.py +0 -0
  74. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/streaming_serve.py +0 -0
  75. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/sync_cmd.py +0 -0
  76. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/telemetry_cmd.py +0 -0
  77. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/utils.py +0 -0
  78. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/work_cmd.py +0 -0
  79. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/cli/workspace_cmd.py +0 -0
  80. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/dev/AGENTS.md +0 -0
  81. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/dev/__init__.py +0 -0
  82. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/dev/pytests.py +0 -0
  83. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/__init__.py +0 -0
  84. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  85. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  86. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/bootstrap/__init__.py +0 -0
  87. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/bootstrap/config.py +0 -0
  88. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/bootstrap/project_state.py +0 -0
  89. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  90. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/bootstrap/services.py +0 -0
  91. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  92. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/AGENTS.md +0 -0
  93. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/__init__.py +0 -0
  94. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/agent.py +0 -0
  95. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/bootstrap.py +0 -0
  96. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/catalog_session.py +0 -0
  97. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/model_aliases.py +0 -0
  98. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/models.py +0 -0
  99. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/catalog/skill.py +0 -0
  100. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  101. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/AGENTS.md +0 -0
  102. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/__init__.py +0 -0
  103. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  104. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/backend_handle.py +0 -0
  105. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/checkpoint.py +0 -0
  106. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/command_handler.py +0 -0
  107. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/command_invariants.py +0 -0
  108. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/commands.py +0 -0
  109. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  110. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  111. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  112. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  113. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  114. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  115. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  116. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  117. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  118. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/event_index.py +0 -0
  119. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/event_log.py +0 -0
  120. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/event_observer.py +0 -0
  121. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/event_pipeline.py +0 -0
  122. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/frontend.py +0 -0
  123. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  124. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  125. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  126. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/base.py +0 -0
  127. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/claude.py +0 -0
  128. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/codex.py +0 -0
  129. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/common.py +0 -0
  130. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  131. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/registry.py +0 -0
  132. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  133. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/policy.py +0 -0
  134. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/protocol.py +0 -0
  135. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/recovery.py +0 -0
  136. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/replay.py +0 -0
  137. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/runtime.py +0 -0
  138. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/server.py +0 -0
  139. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/session_service.py +0 -0
  140. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/chat/ws_fanout.py +0 -0
  141. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
  142. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/AGENTS.md +0 -0
  143. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/__init__.py +0 -0
  144. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/catalog.py +0 -0
  145. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/context_config.py +0 -0
  146. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/preserving_edit.py +0 -0
  147. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/project_config_state.py +0 -0
  148. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/project_paths.py +0 -0
  149. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/project_root.py +0 -0
  150. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/schema.py +0 -0
  151. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/settings.py +0 -0
  152. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/config/workspace.py +0 -0
  153. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  154. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/context/AGENTS.md +0 -0
  155. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/context/__init__.py +0 -0
  156. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/context/resolver.py +0 -0
  157. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
  158. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/AGENTS.md +0 -0
  159. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/__init__.py +0 -0
  160. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/child_env.py +0 -0
  161. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/clock.py +0 -0
  162. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/codec.py +0 -0
  163. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/command_strings.py +0 -0
  164. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/context.py +0 -0
  165. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/conversation.py +0 -0
  166. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/depth.py +0 -0
  167. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/domain.py +0 -0
  168. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/execution_policy.py +0 -0
  169. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/formatting.py +0 -0
  170. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/launch_policy_snapshot.py +0 -0
  171. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/lifecycle.py +0 -0
  172. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/logging.py +0 -0
  173. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/overrides.py +0 -0
  174. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/process_cleanup.py +0 -0
  175. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/resolved_context.py +0 -0
  176. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/sink.py +0 -0
  177. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
  178. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/spawn_service.py +0 -0
  179. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/spawn_start.py +0 -0
  180. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/telemetry.py +0 -0
  181. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/types.py +0 -0
  182. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/core/util.py +0 -0
  183. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/diagnostics.py +0 -0
  184. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  185. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/AGENTS.md +0 -0
  186. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/__init__.py +0 -0
  187. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  188. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  189. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  190. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  191. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  192. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  193. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  194. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/context.py +0 -0
  195. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/descriptors.py +0 -0
  196. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/dispatcher.py +0 -0
  197. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/first_party.py +0 -0
  198. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/observability.py +0 -0
  199. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/registry.py +0 -0
  200. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/extensions/types.py +0 -0
  201. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/__init__.py +0 -0
  202. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/adapter.py +0 -0
  203. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/bundle.py +0 -0
  204. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/claude.py +0 -0
  205. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/claude_preflight.py +0 -0
  206. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/claude_utils.py +0 -0
  207. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/codex.py +0 -0
  208. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/codex_rollout.py +0 -0
  209. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/common.py +0 -0
  210. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/AGENTS.md +0 -0
  211. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/__init__.py +0 -0
  212. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/base.py +0 -0
  213. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
  214. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/codex_ws.py +0 -0
  215. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  216. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/errors.py +0 -0
  217. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
  218. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
  219. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/control_action.py +0 -0
  220. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/cost.py +0 -0
  221. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/cursor.py +0 -0
  222. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/errors.py +0 -0
  223. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractor.py +0 -0
  224. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  225. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  226. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  227. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/base.py +0 -0
  228. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/claude.py +0 -0
  229. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/codex.py +0 -0
  230. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  231. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  232. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/extractors/pi.py +0 -0
  233. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/launch_spec.py +0 -0
  234. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/launch_types.py +0 -0
  235. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/opencode.py +0 -0
  236. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/opencode_storage.py +0 -0
  237. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  238. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  239. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  240. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  241. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/base.py +0 -0
  242. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  243. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/codex.py +0 -0
  244. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  245. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  246. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/permission_broker.py +0 -0
  247. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/pi.py +0 -0
  248. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
  249. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/pi_paths.py +0 -0
  250. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  251. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  252. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/__init__.py +0 -0
  253. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/_guards.py +0 -0
  254. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  255. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  256. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_claude.py +0 -0
  257. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  258. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
  259. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
  260. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
  261. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
  262. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
  263. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_pi_native_tui.py +0 -0
  264. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/project_pi_rpc.py +0 -0
  265. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  266. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/registry.py +0 -0
  267. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/semantics.py +0 -0
  268. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/session_detection.py +0 -0
  269. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/harness/transcript.py +0 -0
  270. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  271. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/AGENTS.md +0 -0
  272. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/__init__.py +0 -0
  273. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  274. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  275. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  276. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  277. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/builtin/base.py +0 -0
  278. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  279. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  280. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/config.py +0 -0
  281. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/dispatch.py +0 -0
  282. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/interval.py +0 -0
  283. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/registry.py +0 -0
  284. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/runner.py +0 -0
  285. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/hooks/types.py +0 -0
  286. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ignores.py +0 -0
  287. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  288. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/kg/AGENTS.md +0 -0
  289. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/kg/__init__.py +0 -0
  290. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/kg/graph.py +0 -0
  291. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/kg/report.py +0 -0
  292. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/kg/serializer.py +0 -0
  293. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/kg/types.py +0 -0
  294. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
  295. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/AGENTS.md +0 -0
  296. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/__init__.py +0 -0
  297. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/artifact_io.py +0 -0
  298. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  299. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/claude_session_access.py +0 -0
  300. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/command.py +0 -0
  301. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/compiler.py +0 -0
  302. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/composition.py +0 -0
  303. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/composition_spawn.py +0 -0
  304. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/constants.py +0 -0
  305. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/context.py +0 -0
  306. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/cwd.py +0 -0
  307. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/env.py +0 -0
  308. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/errors.py +0 -0
  309. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/extract.py +0 -0
  310. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/fork.py +0 -0
  311. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/launch_types.py +0 -0
  312. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/materialize.py +0 -0
  313. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/permissions.py +0 -0
  314. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/plan.py +0 -0
  315. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/policies.py +0 -0
  316. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/policy_snapshot.py +0 -0
  317. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  318. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  319. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/__init__.py +0 -0
  320. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/ports.py +0 -0
  321. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/primary_attach.py +0 -0
  322. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  323. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/runner.py +0 -0
  324. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/session.py +0 -0
  325. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
  326. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  327. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/prompt.py +0 -0
  328. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/reference.py +0 -0
  329. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/report.py +0 -0
  330. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/request.py +0 -0
  331. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/resolve.py +0 -0
  332. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/run_inputs.py +0 -0
  333. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/runner_helpers.py +0 -0
  334. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/session_scope.py +0 -0
  335. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/signals.py +0 -0
  336. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  337. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  338. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  339. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  340. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  341. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/streaming_runner.py +0 -0
  342. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/text_utils.py +0 -0
  343. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/types.py +0 -0
  344. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/workspace.py +0 -0
  345. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/workspace_projection.py +0 -0
  346. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/launch/written_files.py +0 -0
  347. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  348. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/markdown/AGENTS.md +0 -0
  349. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/markdown/__init__.py +0 -0
  350. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/markdown/extract.py +0 -0
  351. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/markdown/types.py +0 -0
  352. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  353. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  354. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/__init__.py +0 -0
  355. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/report.py +0 -0
  356. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/scanner.py +0 -0
  357. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/serializer.py +0 -0
  358. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  359. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  360. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  361. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  362. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  363. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  364. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  365. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  366. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  367. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/style/types.py +0 -0
  368. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/mermaid/validator.py +0 -0
  369. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  370. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/observability/AGENTS.md +0 -0
  371. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/observability/__init__.py +0 -0
  372. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/observability/debug_tracer.py +0 -0
  373. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/observability/trace_helpers.py +0 -0
  374. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
  375. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/AGENTS.md +0 -0
  376. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/__init__.py +0 -0
  377. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/catalog.py +0 -0
  378. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/commands.py +0 -0
  379. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/config.py +0 -0
  380. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/config_surface.py +0 -0
  381. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/context.py +0 -0
  382. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/diag.py +0 -0
  383. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/hooks.py +0 -0
  384. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/init_ops.py +0 -0
  385. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/mars.py +0 -0
  386. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/migration.py +0 -0
  387. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/pruning.py +0 -0
  388. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/qi.py +0 -0
  389. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/reference.py +0 -0
  390. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/reference_recovery.py +0 -0
  391. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/report.py +0 -0
  392. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/runtime.py +0 -0
  393. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_corpus.py +0 -0
  394. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_export.py +0 -0
  395. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_log.py +0 -0
  396. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_log_render.py +0 -0
  397. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_render.py +0 -0
  398. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_repair.py +0 -0
  399. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_search.py +0 -0
  400. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_target.py +0 -0
  401. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/session_transcript.py +0 -0
  402. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
  403. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  404. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/__init__.py +0 -0
  405. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/api.py +0 -0
  406. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
  407. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/execute.py +0 -0
  408. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  409. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
  410. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/execute_runner.py +0 -0
  411. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
  412. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  413. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/models.py +0 -0
  414. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/prepare.py +0 -0
  415. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/spawn/query.py +0 -0
  416. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  417. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/work_attachment.py +0 -0
  418. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/work_dashboard.py +0 -0
  419. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/work_lifecycle.py +0 -0
  420. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/work_sessions.py +0 -0
  421. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/ops/workspace.py +0 -0
  422. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  423. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/AGENTS.md +0 -0
  424. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/__init__.py +0 -0
  425. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/locking.py +0 -0
  426. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  427. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  428. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  429. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/process_scope/base.py +0 -0
  430. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
  431. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/process_scope/posix.py +0 -0
  432. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
  433. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/terminate.py +0 -0
  434. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/unix_modules.py +0 -0
  435. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/platform/windows_job.py +0 -0
  436. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  437. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/safety/AGENTS.md +0 -0
  438. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/safety/__init__.py +0 -0
  439. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/safety/budget.py +0 -0
  440. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/safety/guardrails.py +0 -0
  441. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/safety/permissions.py +0 -0
  442. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/safety/redaction.py +0 -0
  443. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/service_context.py +0 -0
  444. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  445. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/spawn/AGENTS.md +0 -0
  446. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/spawn/__init__.py +0 -0
  447. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/spawn/archive.py +0 -0
  448. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/.context/CONTEXT.md +0 -0
  449. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/AGENTS.md +0 -0
  450. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/__init__.py +0 -0
  451. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/artifact_store.py +0 -0
  452. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/atomic.py +0 -0
  453. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/event_store.py +0 -0
  454. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/history.py +0 -0
  455. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/launch_boundary.py +0 -0
  456. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/liveness.py +0 -0
  457. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/managed_primary.py +0 -0
  458. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/paths.py +0 -0
  459. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/primary_meta.py +0 -0
  460. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/process_scope_projection.py +0 -0
  461. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/reaper.py +0 -0
  462. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/runtime_root.py +0 -0
  463. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/session_store.py +0 -0
  464. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  465. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  466. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn/__init__.py +0 -0
  467. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn/model.py +0 -0
  468. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn/repository.py +0 -0
  469. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  470. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn/transitions.py +0 -0
  471. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/spawn_store.py +0 -0
  472. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/user_paths.py +0 -0
  473. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/wordgen.py +0 -0
  474. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/wordlists.py +0 -0
  475. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/state/work_store.py +0 -0
  476. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/control_socket.py +0 -0
  477. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/drain_policy.py +0 -0
  478. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/event_observers.py +0 -0
  479. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/heartbeat.py +0 -0
  480. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/signal_canceller.py +0 -0
  481. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/streaming/types.py +0 -0
  482. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/__init__.py +0 -0
  483. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  484. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/correlation.py +0 -0
  485. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/events.py +0 -0
  486. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/init.py +0 -0
  487. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  488. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/maintenance.py +0 -0
  489. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/observer.py +0 -0
  490. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/observers.py +0 -0
  491. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/query.py +0 -0
  492. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/reader.py +0 -0
  493. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/retention.py +0 -0
  494. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/router.py +0 -0
  495. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/sinks.py +0 -0
  496. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/telemetry/status.py +0 -0
  497. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/tools.py +0 -0
  498. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/utils/__init__.py +0 -0
  499. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/lib/utils/time.py +0 -0
  500. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/README.md +0 -0
  501. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/__init__.py +0 -0
  502. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
  503. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
  504. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +0 -0
  505. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +0 -0
  506. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  507. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
  508. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +0 -0
  509. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
  510. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
  511. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
  512. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
  513. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
  514. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
  515. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
  516. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +0 -0
  517. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
  518. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
  519. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
  520. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
  521. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/package.json +0 -0
  522. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  523. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
  524. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/pi_runtime/vitest.config.ts +0 -0
  525. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/plugin_api/AGENTS.md +0 -0
  526. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/plugin_api/__init__.py +0 -0
  527. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/plugin_api/config.py +0 -0
  528. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/plugin_api/fs.py +0 -0
  529. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/plugin_api/git.py +0 -0
  530. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/plugin_api/state.py +0 -0
  531. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/plugin_api/types.py +0 -0
  532. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/py.typed +0 -0
  533. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/server/AGENTS.md +0 -0
  534. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/src/meridian/server/__init__.py +0 -0
  535. {meridian_cli-0.2.16 → meridian_cli-0.2.18}/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.16
3
+ Version: 0.2.18
4
4
  Summary: Orchestrate CLI + MCP server for multi-model agent workflows
5
5
  Project-URL: Homepage, https://github.com/haowjy/meridian-cli
6
6
  Project-URL: Repository, https://github.com/haowjy/meridian-cli
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.2.16"
5
+ __version__ = "0.2.18"
@@ -1117,7 +1117,8 @@ def main(argv: Sequence[str] | None = None) -> None:
1117
1117
 
1118
1118
  if cleaned_args and cleaned_args[0] == "mars":
1119
1119
  _emit_usage_command_invoked(cleaned_args)
1120
- _run_mars_passthrough(cleaned_args[1:], output_format=options.output.format)
1120
+ with _directory_env_scope(options.project_root, options.directory_explicit):
1121
+ _run_mars_passthrough(cleaned_args[1:], output_format=options.output.format)
1121
1122
 
1122
1123
  if effective_agent_mode and (not cleaned_args or _is_root_help_request(cleaned_args)):
1123
1124
  _print_agent_root_help()
@@ -41,7 +41,7 @@ Per-harness mapping:
41
41
  - Codex subprocess: `codex exec --json`; connection: `codex app-server` (real WebSocket, JSON-RPC 2.0)
42
42
  - OpenCode subprocess: `opencode run`; connection: `opencode serve` (HTTP+SSE)
43
43
  - Cursor subprocess: `cursor agent <prompt>` (stdout NDJSON, no connection path — subprocess-only)
44
- - Pi subprocess/connection: `pi rpc --mode rpc` (JSON-RPC stdio); Pi has no subprocess-only path — the RPC mode is the connection
44
+ - Pi subprocess/connection: `pi --mode rpc` (JSON-RPC stdio); Pi has no subprocess-only path — the RPC mode is the connection
45
45
 
46
46
  ### Pi: Extension-Based Architecture
47
47
 
@@ -40,7 +40,7 @@ Per-harness commands:
40
40
  - Codex subprocess: `codex exec --json`; connection: `codex app-server` (real WebSocket, JSON-RPC 2.0)
41
41
  - OpenCode subprocess: `opencode run`; connection: `opencode serve` (HTTP+SSE)
42
42
  - Cursor subprocess: `cursor agent <prompt>` (stdout NDJSON, no connection path — subprocess-only)
43
- - Pi subprocess/connection: `pi rpc --mode rpc` (JSON-RPC stdio; Pi has no subprocess-only path — the RPC mode is the connection)
43
+ - Pi subprocess/connection: `pi --mode rpc` (JSON-RPC stdio; Pi has no subprocess-only path — the RPC mode is the connection)
44
44
 
45
45
  ## Bootstrap Sequence Is Load-Bearing
46
46
 
@@ -103,7 +103,7 @@ unique — always check `event.harness_id`. `turn/completed` is Codex; OpenCode
103
103
 
104
104
  ## Adding a Harness
105
105
 
106
- Full guide: [`docs/harness-integration.md`](../../../docs/harness-integration.md) —
106
+ Full guide: [`docs/harness-integration.md`](../../../../docs/harness-integration.md) —
107
107
  end-to-end with Pi as the worked example. Covers probing, adapter, projection,
108
108
  extraction, connection, semantics, wrapper/runtime, session parity, model/catalog,
109
109
  and verification.
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Architecture
4
4
 
5
- Four concrete transports share the `HarnessConnection[SpecT]` ABC from `base.py`:
5
+ Five concrete transports share the `HarnessConnection[SpecT]` ABC from `base.py`:
6
6
 
7
7
  | File | Class | Transport | Protocol |
8
8
  |---|---|---|---|
@@ -10,30 +10,30 @@ Four concrete transports share the `HarnessConnection[SpecT]` ABC from `base.py`
10
10
  | `codex_ws.py` | `CodexConnection` | WebSocket | JSON-RPC 2.0 |
11
11
  | `opencode_http.py` | `OpenCodeConnection` | HTTP + SSE | REST + event stream |
12
12
  | `cursor_subprocess.py` | `CursorSubprocessConnection` | stdout NDJSON (read-only) | stream-json |
13
- | `pi_rpc.py` | `PiRpcConnection` | stdin/stdout JSONL | JSON-RPC (pi rpc mode) |
13
+ | `pi_rpc.py` | `PiRpcConnection` | stdin/stdout JSONL | JSON-RPC (Pi RPC mode) |
14
14
 
15
- **`claude_ws.py` is not a WebSocket.** The filename is a historical artifact. The connection
16
- writes NDJSON to the subprocess stdin and reads NDJSON from stdout. The `--input-format
17
- stream-json --output-format stream-json` flags select this mode. Do not reach for a WS
18
- library when reading this file.
15
+ **`claude_ws.py` is not a WebSocket.** The filename is historical. The connection
16
+ writes NDJSON to subprocess stdin and reads NDJSON from stdout. The `--input-format
17
+ stream-json --output-format stream-json` flags select this mode.
19
18
 
20
- **`pi_rpc.py` (`PiRpcConnection`) has two event sources.** Primary events arrive on stdout
21
- (JSON-RPC protocol). Lifecycle events arrive via a sidecar JSONL file (`pi_lifecycle_file.py`,
22
- `PiLifecycleEventTailer`). The `events()` async iterator merges both sources: it reads stdout
23
- lines and polls the sidecar file at 50ms intervals, yielding lifecycle events as they appear.
24
- Lifecycle events on stdout are silently dropped the sidecar is authoritative.
19
+ **`pi_rpc.py` is transport-only.** It reads Pi stdout JSONL, writes prompt/abort JSON,
20
+ normalizes startup/error/session events, and emits Meridian phase diagnostics. It does
21
+ not tail a separate lifecycle event file. Pi background-work authority lives in disk files written
22
+ by Pi extensions and consumed by `lib/streaming/` (`PiDiskWatcher` / `PiQuiescenceTracker`).
23
+ If a canonical Pi lifecycle event appears on stdout, `PiRpcConnection` logs and drops it;
24
+ stdout is not the quiescence authority.
25
25
 
26
26
  **Pi startup requires an initial prompt.** Unlike other harnesses that can start in a
27
27
  listening state, spawned Pi RPC sessions must receive an initial user message. The
28
28
  connection validates this (`_validate_initial_prompt_requirement()`) and enforces a
29
- 30-second timeout for the first response (`_FIRST_STDOUT_AFTER_INITIAL_PROMPT_TIMEOUT_SECONDS`).
29
+ 30-second timeout for the first stdout event after the prompt
30
+ (`_FIRST_STDOUT_AFTER_INITIAL_PROMPT_TIMEOUT_SECONDS`).
30
31
 
31
32
  **`opencode_http.py` imports `OPENCODE_CONFIG_CONTENT_ENV` from
32
33
  `meridian.lib.launch.workspace_projection`** — a cross-layer dependency on `launch/`
33
34
  rather than `harness/`. This is intentional: `workspace_projection.py` was moved to
34
35
  `launch/` to break a circular bootstrap dependency. Connections modules may import
35
- shared constants from `launch/` when those constants live there by architecture
36
- necessity.
36
+ shared constants from `launch/` when those constants live there by architecture necessity.
37
37
 
38
38
  ## Contracts
39
39
 
@@ -41,7 +41,7 @@ necessity.
41
41
 
42
42
  Required abstract methods — every subclass must implement all of these:
43
43
 
44
- - `state` property → `ConnectionState` (lifecycle: `created → starting → connected → stopping → stopped / failed`)
44
+ - `state` property → `ConnectionState` (`created → starting → connected → stopping → stopped / failed`)
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`
@@ -65,40 +65,41 @@ supports the capability:
65
65
 
66
66
  `event_type` is scoped to the producing harness — it is **not globally unique**.
67
67
  Always qualify with `harness_id` before branching on `event_type`. Same-named events
68
- across harnesses have different semantics. See parent `.context/` for the full terminal
69
- event classification table.
68
+ across harnesses have different semantics. See parent `.context/` for terminal event
69
+ classification.
70
70
 
71
71
  ### ConnectionCapabilities
72
72
 
73
73
  Frozen dataclass declared as `_CAPABILITIES` on each concrete class. Set once at class
74
74
  definition, not per-instance. Fields:
75
75
 
76
- - `mid_turn_injection`: `"queue"` (Claude), `"interrupt_restart"` (Codex), `"http_post"` (OpenCode),
77
- `"queue"` (Cursor **but `send_user_message` always raises**; injection is not implemented
78
- for MVP. The type does not have an "unsupported" literal, so `"queue"` is used as a
79
- placeholder. Do not call `send_user_message` on a Cursor connection.)
76
+ - `mid_turn_injection`: `"queue"` (Claude/Pi), `"interrupt_restart"` (Codex), `"http_post"` (OpenCode),
77
+ `"queue"` (Cursor placeholder; `send_user_message` raises)
80
78
  - `supports_cancel`, `supports_steer`, `runtime_model_switch`, `structured_reasoning`
81
79
  - `supports_primary_observer` — only Codex and OpenCode
82
80
  - `supports_runtime_hitl` — runtime HITL through the connection; only Codex
83
- - `supported_startup_phases` — frozenset of phase names the adapter can observe
81
+ - `supported_startup_phases` — phase names the adapter can observe
84
82
 
85
- ### Pi Lifecycle Sidecar (pi_lifecycle_file.py)
83
+ ### Pi RPC Stdout Path
86
84
 
87
- `PiLifecycleEventTailer` provides incremental reading of the JSONL sidecar file
88
- written by Pi extensions. Key design points:
85
+ `PiRpcConnection.events()` consumes exactly one stdout reader task. The event loop:
89
86
 
90
- - **Open/close lifecycle**: `open()` resets offset and partial buffer; `close()` releases
91
- the file handle. The tailer is opened in `events()` and closed in `finally`.
92
- - **Incremental reading**: `read_ready_events()` seeks to the last-known offset and reads
93
- new bytes. Partial lines (no trailing newline) are buffered for the next read.
94
- - **Catch-up at EOF**: `catch_up_to_eof()` reads all remaining events called at
95
- `agent_end` and at process exit to ensure no lifecycle events are missed.
96
- - **Parse validation**: each line goes through `parse_pi_lifecycle_event_line()` which
97
- validates schema version, parent spawn ID, correlation ID, and event type allowlist.
98
- Invalid lines become `meridian.lifecycle.parse_error` events on the stream.
87
+ 1. yields queued Meridian phase events (`process_spawned`, `initial_prompt_sent`, etc.);
88
+ 2. waits for the first stdout event with a 30-second deadline after the initial prompt;
89
+ 3. parses each stdout line as a Pi JSON object;
90
+ 4. emits `first_pi_event_received` and `session_event_seen` / `session_event_absent` phase events;
91
+ 5. yields normalized `HarnessEvent` objects to the streaming drain loop.
99
92
 
100
- The file is prepared by `prepare_pi_lifecycle_event_file()` creates the file in the
101
- spawn log dir and sets `PI_LIFECYCLE_EVENT_FILE_ENV` for the Pi subprocess.
93
+ Malformed stdout becomes `meridian.lifecycle.parse_error` so bad protocol output fails
94
+ closed and stays visible. Canonical lifecycle-looking stdout events are ignored because
95
+ current Pi coordination is disk-backed.
96
+
97
+ ### Pi Stop Path
98
+
99
+ `stop(reason="quiescent")` sends `{"type": "abort"}` to the Pi subprocess, waits a
100
+ 5-second abort grace period, then escalates to process termination if Pi is still alive.
101
+ The streaming layer records cleanup phases (`cleanup_running`, `cleanup_completed`,
102
+ `cleanup_escalated`, `cleanup_failed`) around this transport stop.
102
103
 
103
104
  ### ServerRequestHandler — Policy Boundary
104
105
 
@@ -134,17 +135,15 @@ Both are 10 MiB uniform across adapters:
134
135
  ### Claude: Stdin/Stdout Instead of WebSocket
135
136
 
136
137
  Claude CLI supports `--input-format stream-json --output-format stream-json` for
137
- bidirectional NDJSON over process pipes. This avoids the need for a local HTTP server
138
- or WebSocket listener. The `_ws.py` filename predates this transport and was kept to
139
- avoid churn. The implementation has no WebSocket dependency.
138
+ bidirectional NDJSON over process pipes. This avoids a local HTTP server or WebSocket
139
+ listener. The `_ws.py` filename predates this transport and was kept to avoid churn.
140
140
 
141
141
  ### Codex: Port Pre-Reservation
142
142
 
143
143
  `CodexConnection` and `passthrough/codex.py` both use `socket.socket` to bind port 0
144
144
  and capture the ephemeral port before handing it to the subprocess. This is a TOCTOU
145
145
  race (the OS may reassign the port before `codex app-server` binds it). If that happens,
146
- `PortBindError` is raised and the caller retries with a new port. This is the intended
147
- recovery path — do not suppress `PortBindError`.
146
+ `PortBindError` is raised and the caller retries with a new port.
148
147
 
149
148
  ### Observer Endpoint
150
149
 
@@ -152,38 +151,34 @@ Codex exposes a WebSocket URL (`ws://`); OpenCode exposes an HTTP URL (`http://`
152
151
  The `ObserverEndpoint` dataclass captures which transport and URL so `passthrough/` can
153
152
  build the correct TUI attach command without knowing connection internals.
154
153
 
155
- ### Pi: Dual Event Sources
154
+ ### Pi: JSON-RPC Transport vs Quiescence State
156
155
 
157
- `PiRpcConnection.events()` merges two async event sources: stdout lines (primary
158
- JSON-RPC protocol stream) and the lifecycle sidecar file. The lifecycle sidecar is
159
- polled at 50ms intervals. The merge uses `asyncio.wait_for` with a unified timeout
160
- system stdout reads are interleaved with sidecar polls, and timeouts trigger
161
- sidecar re-reads. This ensures lifecycle events are delivered promptly without
162
- starving the stdout stream.
156
+ Pi's connection layer should stay a protocol adapter. It knows how to launch Pi RPC,
157
+ send prompts/abort, read stdout JSONL, redact command history, and classify startup
158
+ failure. It should not grow child-spawn or background-task policy. That policy belongs
159
+ in `lib/streaming/` because it combines harness events with spawn records, bash records,
160
+ notification markers, deadlines, and cleanup decisions.
163
161
 
164
162
  ### Pi: First-Event Timeout
165
163
 
166
- A spawned Pi session must respond to the initial prompt within 30 seconds. If no
167
- stdout event arrives in that window, the connection transitions to `failed` with
168
- reason `pi_rpc_no_response_after_initial_prompt`. This timeout is independent of
169
- the drain loop's child-wave timeout it only applies during the connection startup
170
- phase, before the Pi process is known to be responsive.
164
+ A spawned Pi session must respond to the initial prompt within 30 seconds. If no stdout
165
+ event arrives in that window, the connection transitions to `failed` with reason
166
+ `pi_rpc_no_response_after_initial_prompt`. This timeout is independent of the drain
167
+ loop's child-wave timeout; it only applies before Pi is known responsive.
171
168
 
172
169
  ### Pi: Prompt Redaction
173
170
 
174
- PiCLI args may contain secrets (e.g., `--api-key`). `redact_pi_command_for_history()`
171
+ Pi CLI args may contain secrets (e.g., `--api-key`). `redact_pi_command_for_history()`
175
172
  in `pi_lifecycle_events.py` scans argv tokens for secret-bearing flags and replaces
176
- their values with `<redacted>` before writing to the history log. This is the same
177
- pattern as Claude's credential redaction but operates on the raw argv list rather
178
- than the full command string.
173
+ their values with `<redacted>` before writing to history.
179
174
 
180
175
  ## Related .context/
181
176
 
182
177
  - [../../.context/CONTEXT.md](../../.context/CONTEXT.md) — drain loop, terminal event semantics,
183
- SpawnParams accounting
178
+ `SpawnParams` accounting
184
179
  - [../../passthrough/.context/CONTEXT.md](../../passthrough/.context/CONTEXT.md) — uses
185
180
  `ObserverEndpoint` and `ConnectionConfig` for TUI attach sequencing
186
181
  - [../../../../pi_runtime/.context/CONTEXT.md](../../../../pi_runtime/.context/CONTEXT.md) — Pi
187
- extensions that write the lifecycle sidecar; build pipeline
188
- - [../../../../pi_runtime/extensions/meridian-lifecycle/.context/CONTEXT.md](../../../../pi_runtime/extensions/meridian-lifecycle/.context/CONTEXT.md) —
189
- canonical lifecycle events consumed by the tailer
182
+ extensions that write disk-backed coordination state
183
+ - [../../../streaming/.context/CONTEXT.md](../../../streaming/.context/CONTEXT.md) — Pi
184
+ quiescence drain policy that consumes disk state
@@ -13,7 +13,7 @@ project_codex_streaming.py → CodexLaunchSpec → args + env (codex app-serv
13
13
  project_opencode_subprocess.py → OpenCodeLaunchSpec → args + env (opencode run)
14
14
  project_opencode_streaming.py → OpenCodeLaunchSpec → args + env (opencode serve)
15
15
  project_cursor.py → ResolvedLaunchSpec → args (cursor agent)
16
- project_pi_rpc.py → ResolvedLaunchSpec → args + env (pi rpc --mode rpc)
16
+ project_pi_rpc.py → ResolvedLaunchSpec → args + env (pi --mode rpc)
17
17
  project_pi_native_tui.py → ResolvedLaunchSpec → args + env (pi native TUI, primary only)
18
18
  pi_extension_projection.py → (extension dist artifacts → per-launch materialization, no spec dependency)
19
19
  ```
@@ -22,6 +22,18 @@ SpawnSession
22
22
  └─ control_actions: ControlActionCoordinator
23
23
  ```
24
24
 
25
+ The implementation is split by responsibility:
26
+
27
+ - `spawn_manager.py` — public registry/control API and generic live-spawn lifecycle
28
+ - `spawn_dispatch.py` — connection creation/start dispatch
29
+ - `spawn_drain_loop.py` — drain loop, persistence/observer/fan-out ordering, outcome priority
30
+ - `spawn_session.py` — `SpawnSession` and `DrainOutcome` carriers
31
+ - `pi_drain.py` — Pi spawned-session quiescence coordinator
32
+ - `pi_subspawn_tracker.py` — Pi child-spawn and notification tracking
33
+ - `disk_watcher.py` / `pi_quiescence.py` — disk-backed Pi quiescence inputs
34
+ - `drain_wait.py` — bounded wait helpers for drain/cleanup paths
35
+ - `pi_process_cleanup.py` — tracked Pi child process cleanup
36
+
25
37
  ## Contracts
26
38
 
27
39
  ### Drain Loop Ordering
@@ -64,7 +76,7 @@ from different event loops.
64
76
  ```
65
77
  start_spawn()
66
78
  → dispatch_start() — creates HarnessConnection, calls connection.start()
67
- _drain_loop() — asyncio.Task, until terminal or error
79
+ SpawnDrainLoop.run() — asyncio.Task, until terminal or error
68
80
  → ControlSocketServer.start() — binds per-spawn control endpoint
69
81
  → _start_heartbeat() — asyncio.Task, touches sentinel every 30s
70
82
  ```
@@ -144,6 +156,12 @@ live in `pi_drain.py:PiDrainCoordinator`.
144
156
  behavior to `PiDrainCoordinator` unless the change is purely generic event persistence,
145
157
  observer dispatch, subscriber fan-out, heartbeat, or control-socket handling.
146
158
 
159
+ `PiSubspawnTracker` owns the mutable child-spawn view inside the coordinator. It filters
160
+ unresolved stale candidates to numeric allocated-looking `p*` directories, tracks
161
+ active child ids, preserves idle epochs across disk wakeups, and marks whether a child
162
+ wave needs re-arming. `PiDrainCoordinator` uses that summarized state to make deadline
163
+ and finalization decisions.
164
+
147
165
  ### Disk State Authority
148
166
 
149
167
  Pi extensions coordinate with Python through disk files:
@@ -155,6 +173,11 @@ Pi extensions coordinate with Python through disk files:
155
173
  Stdout lifecycle-like messages are diagnostic. They are not the state authority for
156
174
  quiescence.
157
175
 
176
+ Disk changes are not passive. `PiDiskWatcher` wakes the drain loop when a watched file
177
+ changes, and the drain loop re-evaluates quiescence on those wakeups. Terminal-event
178
+ micro-drain re-checks disk before accepting success so a just-written child row,
179
+ bash update, or notification marker cannot be missed.
180
+
158
181
  ### Child Wave Timeout
159
182
 
160
183
  When the parent agent is idle and disk-backed child/background work is still pending,
@@ -168,7 +191,8 @@ When a terminal event arrives but quiescence is not yet confirmed, `PiDrainCoord
168
191
  enters micro-drain mode. It gives already-buffered or just-written disk/event activity a
169
192
  short chance to arrive before accepting the terminal event as the final outcome. This
170
193
  covers races where child state or notification markers land immediately after
171
- `agent_end`.
194
+ `agent_end`. Micro-drain is disk-aware: timeout alone is not enough to finalize until
195
+ the latest disk-backed state has been read.
172
196
 
173
197
  ### Pi Phase Events
174
198
 
@@ -195,7 +219,8 @@ These are written to `history.jsonl` alongside harness events and are visible in
195
219
 
196
220
  When the Pi process exits with active tracked children (crashed, killed, or otherwise
197
221
  terminated before quiescence), `PiDrainCoordinator` coordinates cleanup through the
198
- tracked child process metadata it has observed:
222
+ tracked child process metadata it has observed. Process cleanup lives in
223
+ `pi_process_cleanup.py` so `SpawnManager` does not own Pi-specific process-tree policy:
199
224
 
200
225
  - **POSIX**: iterates captured process group IDs, sends `SIGTERM` via `os.killpg()`,
201
226
  waits 250ms, confirms liveness with `os.killpg(pgid, 0)`, then sends `SIGKILL` if
@@ -6,8 +6,9 @@ core mechanism that moves events from the harness outward to persistence, observ
6
6
  and the subscriber queue.
7
7
 
8
8
  Mostly mechanism. Generic terminal behavior lives in `DrainPolicy`; Pi spawned-session
9
- quiescence is the explicit exception, isolated in `pi_drain.py` so Pi child-wave,
10
- notification, and disk-state policy does not sprawl through `SpawnManager`.
9
+ quiescence is the explicit exception. Keep Pi child-wave, notification, disk-state,
10
+ and tracked-process cleanup policy behind the Pi coordinator/tracker modules instead
11
+ of growing `SpawnManager`.
11
12
 
12
13
  ## Mental Model
13
14
 
@@ -69,9 +70,15 @@ means the manager died or the spawn is orphaned.
69
70
 
70
71
  ## Entry Points
71
72
 
72
- - `spawn_manager.py` — `SpawnManager`: generic live-spawn lifecycle and event drain
73
+ - `spawn_manager.py` — `SpawnManager`: public live-spawn registry/control API
74
+ - `spawn_dispatch.py` — connection creation/start dispatch
75
+ - `spawn_drain_loop.py` — event drain, persistence/observer/fan-out ordering, outcome priority
76
+ - `spawn_session.py` — `SpawnSession`, `DrainOutcome`
73
77
  - `pi_drain.py` — `PiDrainCoordinator`: Pi spawned-session quiescence policy
78
+ - `pi_subspawn_tracker.py` — Pi child-spawn, notification, and wave tracking
74
79
  - `disk_watcher.py` / `pi_quiescence.py` — disk-backed Pi background-work state
80
+ - `drain_wait.py` — bounded drain/cleanup wait helpers
81
+ - `pi_process_cleanup.py` — tracked Pi child process cleanup
75
82
  - `drain_policy.py` — `DrainPolicy`, `SingleTurnDrainPolicy`, `PersistentDrainPolicy`
76
83
  - `control_socket.py` — per-spawn inject endpoint
77
84
  - `event_observers.py` — `EventObserverRegistry`, `EventObserver`, `CallbackObserver`
@@ -6,7 +6,8 @@ from meridian.lib.streaming.types import ControlMessage, InjectResult
6
6
 
7
7
  if TYPE_CHECKING:
8
8
  from meridian.lib.streaming.control_socket import ControlSocketServer
9
- from meridian.lib.streaming.spawn_manager import SpawnManager, SpawnSession
9
+ from meridian.lib.streaming.spawn_manager import SpawnManager
10
+ from meridian.lib.streaming.spawn_session import SpawnSession
10
11
 
11
12
  __all__ = [
12
13
  "ControlMessage",
@@ -23,7 +24,8 @@ def __getattr__(name: str) -> object:
23
24
 
24
25
  return ControlSocketServer
25
26
  if name in {"SpawnManager", "SpawnSession"}:
26
- from meridian.lib.streaming.spawn_manager import SpawnManager, SpawnSession
27
+ from meridian.lib.streaming.spawn_manager import SpawnManager
28
+ from meridian.lib.streaming.spawn_session import SpawnSession
27
29
 
28
30
  return {"SpawnManager": SpawnManager, "SpawnSession": SpawnSession}[name]
29
31
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")