meridian-cli 0.2.26__tar.gz → 0.2.28__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.26 → meridian_cli-0.2.28}/PKG-INFO +1 -1
  2. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/__init__.py +1 -1
  3. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/.context/CONTEXT.md +54 -0
  4. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/lifecycle.py +42 -0
  5. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/process_cleanup.py +8 -8
  6. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/spawn_lifecycle.py +24 -4
  7. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/spawn_service.py +130 -78
  8. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/runner.py +0 -3
  9. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/streaming_runner.py +93 -9
  10. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/process_scope/base.py +29 -0
  11. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/.context/CONTEXT.md +14 -5
  12. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/process_scope_projection.py +22 -6
  13. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/reaper.py +55 -3
  14. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn/model.py +13 -0
  15. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn/repository.py +7 -1
  16. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn/transitions.py +20 -1
  17. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn_store.py +49 -1
  18. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/.context/CONTEXT.md +12 -5
  19. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/signal_canceller.py +69 -60
  20. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/.gitignore +0 -0
  21. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/LICENSE +0 -0
  22. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/README.md +0 -0
  23. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/pyproject.toml +0 -0
  24. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/ag_ui/__init__.pyi +0 -0
  25. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/ag_ui/core.pyi +0 -0
  26. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/AGENTS.md +0 -0
  27. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/__main__.py +0 -0
  28. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/.context/CONTEXT.md +0 -0
  29. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/AGENTS.md +0 -0
  30. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/__init__.py +0 -0
  31. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/_cmd_utils.py +0 -0
  32. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/agent_help.py +0 -0
  33. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/app_tree.py +0 -0
  34. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/argv_normalization.py +0 -0
  35. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/bootstrap.py +0 -0
  36. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/bootstrap_cmd.py +0 -0
  37. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/chat_cmd.py +0 -0
  38. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/config_cmd.py +0 -0
  39. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/doctor_cmd.py +0 -0
  40. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/entrypoint.py +0 -0
  41. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/ext_cmd.py +0 -0
  42. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/ext_registration.py +0 -0
  43. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/hooks_authority.py +0 -0
  44. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/hooks_commands.py +0 -0
  45. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/kg_cmd.py +0 -0
  46. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/main.py +0 -0
  47. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/mars_passthrough.py +0 -0
  48. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/mermaid_cmd.py +0 -0
  49. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/migrate_cmd.py +0 -0
  50. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/misc_commands.py +0 -0
  51. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/models_cmd.py +0 -0
  52. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/output.py +0 -0
  53. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/primary_launch.py +0 -0
  54. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/qi_cmd.py +0 -0
  55. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/report_cmd.py +0 -0
  56. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/session_cmd.py +0 -0
  57. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/spawn.py +0 -0
  58. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/spawn_inject.py +0 -0
  59. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/startup/__init__.py +0 -0
  60. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/startup/catalog.py +0 -0
  61. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/startup/classify.py +0 -0
  62. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  63. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/startup/help.py +0 -0
  64. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  65. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/startup/policy.py +0 -0
  66. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/streaming_serve.py +0 -0
  67. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/sync_cmd.py +0 -0
  68. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/telemetry_cmd.py +0 -0
  69. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/utils.py +0 -0
  70. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/work_cmd.py +0 -0
  71. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/cli/workspace_cmd.py +0 -0
  72. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/dev/AGENTS.md +0 -0
  73. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/dev/__init__.py +0 -0
  74. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/dev/pytests.py +0 -0
  75. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/__init__.py +0 -0
  76. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  77. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  78. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/bootstrap/__init__.py +0 -0
  79. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/bootstrap/config.py +0 -0
  80. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/bootstrap/project_state.py +0 -0
  81. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  82. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/bootstrap/services.py +0 -0
  83. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  84. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/AGENTS.md +0 -0
  85. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/__init__.py +0 -0
  86. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/agent.py +0 -0
  87. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/bootstrap.py +0 -0
  88. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/catalog_session.py +0 -0
  89. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/model_aliases.py +0 -0
  90. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/models.py +0 -0
  91. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/catalog/skill.py +0 -0
  92. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  93. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/AGENTS.md +0 -0
  94. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/__init__.py +0 -0
  95. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  96. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/backend_handle.py +0 -0
  97. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/checkpoint.py +0 -0
  98. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/command_handler.py +0 -0
  99. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/command_invariants.py +0 -0
  100. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/commands.py +0 -0
  101. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  102. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  103. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  104. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  105. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  106. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  107. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  108. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  109. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  110. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/event_index.py +0 -0
  111. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/event_log.py +0 -0
  112. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/event_observer.py +0 -0
  113. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/event_pipeline.py +0 -0
  114. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/frontend.py +0 -0
  115. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  116. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  117. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  118. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/base.py +0 -0
  119. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/claude.py +0 -0
  120. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/codex.py +0 -0
  121. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/common.py +0 -0
  122. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  123. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/registry.py +0 -0
  124. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  125. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/policy.py +0 -0
  126. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/protocol.py +0 -0
  127. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/recovery.py +0 -0
  128. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/replay.py +0 -0
  129. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/runtime.py +0 -0
  130. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/server.py +0 -0
  131. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/session_service.py +0 -0
  132. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/chat/ws_fanout.py +0 -0
  133. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
  134. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/AGENTS.md +0 -0
  135. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/__init__.py +0 -0
  136. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/catalog.py +0 -0
  137. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/context_config.py +0 -0
  138. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/preserving_edit.py +0 -0
  139. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/project_config_state.py +0 -0
  140. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/project_paths.py +0 -0
  141. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/project_root.py +0 -0
  142. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/schema.py +0 -0
  143. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/settings.py +0 -0
  144. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/config/workspace.py +0 -0
  145. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  146. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/context/AGENTS.md +0 -0
  147. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/context/__init__.py +0 -0
  148. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/context/resolver.py +0 -0
  149. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/AGENTS.md +0 -0
  150. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/__init__.py +0 -0
  151. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/child_env.py +0 -0
  152. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/clock.py +0 -0
  153. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/codec.py +0 -0
  154. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/command_strings.py +0 -0
  155. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/context.py +0 -0
  156. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/conversation.py +0 -0
  157. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/depth.py +0 -0
  158. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/domain.py +0 -0
  159. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/execution_policy.py +0 -0
  160. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/formatting.py +0 -0
  161. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/launch_policy_snapshot.py +0 -0
  162. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/logging.py +0 -0
  163. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/overrides.py +0 -0
  164. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/resolved_context.py +0 -0
  165. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/sink.py +0 -0
  166. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/spawn_start.py +0 -0
  167. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/telemetry.py +0 -0
  168. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/types.py +0 -0
  169. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/core/util.py +0 -0
  170. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/diagnostics.py +0 -0
  171. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  172. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/AGENTS.md +0 -0
  173. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/__init__.py +0 -0
  174. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  175. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  176. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  177. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  178. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  179. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  180. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  181. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/context.py +0 -0
  182. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/descriptors.py +0 -0
  183. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/dispatcher.py +0 -0
  184. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/first_party.py +0 -0
  185. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/observability.py +0 -0
  186. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/registry.py +0 -0
  187. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/extensions/types.py +0 -0
  188. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
  189. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/AGENTS.md +0 -0
  190. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/__init__.py +0 -0
  191. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/adapter.py +0 -0
  192. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/bundle.py +0 -0
  193. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/claude.py +0 -0
  194. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/claude_preflight.py +0 -0
  195. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/claude_utils.py +0 -0
  196. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/codex.py +0 -0
  197. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/codex_rollout.py +0 -0
  198. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/common.py +0 -0
  199. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/.context/CONTEXT.md +0 -0
  200. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/AGENTS.md +0 -0
  201. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/__init__.py +0 -0
  202. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/base.py +0 -0
  203. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
  204. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/codex_ws.py +0 -0
  205. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  206. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/errors.py +0 -0
  207. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
  208. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
  209. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/control_action.py +0 -0
  210. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/cost.py +0 -0
  211. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/cursor.py +0 -0
  212. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/errors.py +0 -0
  213. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractor.py +0 -0
  214. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  215. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  216. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  217. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/base.py +0 -0
  218. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/claude.py +0 -0
  219. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/codex.py +0 -0
  220. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  221. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  222. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/extractors/pi.py +0 -0
  223. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/launch_spec.py +0 -0
  224. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/launch_types.py +0 -0
  225. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/opencode.py +0 -0
  226. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/opencode_storage.py +0 -0
  227. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  228. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  229. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  230. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  231. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/base.py +0 -0
  232. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  233. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/codex.py +0 -0
  234. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  235. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  236. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/permission_broker.py +0 -0
  237. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/pi.py +0 -0
  238. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
  239. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/pi_paths.py +0 -0
  240. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  241. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
  242. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  243. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/__init__.py +0 -0
  244. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/_guards.py +0 -0
  245. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  246. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  247. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_claude.py +0 -0
  248. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  249. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
  250. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
  251. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
  252. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
  253. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
  254. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_pi_native_tui.py +0 -0
  255. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/project_pi_rpc.py +0 -0
  256. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  257. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/registry.py +0 -0
  258. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/semantics.py +0 -0
  259. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/session_detection.py +0 -0
  260. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/harness/transcript.py +0 -0
  261. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  262. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/AGENTS.md +0 -0
  263. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/__init__.py +0 -0
  264. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  265. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  266. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  267. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  268. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/builtin/base.py +0 -0
  269. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  270. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  271. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/config.py +0 -0
  272. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/dispatch.py +0 -0
  273. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/interval.py +0 -0
  274. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/registry.py +0 -0
  275. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/runner.py +0 -0
  276. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/hooks/types.py +0 -0
  277. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ignores.py +0 -0
  278. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  279. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/kg/AGENTS.md +0 -0
  280. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/kg/__init__.py +0 -0
  281. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/kg/graph.py +0 -0
  282. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/kg/report.py +0 -0
  283. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/kg/serializer.py +0 -0
  284. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/kg/types.py +0 -0
  285. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
  286. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/AGENTS.md +0 -0
  287. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/__init__.py +0 -0
  288. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/artifact_io.py +0 -0
  289. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  290. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/claude_session_access.py +0 -0
  291. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/command.py +0 -0
  292. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/compiler.py +0 -0
  293. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/composition.py +0 -0
  294. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/composition_spawn.py +0 -0
  295. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/constants.py +0 -0
  296. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/context.py +0 -0
  297. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/cwd.py +0 -0
  298. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/env.py +0 -0
  299. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/errors.py +0 -0
  300. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/extract.py +0 -0
  301. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/fork.py +0 -0
  302. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/launch_types.py +0 -0
  303. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/materialize.py +0 -0
  304. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/permissions.py +0 -0
  305. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/plan.py +0 -0
  306. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/policies.py +0 -0
  307. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/policy_snapshot.py +0 -0
  308. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  309. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  310. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/__init__.py +0 -0
  311. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/ports.py +0 -0
  312. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/primary_attach.py +0 -0
  313. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  314. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/session.py +0 -0
  315. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
  316. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  317. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/prompt.py +0 -0
  318. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/reference.py +0 -0
  319. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/report.py +0 -0
  320. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/request.py +0 -0
  321. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/resolution.py +0 -0
  322. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/resolve.py +0 -0
  323. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/run_inputs.py +0 -0
  324. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/runner_helpers.py +0 -0
  325. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/session_scope.py +0 -0
  326. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/signals.py +0 -0
  327. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  328. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  329. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  330. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  331. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  332. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/text_utils.py +0 -0
  333. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/types.py +0 -0
  334. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/workspace.py +0 -0
  335. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/workspace_projection.py +0 -0
  336. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/launch/written_files.py +0 -0
  337. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  338. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/markdown/AGENTS.md +0 -0
  339. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/markdown/__init__.py +0 -0
  340. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/markdown/extract.py +0 -0
  341. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/markdown/types.py +0 -0
  342. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  343. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  344. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/__init__.py +0 -0
  345. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/report.py +0 -0
  346. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/scanner.py +0 -0
  347. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/serializer.py +0 -0
  348. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  349. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  350. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  351. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  352. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  353. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  354. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  355. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  356. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  357. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/style/types.py +0 -0
  358. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/mermaid/validator.py +0 -0
  359. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  360. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/observability/AGENTS.md +0 -0
  361. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/observability/__init__.py +0 -0
  362. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/observability/debug_tracer.py +0 -0
  363. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/observability/trace_helpers.py +0 -0
  364. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
  365. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/AGENTS.md +0 -0
  366. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/__init__.py +0 -0
  367. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/catalog.py +0 -0
  368. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/commands.py +0 -0
  369. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/config.py +0 -0
  370. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/config_surface.py +0 -0
  371. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/context.py +0 -0
  372. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/diag.py +0 -0
  373. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/hooks.py +0 -0
  374. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/init_ops.py +0 -0
  375. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/mars.py +0 -0
  376. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/migration.py +0 -0
  377. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/pruning.py +0 -0
  378. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/qi.py +0 -0
  379. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/reference.py +0 -0
  380. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/reference_recovery.py +0 -0
  381. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/report.py +0 -0
  382. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/runtime.py +0 -0
  383. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_corpus.py +0 -0
  384. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_export.py +0 -0
  385. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_log.py +0 -0
  386. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_log_render.py +0 -0
  387. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_render.py +0 -0
  388. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_repair.py +0 -0
  389. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_search.py +0 -0
  390. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_target.py +0 -0
  391. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/session_transcript.py +0 -0
  392. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
  393. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  394. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/__init__.py +0 -0
  395. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/api.py +0 -0
  396. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
  397. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/execute.py +0 -0
  398. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  399. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
  400. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/execute_runner.py +0 -0
  401. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
  402. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  403. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/models.py +0 -0
  404. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/prepare.py +0 -0
  405. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/spawn/query.py +0 -0
  406. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  407. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/work_attachment.py +0 -0
  408. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/work_dashboard.py +0 -0
  409. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/work_lifecycle.py +0 -0
  410. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/work_sessions.py +0 -0
  411. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/ops/workspace.py +0 -0
  412. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  413. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/AGENTS.md +0 -0
  414. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/__init__.py +0 -0
  415. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/locking.py +0 -0
  416. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  417. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  418. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  419. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
  420. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/process_scope/posix.py +0 -0
  421. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
  422. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/terminate.py +0 -0
  423. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/unix_modules.py +0 -0
  424. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/platform/windows_job.py +0 -0
  425. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  426. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/safety/AGENTS.md +0 -0
  427. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/safety/__init__.py +0 -0
  428. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/safety/budget.py +0 -0
  429. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/safety/guardrails.py +0 -0
  430. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/safety/permissions.py +0 -0
  431. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/safety/redaction.py +0 -0
  432. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/service_context.py +0 -0
  433. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  434. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/spawn/AGENTS.md +0 -0
  435. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/spawn/__init__.py +0 -0
  436. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/spawn/archive.py +0 -0
  437. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/AGENTS.md +0 -0
  438. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/__init__.py +0 -0
  439. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/artifact_store.py +0 -0
  440. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/atomic.py +0 -0
  441. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/event_store.py +0 -0
  442. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/history.py +0 -0
  443. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/launch_boundary.py +0 -0
  444. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/liveness.py +0 -0
  445. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/managed_primary.py +0 -0
  446. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/paths.py +0 -0
  447. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/primary_meta.py +0 -0
  448. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/runtime_root.py +0 -0
  449. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/session_store.py +0 -0
  450. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  451. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  452. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn/__init__.py +0 -0
  453. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  454. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/user_paths.py +0 -0
  455. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/wordgen.py +0 -0
  456. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/wordlists.py +0 -0
  457. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/state/work_store.py +0 -0
  458. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/AGENTS.md +0 -0
  459. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/__init__.py +0 -0
  460. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/control_socket.py +0 -0
  461. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/disk_watcher.py +0 -0
  462. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/drain_policy.py +0 -0
  463. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/drain_wait.py +0 -0
  464. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/event_observers.py +0 -0
  465. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/heartbeat.py +0 -0
  466. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/pi_drain.py +0 -0
  467. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/pi_process_cleanup.py +0 -0
  468. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/pi_quiescence.py +0 -0
  469. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/pi_subspawn_tracker.py +0 -0
  470. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/spawn_dispatch.py +0 -0
  471. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/spawn_drain_loop.py +0 -0
  472. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/spawn_manager.py +0 -0
  473. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/spawn_session.py +0 -0
  474. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/streaming/types.py +0 -0
  475. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/__init__.py +0 -0
  476. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  477. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/correlation.py +0 -0
  478. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/events.py +0 -0
  479. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/init.py +0 -0
  480. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  481. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/maintenance.py +0 -0
  482. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/observer.py +0 -0
  483. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/observers.py +0 -0
  484. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/query.py +0 -0
  485. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/reader.py +0 -0
  486. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/retention.py +0 -0
  487. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/router.py +0 -0
  488. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/sinks.py +0 -0
  489. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/telemetry/status.py +0 -0
  490. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/tools.py +0 -0
  491. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/utils/__init__.py +0 -0
  492. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/lib/utils/time.py +0 -0
  493. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
  494. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/README.md +0 -0
  495. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/__init__.py +0 -0
  496. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +0 -0
  497. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +0 -0
  498. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
  499. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
  500. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +0 -0
  501. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +0 -0
  502. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  503. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
  504. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.test.ts +0 -0
  505. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +0 -0
  506. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
  507. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
  508. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
  509. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
  510. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
  511. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
  512. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
  513. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +0 -0
  514. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
  515. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
  516. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
  517. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/spawn_origins.test.ts +0 -0
  518. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/spawn_origins.ts +0 -0
  519. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
  520. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/package.json +0 -0
  521. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  522. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
  523. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
  524. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/pi_runtime/vitest.config.ts +0 -0
  525. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/plugin_api/AGENTS.md +0 -0
  526. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/plugin_api/__init__.py +0 -0
  527. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/plugin_api/config.py +0 -0
  528. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/plugin_api/fs.py +0 -0
  529. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/plugin_api/git.py +0 -0
  530. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/plugin_api/state.py +0 -0
  531. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/plugin_api/types.py +0 -0
  532. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/py.typed +0 -0
  533. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/server/AGENTS.md +0 -0
  534. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/src/meridian/server/__init__.py +0 -0
  535. {meridian_cli-0.2.26 → meridian_cli-0.2.28}/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.26
3
+ Version: 0.2.28
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.26"
5
+ __version__ = "0.2.28"
@@ -148,6 +148,60 @@ root has already died must be reclaimed, not silently preserved forever.
148
148
  This function was removed — it had zero callers and was fully superseded by
149
149
  `reclaim_session_owned_scopes_for_chat()`. Do not reference it.
150
150
 
151
+ ## Spawn Lifecycle Decisions (`spawn_lifecycle.py`)
152
+
153
+ `spawn_lifecycle.py` owns lifecycle resolution rules — pure stateless functions shared by the
154
+ runner, reaper, and spawn application service. It does not own persistence or side effects.
155
+
156
+ ### Has Durable Report Completion
157
+
158
+ `has_durable_report_completion(report_text)` returns True when a non-empty final report
159
+ exists on disk and its content is not a terminal control frame:
160
+
161
+ - Returns `False` for empty/whitespace strings, `None`, or `"# Spawn failed"` generated
162
+ markdown (runner-produced failure wrappers do not constitute durable completion).
163
+ - Returns `False` for JSON payloads whose top-level or nested `event_type` / `event` /
164
+ `type` is `"cancelled"` or `"error"`.
165
+ - Returns `True` for all other non-empty content (plain markdown, JSON payloads with
166
+ neutral/completion event types).
167
+
168
+ ### Centralized Completion-vs-Cancel Precedence
169
+
170
+ `resolve_completion_cancel_precedence(*, durable_report_completion, cancel_requested, ...)`
171
+ is the **single** shared resolution rule for the durable-completion-wins-over-late-cancel
172
+ policy:
173
+
174
+ - If a durable report exists → `ExecutionTerminalOutcome(status="succeeded", exit_code=0)`.
175
+ - Else if cancellation was requested → `ExecutionTerminalOutcome(status="cancelled", ...)`.
176
+ - Else → `None` (no opinion — caller must fall back to its own outcome).
177
+
178
+ This helper is consumed by `SpawnApplicationService._force_cancel_convergence()`,
179
+ `SpawnApplicationService.complete_execution()`, and `reaper._completion_or_cancel_decision()`.
180
+ All three converge on the same precedence rule.
181
+
182
+ ### Execution Terminal State Resolution
183
+
184
+ `resolve_execution_terminal_state()` normalizes raw execution facts into a terminal tuple
185
+ `(status, exit_code, error)`. It takes `exit_code`, `failure_reason`, `cancelled`, and
186
+ `durable_report_completion`:
187
+
188
+ | durable completion | cancelled | exit_code | Result |
189
+ |---|---|---|---|
190
+ | True | any | any | `succeeded`, 0, None |
191
+ | False | True | 143 | `cancelled`, 143, failure_reason |
192
+ | False | True | 0 | `cancelled`, 130, failure_reason |
193
+ | False | False | 0 | `succeeded`, 0, failure_reason |
194
+ | False | False | non-zero | `failed`, exit_code, failure_reason |
195
+
196
+ `resolve_execution_terminal_outcome(facts: ExecutionTerminalFacts)` wraps this for the
197
+ runner path.
198
+
199
+ ### Reaper-Specific Resolved State
200
+
201
+ `resolve_reconciled_terminal_state(*, durable_report_completion, fallback_error)` produces
202
+ the terminal state for read-path reconciliation. Durable completion → `succeeded`; otherwise
203
+ → `failed` with the supplied fallback error.
204
+
151
205
  ## Related KB
152
206
 
153
207
  → [KB: codebase/guide.md](/home/jimyao/.meridian/git/meridian-flow-docs/kb/codebase/guide.md) — core module orientation and codebase navigation
@@ -468,6 +468,48 @@ class SpawnLifecycleService:
468
468
  )
469
469
  return True
470
470
 
471
+ def request_cancel(
472
+ self,
473
+ spawn_id: str,
474
+ *,
475
+ exit_code: int = 130,
476
+ error: str | None = "cancelled",
477
+ requested_by: Literal["user", "system"] = "user",
478
+ requested_at: str | None = None,
479
+ clock: Clock | None = None,
480
+ ) -> SpawnRecord | None:
481
+ """Persist pre-terminal spawn-level cancel intent."""
482
+
483
+ with bind_lifecycle_correlation(
484
+ self._correlation(operation="request_cancel", spawn_id=spawn_id)
485
+ ):
486
+ record = _spawn_store().record_cancel_intent(
487
+ self._runtime_root,
488
+ spawn_id,
489
+ exit_code=exit_code,
490
+ error=error,
491
+ requested_by=requested_by,
492
+ requested_at=requested_at,
493
+ clock=clock,
494
+ )
495
+ if record is None:
496
+ return None
497
+ self._emit_telemetry_event(
498
+ "spawn.updated",
499
+ record,
500
+ payload={
501
+ "cancel_intent": {
502
+ "requested_at": record.cancel_intent.requested_at,
503
+ "exit_code": record.cancel_intent.exit_code,
504
+ "error": record.cancel_intent.error,
505
+ "requested_by": record.cancel_intent.requested_by,
506
+ }
507
+ if record.cancel_intent is not None
508
+ else None,
509
+ },
510
+ )
511
+ return record
512
+
471
513
  def finalize(
472
514
  self,
473
515
  spawn_id: str,
@@ -55,7 +55,7 @@ def terminate_spawn_scopes(
55
55
 
56
56
  spawn_id = SpawnId(spawn_record.id)
57
57
  for scope in scopes:
58
- if is_scope_released(runtime_root, spawn_id, scope.scope_id):
58
+ if is_scope_released(runtime_root, spawn_id, scope.release_id):
59
59
  result = CleanupResult(
60
60
  scope_id=scope.scope_id,
61
61
  root_pid=scope.root_pid,
@@ -108,7 +108,7 @@ def terminate_spawn_scopes(
108
108
  continue
109
109
 
110
110
  result = terminate_scope_sync(scope, grace_seconds=grace_seconds, reason=reason)
111
- mark_scope_released(runtime_root, spawn_id, scope.scope_id)
111
+ mark_scope_released(runtime_root, spawn_id, scope.release_id)
112
112
  logger.debug(
113
113
  "Terminated process scope.",
114
114
  spawn_id=spawn_record.id,
@@ -241,10 +241,10 @@ def cancel_managed_primary(
241
241
  # 1. Terminate launcher scope first (spawn_owned).
242
242
  for scope in scopes:
243
243
  if scope.scope_id == "launcher":
244
- if is_scope_released(runtime_root, spawn_id, scope.scope_id):
244
+ if is_scope_released(runtime_root, spawn_id, scope.release_id):
245
245
  continue
246
246
  result = terminate_scope_sync(scope, grace_seconds=grace_seconds, reason="cancel")
247
- mark_scope_released(runtime_root, spawn_id, scope.scope_id)
247
+ mark_scope_released(runtime_root, spawn_id, scope.release_id)
248
248
  logger.debug(
249
249
  "Terminated managed primary launcher scope.",
250
250
  spawn_id=spawn_record.id,
@@ -267,7 +267,7 @@ def cancel_managed_primary(
267
267
  for scope in scopes:
268
268
  if scope.scope_id not in {"backend", "tui"}:
269
269
  continue
270
- if is_scope_released(runtime_root, spawn_id, scope.scope_id):
270
+ if is_scope_released(runtime_root, spawn_id, scope.release_id):
271
271
  result = CleanupResult(
272
272
  scope_id=scope.scope_id,
273
273
  root_pid=scope.root_pid,
@@ -293,7 +293,7 @@ def cancel_managed_primary(
293
293
  results.append(result)
294
294
  continue
295
295
  result = terminate_scope_sync(scope, grace_seconds=grace_seconds, reason="cancel")
296
- mark_scope_released(runtime_root, spawn_id, scope.scope_id)
296
+ mark_scope_released(runtime_root, spawn_id, scope.release_id)
297
297
  logger.debug(
298
298
  "Terminated managed primary runtime scope.",
299
299
  spawn_id=spawn_record.id,
@@ -333,10 +333,10 @@ def reclaim_session_owned_scopes_for_chat(
333
333
  for scope in scopes:
334
334
  if scope.owner_policy != "session_owned":
335
335
  continue
336
- if is_scope_released(runtime_root, spawn_id, scope.scope_id):
336
+ if is_scope_released(runtime_root, spawn_id, scope.release_id):
337
337
  continue
338
338
  result = terminate_scope_sync(scope, grace_seconds=grace_seconds, reason="session_exit")
339
- mark_scope_released(runtime_root, spawn_id, scope.scope_id)
339
+ mark_scope_released(runtime_root, spawn_id, scope.release_id)
340
340
  logger.debug(
341
341
  "Reclaimed session-owned scope at session exit.",
342
342
  spawn_id=record.id,
@@ -29,7 +29,6 @@ class ExecutionTerminalFacts:
29
29
  failure_reason: str | None = None
30
30
  cancellation_observed: bool = False
31
31
  durable_report_completion: bool = False
32
- terminated_after_completion: bool = False
33
32
 
34
33
 
35
34
  @dataclass(frozen=True)
@@ -58,6 +57,9 @@ def has_durable_report_completion(report_text: str | None) -> bool:
58
57
  return False
59
58
 
60
59
  stripped = report_text.strip()
60
+ if stripped.lower().startswith("# spawn failed"):
61
+ return False
62
+
61
63
  try:
62
64
  payload_obj = json.loads(stripped)
63
65
  except json.JSONDecodeError:
@@ -98,11 +100,10 @@ def resolve_execution_terminal_state(
98
100
  failure_reason: str | None,
99
101
  cancelled: bool = False,
100
102
  durable_report_completion: bool = False,
101
- terminated_after_completion: bool = False,
102
103
  ) -> tuple[SpawnStatus, int, str | None]:
103
104
  """Normalize one execution outcome into the persisted terminal state."""
104
105
 
105
- if durable_report_completion and terminated_after_completion:
106
+ if durable_report_completion:
106
107
  return "succeeded", 0, None
107
108
  if cancelled:
108
109
  resolved_exit_code = exit_code if exit_code != 0 else 130
@@ -122,7 +123,6 @@ def resolve_execution_terminal_outcome(
122
123
  failure_reason=facts.failure_reason,
123
124
  cancelled=facts.cancellation_observed,
124
125
  durable_report_completion=facts.durable_report_completion,
125
- terminated_after_completion=facts.terminated_after_completion,
126
126
  )
127
127
  return ExecutionTerminalOutcome(
128
128
  status=status,
@@ -131,6 +131,26 @@ def resolve_execution_terminal_outcome(
131
131
  )
132
132
 
133
133
 
134
+ def resolve_completion_cancel_precedence(
135
+ *,
136
+ durable_report_completion: bool,
137
+ cancel_requested: bool,
138
+ cancel_exit_code: int = 130,
139
+ cancel_error: str | None = "cancelled",
140
+ ) -> ExecutionTerminalOutcome | None:
141
+ """Resolve the shared durable-completion-vs-late-cancel precedence rule."""
142
+
143
+ if durable_report_completion:
144
+ return ExecutionTerminalOutcome(status="succeeded", exit_code=0, error=None)
145
+ if cancel_requested:
146
+ return ExecutionTerminalOutcome(
147
+ status="cancelled",
148
+ exit_code=cancel_exit_code,
149
+ error=cancel_error,
150
+ )
151
+ return None
152
+
153
+
134
154
  def resolve_reconciled_terminal_state(
135
155
  *,
136
156
  durable_report_completion: bool,
@@ -17,6 +17,8 @@ from meridian.lib.core.lifecycle import SpawnLifecycleService
17
17
  from meridian.lib.core.spawn_lifecycle import (
18
18
  ExecutionTerminalFacts,
19
19
  ExecutionTerminalOutcome,
20
+ has_durable_report_completion,
21
+ resolve_completion_cancel_precedence,
20
22
  resolve_execution_terminal_outcome,
21
23
  )
22
24
  from meridian.lib.core.spawn_start import SpawnStartMetadata
@@ -48,7 +50,7 @@ from meridian.lib.launch.types import PrimarySessionMetadata
48
50
  from meridian.lib.state import spawn_store
49
51
  from meridian.lib.state.liveness import is_process_alive
50
52
  from meridian.lib.state.paths import RuntimePaths
51
- from meridian.lib.state.spawn.model import LaunchMode, SpawnOrigin
53
+ from meridian.lib.state.spawn.model import APP_LAUNCH_MODE, LaunchMode, SpawnOrigin
52
54
  from meridian.lib.streaming.signal_canceller import CancelOutcome as SignalCancelOutcome
53
55
 
54
56
  if TYPE_CHECKING:
@@ -511,47 +513,84 @@ class SpawnApplicationService:
511
513
  self._cleanup_orphan_managed_primary(spawn_id, record)
512
514
  return _cancel_outcome_from_record(str(spawn_id), record, already_terminal=True)
513
515
 
514
- is_finalizing = record.status == "finalizing"
515
- from meridian.lib.state.primary_meta import read_primary_metadata
516
-
517
- primary_metadata = read_primary_metadata(self._runtime_root, str(spawn_id))
518
-
519
- if not is_finalizing:
520
- if primary_metadata is not None and primary_metadata.managed_backend:
521
- return await self._cancel_managed_primary(spawn_id, record, primary_metadata)
522
-
523
- from meridian.lib.streaming.signal_canceller import SignalCanceller
524
-
525
- signal_outcome = await SignalCanceller(
526
- runtime_root=self._runtime_root,
527
- manager=self._spawn_manager,
528
- complete_spawn=self._complete_spawn_unlocked,
529
- ).cancel(spawn_id)
530
- latest = self.get_spawn(spawn_id) or record
531
- return _cancel_outcome_from_signal(str(spawn_id), signal_outcome, latest)
532
-
533
- if is_finalizing:
534
- terminal = await self._wait_for_terminal(spawn_id, timeout=5.0)
535
- lock = await self._locks.acquire(str(spawn_id))
536
- async with lock:
537
- latest = terminal or self.get_spawn(spawn_id) or record
538
- if (
539
- terminal is None
540
- and latest.status == "finalizing"
541
- and latest.runner_exit_status is None
542
- and (
543
- (primary_metadata is not None and primary_metadata.managed_backend)
544
- or _is_managed_primary_candidate(latest)
545
- )
546
- ):
547
- latest = await self._ensure_cancel_timeout_intent(spawn_id, latest)
548
- return _cancel_outcome_from_record(
516
+ record = (
517
+ await asyncio.to_thread(
518
+ self._lifecycle.request_cancel,
549
519
  str(spawn_id),
550
- latest,
551
- already_terminal=terminal is not None,
552
- finalizing=terminal is None,
520
+ exit_code=130,
521
+ error="cancelled",
522
+ requested_by="user",
553
523
  )
554
- raise RuntimeError("unreachable cancel state")
524
+ or self.get_spawn(spawn_id)
525
+ or record
526
+ )
527
+
528
+ from meridian.lib.state.primary_meta import read_primary_metadata
529
+
530
+ primary_metadata = read_primary_metadata(self._runtime_root, str(spawn_id))
531
+ signal_outcome: SignalCancelOutcome | None = None
532
+ delivery_finalizing = False
533
+ if primary_metadata is not None and primary_metadata.managed_backend:
534
+ managed_outcome = await self._cancel_managed_primary(
535
+ spawn_id, record, primary_metadata
536
+ )
537
+ delivery_finalizing = managed_outcome.finalizing
538
+ else:
539
+ from meridian.lib.streaming.signal_canceller import SignalCanceller
540
+
541
+ signal_outcome = await SignalCanceller(
542
+ runtime_root=self._runtime_root,
543
+ manager=self._spawn_manager,
544
+ ).cancel(spawn_id)
545
+
546
+ terminal = await self._wait_for_terminal(spawn_id, timeout=1.0)
547
+ if terminal is not None:
548
+ return _cancel_outcome_from_record(str(spawn_id), terminal, already_terminal=True)
549
+
550
+ lock = await self._locks.acquire(str(spawn_id))
551
+ async with lock:
552
+ latest = self.get_spawn(spawn_id) or record
553
+ if self.is_terminal(latest.status):
554
+ return _cancel_outcome_from_record(str(spawn_id), latest, already_terminal=True)
555
+ if not _has_live_execution_owner(latest, primary_metadata):
556
+ converged = await self._force_cancel_convergence(spawn_id, latest)
557
+ if converged is not None:
558
+ return _cancel_outcome_from_record(
559
+ str(spawn_id),
560
+ converged,
561
+ finalizing=not self.is_terminal(converged.status),
562
+ )
563
+ latest = self.get_spawn(spawn_id) or latest
564
+ if delivery_finalizing or (signal_outcome is not None and signal_outcome.finalizing):
565
+ return _cancel_outcome_from_record(str(spawn_id), latest, finalizing=True)
566
+ if signal_outcome is None:
567
+ return _cancel_outcome_from_record(str(spawn_id), latest)
568
+ return _cancel_outcome_from_signal(str(spawn_id), signal_outcome, latest)
569
+
570
+ async def _force_cancel_convergence(
571
+ self,
572
+ spawn_id: SpawnId,
573
+ record: SpawnRecord,
574
+ ) -> SpawnRecord | None:
575
+ if self.is_terminal(record.status):
576
+ return record
577
+ intent = record.cancel_intent
578
+ resolved = resolve_completion_cancel_precedence(
579
+ durable_report_completion=_durable_report_completed(self._runtime_root, str(spawn_id)),
580
+ cancel_requested=True,
581
+ cancel_exit_code=intent.exit_code if intent is not None else 130,
582
+ cancel_error=intent.error if intent is not None else "cancelled",
583
+ )
584
+ if resolved is None:
585
+ return None
586
+ outcome = await self._complete_spawn_unlocked(
587
+ spawn_id,
588
+ resolved.status,
589
+ resolved.exit_code,
590
+ origin="reconciler" if resolved.status == "succeeded" else "cancel",
591
+ error=resolved.error,
592
+ )
593
+ return outcome.snapshot
555
594
 
556
595
  def _cleanup_orphan_managed_primary(
557
596
  self,
@@ -663,17 +702,6 @@ class SpawnApplicationService:
663
702
 
664
703
  if latest is None:
665
704
  latest = self.get_spawn(spawn_id) or record
666
- if latest.status == "finalizing":
667
- latest = await self._ensure_cancel_timeout_intent(spawn_id, latest)
668
- return _cancel_outcome_from_record(str(spawn_id), latest, finalizing=True)
669
- if self.is_terminal(latest.status):
670
- return _cancel_outcome_from_record(
671
- str(spawn_id),
672
- latest,
673
- already_terminal=True,
674
- )
675
-
676
- latest = await self._ensure_cancel_timeout_intent(spawn_id, latest)
677
705
  if latest.status == "finalizing":
678
706
  return _cancel_outcome_from_record(str(spawn_id), latest, finalizing=True)
679
707
  if self.is_terminal(latest.status):
@@ -685,11 +713,9 @@ class SpawnApplicationService:
685
713
 
686
714
  if self._lifecycle.mark_finalizing(str(spawn_id)):
687
715
  latest = self.get_spawn(spawn_id) or latest
688
- latest = await self._ensure_cancel_timeout_intent(spawn_id, latest)
689
716
  else:
690
717
  latest = self.get_spawn(spawn_id) or latest
691
718
  if latest.status == "finalizing":
692
- latest = await self._ensure_cancel_timeout_intent(spawn_id, latest)
693
719
  return _cancel_outcome_from_record(str(spawn_id), latest, finalizing=True)
694
720
  if self.is_terminal(latest.status):
695
721
  return _cancel_outcome_from_record(
@@ -697,14 +723,6 @@ class SpawnApplicationService:
697
723
  latest,
698
724
  already_terminal=True,
699
725
  )
700
- self._lifecycle.finalize(
701
- str(spawn_id),
702
- "failed",
703
- 1,
704
- origin="cancel",
705
- error="cancel_timeout",
706
- )
707
- latest = self.get_spawn(spawn_id) or latest
708
726
 
709
727
  # Best-effort: release any Phase-3 scope records so the reaper does not
710
728
  # re-terminate processes that the metadata path already signalled.
@@ -724,22 +742,6 @@ class SpawnApplicationService:
724
742
  finalizing=latest.status == "finalizing",
725
743
  )
726
744
 
727
- async def _ensure_cancel_timeout_intent(
728
- self,
729
- spawn_id: SpawnId,
730
- record: SpawnRecord,
731
- ) -> SpawnRecord:
732
- if self.is_terminal(record.status) or record.runner_exit_status is not None:
733
- return record
734
- await asyncio.to_thread(
735
- self._lifecycle.record_runner_exit,
736
- str(spawn_id),
737
- status=cast("TerminalStatus", "cancelled"),
738
- exit_code=130,
739
- error="cancel_timeout",
740
- )
741
- return self.get_spawn(spawn_id) or record
742
-
743
745
  async def complete_spawn(
744
746
  self,
745
747
  spawn_id: SpawnId,
@@ -782,6 +784,17 @@ class SpawnApplicationService:
782
784
  resolved = resolve_execution_terminal_outcome(facts)
783
785
  lock = await self._locks.acquire(str(spawn_id))
784
786
  async with lock:
787
+ record = self.get_spawn(spawn_id)
788
+ if record is not None and record.cancel_intent is not None:
789
+ resolved = (
790
+ resolve_completion_cancel_precedence(
791
+ durable_report_completion=facts.durable_report_completion,
792
+ cancel_requested=True,
793
+ cancel_exit_code=record.cancel_intent.exit_code,
794
+ cancel_error=record.cancel_intent.error,
795
+ )
796
+ or resolved
797
+ )
785
798
  completion = await self._complete_spawn_unlocked(
786
799
  spawn_id,
787
800
  resolved.status,
@@ -852,7 +865,7 @@ class SpawnApplicationService:
852
865
  scopes = read_scopes_from_disk(self._runtime_root, spawn_id)
853
866
  for scope in scopes:
854
867
  if scope.owner_policy == "spawn_owned":
855
- mark_scope_released(self._runtime_root, spawn_id, scope.scope_id)
868
+ mark_scope_released(self._runtime_root, spawn_id, scope.release_id)
856
869
  return CompleteSpawnOutcome(
857
870
  wrote=outcome.wrote,
858
871
  transitioned=outcome.transitioned,
@@ -1004,6 +1017,45 @@ def _is_managed_primary_candidate(record: SpawnRecord) -> bool:
1004
1017
  return record.kind == "primary" and harness in {"codex", "opencode"}
1005
1018
 
1006
1019
 
1020
+ def _durable_report_completed(runtime_root: Path, spawn_id: str) -> bool:
1021
+ report_path = runtime_root / "spawns" / spawn_id / "report.md"
1022
+ try:
1023
+ report_text = report_path.read_text(encoding="utf-8", errors="ignore")
1024
+ except OSError:
1025
+ return False
1026
+ return has_durable_report_completion(report_text)
1027
+
1028
+
1029
+ def _has_live_execution_owner(
1030
+ record: SpawnRecord,
1031
+ primary_metadata: PrimaryMetadata | None,
1032
+ ) -> bool:
1033
+ if record.launch_mode == APP_LAUNCH_MODE:
1034
+ return True
1035
+ started_epoch = _started_at_epoch(record.started_at)
1036
+ runner_created_at_epoch = record.runner_created_at_epoch or started_epoch
1037
+ if record.runner_pid is not None and is_process_alive(
1038
+ record.runner_pid,
1039
+ created_after_epoch=runner_created_at_epoch,
1040
+ ):
1041
+ return True
1042
+ if record.worker_pid is not None and is_process_alive(
1043
+ record.worker_pid,
1044
+ created_after_epoch=started_epoch,
1045
+ ):
1046
+ return True
1047
+ if primary_metadata is None:
1048
+ return False
1049
+ for pid in (
1050
+ primary_metadata.launcher_pid,
1051
+ primary_metadata.backend_pid,
1052
+ primary_metadata.tui_pid,
1053
+ ):
1054
+ if pid is not None and is_process_alive(pid, created_after_epoch=started_epoch):
1055
+ return True
1056
+ return False
1057
+
1058
+
1007
1059
  def _started_at_epoch(started_at: str | None) -> float | None:
1008
1060
  normalized = (started_at or "").strip()
1009
1061
  if not normalized:
@@ -563,9 +563,6 @@ def _finalize_lifecycle_and_observe_session(
563
563
  ExecutionTerminalFacts(
564
564
  exit_code=exit_code,
565
565
  durable_report_completion=durable_report_completion,
566
- terminated_after_completion=(
567
- durable_report_completion and exit_code in (143, -15)
568
- ),
569
566
  ),
570
567
  origin="launcher",
571
568
  duration_secs=duration,