meridian-cli 0.3.1__tar.gz → 0.3.2__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 (549) hide show
  1. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/PKG-INFO +2 -1
  2. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/pyproject.toml +4 -1
  3. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/__init__.py +1 -1
  4. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/agent_help.py +1 -1
  5. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/spawn.py +74 -2
  6. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/utils.py +7 -2
  7. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/settings.py +24 -0
  8. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/domain.py +3 -1
  9. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/lifecycle.py +8 -10
  10. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/process_cleanup.py +50 -1
  11. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/spawn_lifecycle.py +30 -4
  12. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/spawn_service.py +67 -14
  13. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/telemetry.py +3 -3
  14. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/.context/CONTEXT.md +6 -0
  15. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/AGENTS.md +4 -0
  16. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/base.py +15 -0
  17. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/claude_ws.py +1 -0
  18. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/codex_ws.py +118 -63
  19. meridian_cli-0.3.2/src/meridian/lib/harness/connections/liveness.py +155 -0
  20. meridian_cli-0.3.2/src/meridian/lib/harness/connections/managed_backend.py +128 -0
  21. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/opencode_http.py +259 -103
  22. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/pi_rpc.py +1 -0
  23. meridian_cli-0.3.2/src/meridian/lib/harness/connections/resident_backend.py +70 -0
  24. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi_lifecycle_events.py +7 -173
  25. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/errors.py +2 -0
  26. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/primary_attach.py +106 -69
  27. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/runner.py +33 -3
  28. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/subprocess_launcher.py +3 -0
  29. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/resolve.py +60 -0
  30. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/session_scope.py +2 -0
  31. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/signals.py +8 -2
  32. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming_runner.py +69 -51
  33. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/diag.py +17 -2
  34. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/reference.py +27 -12
  35. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/reference_recovery.py +29 -16
  36. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_export.py +44 -14
  37. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_target.py +101 -27
  38. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +1 -1
  39. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/__init__.py +6 -0
  40. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/api.py +251 -48
  41. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/context_ref.py +3 -2
  42. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute.py +69 -23
  43. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_init.py +3 -1
  44. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_runner.py +2 -0
  45. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_session.py +2 -0
  46. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/models.py +32 -5
  47. meridian_cli-0.3.2/src/meridian/lib/ops/spawn/pre_init.py +134 -0
  48. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/query.py +6 -5
  49. meridian_cli-0.3.2/src/meridian/lib/platform/detached_process.py +132 -0
  50. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/base.py +18 -0
  51. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/fallback.py +8 -4
  52. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/posix.py +20 -7
  53. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/windows_job.py +6 -5
  54. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/liveness.py +23 -0
  55. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/managed_primary.py +21 -24
  56. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/primary_meta.py +9 -0
  57. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/process_scope_projection.py +26 -26
  58. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/reaper.py +111 -31
  59. meridian_cli-0.3.2/src/meridian/lib/state/session_identity.py +172 -0
  60. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/session_store.py +5 -0
  61. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/model.py +2 -2
  62. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/repository.py +3 -0
  63. meridian_cli-0.3.2/src/meridian/lib/state/spawn_signals.py +61 -0
  64. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn_store.py +25 -2
  65. meridian_cli-0.3.2/src/meridian/lib/state/spawn_tree.py +119 -0
  66. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/AGENTS.md +8 -1
  67. meridian_cli-0.3.2/src/meridian/lib/streaming/completion_nudge.py +21 -0
  68. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/disk_watcher.py +3 -6
  69. meridian_cli-0.3.2/src/meridian/lib/streaming/drain_coordinator.py +120 -0
  70. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/drain_wait.py +10 -10
  71. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_drain.py +253 -59
  72. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_process_cleanup.py +2 -1
  73. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_quiescence.py +3 -0
  74. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_subspawn_tracker.py +47 -25
  75. meridian_cli-0.3.2/src/meridian/lib/streaming/resident_drain.py +320 -0
  76. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/signal_canceller.py +3 -5
  77. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_drain_loop.py +158 -103
  78. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_manager.py +165 -99
  79. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_session.py +3 -1
  80. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/events.py +13 -3
  81. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/observer.py +20 -4
  82. meridian_cli-0.3.1/src/meridian/lib/platform/windows_job.py +0 -102
  83. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/.gitignore +0 -0
  84. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/LICENSE +0 -0
  85. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/README.md +0 -0
  86. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/ag_ui/__init__.pyi +0 -0
  87. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/ag_ui/core.pyi +0 -0
  88. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/AGENTS.md +0 -0
  89. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/__main__.py +0 -0
  90. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/.context/CONTEXT.md +0 -0
  91. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/AGENTS.md +0 -0
  92. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/__init__.py +0 -0
  93. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/_cmd_utils.py +0 -0
  94. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/app_tree.py +0 -0
  95. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/argv_normalization.py +0 -0
  96. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/bootstrap.py +0 -0
  97. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/bootstrap_cmd.py +0 -0
  98. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/chat_cmd.py +0 -0
  99. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/config_cmd.py +0 -0
  100. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/doctor_cmd.py +0 -0
  101. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/entrypoint.py +0 -0
  102. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/ext_cmd.py +0 -0
  103. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/ext_registration.py +0 -0
  104. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/hooks_authority.py +0 -0
  105. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/hooks_commands.py +0 -0
  106. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/kg_cmd.py +0 -0
  107. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/main.py +0 -0
  108. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/mars_passthrough.py +0 -0
  109. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/mermaid_cmd.py +0 -0
  110. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/migrate_cmd.py +0 -0
  111. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/misc_commands.py +0 -0
  112. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/models_cmd.py +0 -0
  113. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/output.py +0 -0
  114. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/primary_launch.py +0 -0
  115. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/qi_cmd.py +0 -0
  116. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/report_cmd.py +0 -0
  117. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/session_cmd.py +0 -0
  118. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/spawn_inject.py +0 -0
  119. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/__init__.py +0 -0
  120. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/catalog.py +0 -0
  121. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/classify.py +0 -0
  122. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/cyclopts_app.py +0 -0
  123. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/help.py +0 -0
  124. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
  125. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/policy.py +0 -0
  126. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/streaming_serve.py +0 -0
  127. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/sync_cmd.py +0 -0
  128. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/telemetry_cmd.py +0 -0
  129. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/work_cmd.py +0 -0
  130. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/workspace_cmd.py +0 -0
  131. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/dev/AGENTS.md +0 -0
  132. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/dev/__init__.py +0 -0
  133. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/dev/pytests.py +0 -0
  134. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/__init__.py +0 -0
  135. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
  136. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
  137. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/__init__.py +0 -0
  138. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/config.py +0 -0
  139. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/project_state.py +0 -0
  140. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
  141. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/services.py +0 -0
  142. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
  143. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/AGENTS.md +0 -0
  144. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/__init__.py +0 -0
  145. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/agent.py +0 -0
  146. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/bootstrap.py +0 -0
  147. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/catalog_session.py +0 -0
  148. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/model_aliases.py +0 -0
  149. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/models.py +0 -0
  150. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/skill.py +0 -0
  151. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
  152. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/AGENTS.md +0 -0
  153. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/__init__.py +0 -0
  154. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/backend_acquisition.py +0 -0
  155. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/backend_handle.py +0 -0
  156. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/checkpoint.py +0 -0
  157. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/command_handler.py +0 -0
  158. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/command_invariants.py +0 -0
  159. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/commands.py +0 -0
  160. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
  161. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
  162. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
  163. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
  164. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
  165. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
  166. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
  167. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
  168. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
  169. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_index.py +0 -0
  170. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_log.py +0 -0
  171. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_observer.py +0 -0
  172. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_pipeline.py +0 -0
  173. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/frontend.py +0 -0
  174. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
  175. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
  176. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/__init__.py +0 -0
  177. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/base.py +0 -0
  178. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/claude.py +0 -0
  179. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/codex.py +0 -0
  180. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/common.py +0 -0
  181. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/opencode.py +0 -0
  182. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/registry.py +0 -0
  183. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
  184. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/policy.py +0 -0
  185. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/protocol.py +0 -0
  186. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/recovery.py +0 -0
  187. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/replay.py +0 -0
  188. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/runtime.py +0 -0
  189. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/server.py +0 -0
  190. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/session_service.py +0 -0
  191. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/ws_fanout.py +0 -0
  192. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
  193. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/AGENTS.md +0 -0
  194. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/__init__.py +0 -0
  195. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/catalog.py +0 -0
  196. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/context_config.py +0 -0
  197. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/preserving_edit.py +0 -0
  198. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/project_config_state.py +0 -0
  199. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/project_paths.py +0 -0
  200. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/project_root.py +0 -0
  201. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/schema.py +0 -0
  202. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/workspace.py +0 -0
  203. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
  204. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/AGENTS.md +0 -0
  205. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/__init__.py +0 -0
  206. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/resolver.py +0 -0
  207. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
  208. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/AGENTS.md +0 -0
  209. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/__init__.py +0 -0
  210. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/child_env.py +0 -0
  211. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/clock.py +0 -0
  212. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/codec.py +0 -0
  213. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/command_strings.py +0 -0
  214. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/context.py +0 -0
  215. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/conversation.py +0 -0
  216. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/depth.py +0 -0
  217. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/execution_policy.py +0 -0
  218. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/formatting.py +0 -0
  219. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/launch_policy_snapshot.py +0 -0
  220. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/logging.py +0 -0
  221. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/overrides.py +0 -0
  222. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/resolved_context.py +0 -0
  223. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/sink.py +0 -0
  224. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/spawn_start.py +0 -0
  225. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/types.py +0 -0
  226. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/util.py +0 -0
  227. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/diagnostics.py +0 -0
  228. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
  229. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/AGENTS.md +0 -0
  230. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/__init__.py +0 -0
  231. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
  232. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
  233. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/__init__.py +0 -0
  234. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/biomed.py +0 -0
  235. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
  236. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/sessions.py +0 -0
  237. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/workbench.py +0 -0
  238. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/context.py +0 -0
  239. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/descriptors.py +0 -0
  240. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/dispatcher.py +0 -0
  241. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/first_party.py +0 -0
  242. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/observability.py +0 -0
  243. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/registry.py +0 -0
  244. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/types.py +0 -0
  245. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
  246. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/AGENTS.md +0 -0
  247. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/__init__.py +0 -0
  248. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/adapter.py +0 -0
  249. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/bundle.py +0 -0
  250. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/claude.py +0 -0
  251. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/claude_preflight.py +0 -0
  252. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/claude_utils.py +0 -0
  253. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/codex.py +0 -0
  254. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/codex_rollout.py +0 -0
  255. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/common.py +0 -0
  256. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/__init__.py +0 -0
  257. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
  258. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/errors.py +0 -0
  259. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/control_action.py +0 -0
  260. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/cost.py +0 -0
  261. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/cursor.py +0 -0
  262. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/errors.py +0 -0
  263. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractor.py +0 -0
  264. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
  265. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
  266. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/__init__.py +0 -0
  267. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/base.py +0 -0
  268. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/claude.py +0 -0
  269. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/codex.py +0 -0
  270. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/cursor.py +0 -0
  271. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/opencode.py +0 -0
  272. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/pi.py +0 -0
  273. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/launch_spec.py +0 -0
  274. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/launch_types.py +0 -0
  275. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/opencode.py +0 -0
  276. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/opencode_storage.py +0 -0
  277. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/opencode_transcript.py +0 -0
  278. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
  279. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
  280. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
  281. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/base.py +0 -0
  282. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/claude.py +0 -0
  283. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/codex.py +0 -0
  284. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
  285. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/registry.py +0 -0
  286. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/permission_broker.py +0 -0
  287. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi.py +0 -0
  288. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi_paths.py +0 -0
  289. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
  290. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
  291. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
  292. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/__init__.py +0 -0
  293. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/_guards.py +0 -0
  294. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
  295. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
  296. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_claude.py +0 -0
  297. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
  298. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
  299. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
  300. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
  301. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
  302. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
  303. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_pi_native_tui.py +0 -0
  304. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_pi_rpc.py +0 -0
  305. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
  306. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/registry.py +0 -0
  307. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/semantics.py +0 -0
  308. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/session_detection.py +0 -0
  309. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/transcript.py +0 -0
  310. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
  311. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/AGENTS.md +0 -0
  312. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/__init__.py +0 -0
  313. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
  314. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
  315. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
  316. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
  317. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/base.py +0 -0
  318. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
  319. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin_registry.py +0 -0
  320. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/config.py +0 -0
  321. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/dispatch.py +0 -0
  322. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/interval.py +0 -0
  323. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/registry.py +0 -0
  324. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/runner.py +0 -0
  325. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/types.py +0 -0
  326. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ignores.py +0 -0
  327. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
  328. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/AGENTS.md +0 -0
  329. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/__init__.py +0 -0
  330. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/graph.py +0 -0
  331. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/report.py +0 -0
  332. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/serializer.py +0 -0
  333. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/types.py +0 -0
  334. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
  335. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/AGENTS.md +0 -0
  336. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/__init__.py +0 -0
  337. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/artifact_io.py +0 -0
  338. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/bundle_adapter.py +0 -0
  339. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/claude_session_access.py +0 -0
  340. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/command.py +0 -0
  341. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/compiler.py +0 -0
  342. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/composition.py +0 -0
  343. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/composition_spawn.py +0 -0
  344. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/constants.py +0 -0
  345. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/context.py +0 -0
  346. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/cwd.py +0 -0
  347. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/env.py +0 -0
  348. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/extract.py +0 -0
  349. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/fork.py +0 -0
  350. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/launch_types.py +0 -0
  351. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/materialize.py +0 -0
  352. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/permissions.py +0 -0
  353. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/plan.py +0 -0
  354. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/policies.py +0 -0
  355. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/policy_snapshot.py +0 -0
  356. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
  357. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/AGENTS.md +0 -0
  358. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/__init__.py +0 -0
  359. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/ports.py +0 -0
  360. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
  361. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/session.py +0 -0
  362. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
  363. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/prompt.py +0 -0
  364. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/prompt_context.py +0 -0
  365. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/reference.py +0 -0
  366. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/report.py +0 -0
  367. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/request.py +0 -0
  368. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/resolution.py +0 -0
  369. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/run_inputs.py +0 -0
  370. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/runner_helpers.py +0 -0
  371. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
  372. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
  373. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/__init__.py +0 -0
  374. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
  375. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
  376. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/text_utils.py +0 -0
  377. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/types.py +0 -0
  378. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/workspace.py +0 -0
  379. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/workspace_projection.py +0 -0
  380. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/written_files.py +0 -0
  381. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
  382. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/AGENTS.md +0 -0
  383. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/__init__.py +0 -0
  384. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/extract.py +0 -0
  385. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/types.py +0 -0
  386. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
  387. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/AGENTS.md +0 -0
  388. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/__init__.py +0 -0
  389. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/report.py +0 -0
  390. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/scanner.py +0 -0
  391. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/serializer.py +0 -0
  392. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
  393. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
  394. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/__init__.py +0 -0
  395. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
  396. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
  397. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/line_map.py +0 -0
  398. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
  399. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
  400. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/suppression.py +0 -0
  401. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/types.py +0 -0
  402. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/validator.py +0 -0
  403. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
  404. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/AGENTS.md +0 -0
  405. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/__init__.py +0 -0
  406. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/debug_tracer.py +0 -0
  407. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/trace_helpers.py +0 -0
  408. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
  409. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/AGENTS.md +0 -0
  410. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/__init__.py +0 -0
  411. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/catalog.py +0 -0
  412. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/commands.py +0 -0
  413. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/config.py +0 -0
  414. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/config_surface.py +0 -0
  415. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/context.py +0 -0
  416. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/hooks.py +0 -0
  417. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/init_ops.py +0 -0
  418. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/mars.py +0 -0
  419. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/migration.py +0 -0
  420. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/pruning.py +0 -0
  421. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/qi.py +0 -0
  422. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/report.py +0 -0
  423. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/runtime.py +0 -0
  424. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_corpus.py +0 -0
  425. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_log.py +0 -0
  426. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_log_render.py +0 -0
  427. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_render.py +0 -0
  428. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_repair.py +0 -0
  429. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_search.py +0 -0
  430. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_transcript.py +0 -0
  431. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
  432. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
  433. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
  434. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/prepare.py +0 -0
  435. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/sync_conflicts.py +0 -0
  436. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_attachment.py +0 -0
  437. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_dashboard.py +0 -0
  438. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_lifecycle.py +0 -0
  439. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_sessions.py +0 -0
  440. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/workspace.py +0 -0
  441. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
  442. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/AGENTS.md +0 -0
  443. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/__init__.py +0 -0
  444. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/locking.py +0 -0
  445. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
  446. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
  447. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
  448. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/terminate.py +0 -0
  449. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/unix_modules.py +0 -0
  450. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
  451. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/AGENTS.md +0 -0
  452. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/__init__.py +0 -0
  453. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/budget.py +0 -0
  454. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/guardrails.py +0 -0
  455. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/permissions.py +0 -0
  456. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/redaction.py +0 -0
  457. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/service_context.py +0 -0
  458. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
  459. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/AGENTS.md +0 -0
  460. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/__init__.py +0 -0
  461. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/archive.py +0 -0
  462. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/.context/CONTEXT.md +0 -0
  463. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/AGENTS.md +0 -0
  464. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/__init__.py +0 -0
  465. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/artifact_store.py +0 -0
  466. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/atomic.py +0 -0
  467. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/event_store.py +0 -0
  468. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/history.py +0 -0
  469. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/launch_boundary.py +0 -0
  470. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/paths.py +0 -0
  471. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/runtime_root.py +0 -0
  472. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
  473. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
  474. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/__init__.py +0 -0
  475. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
  476. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/transitions.py +0 -0
  477. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn_report.py +0 -0
  478. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/timestamps.py +0 -0
  479. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/user_paths.py +0 -0
  480. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/wordgen.py +0 -0
  481. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/wordlists.py +0 -0
  482. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/work_store.py +0 -0
  483. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/.context/CONTEXT.md +0 -0
  484. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/__init__.py +0 -0
  485. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/control_socket.py +0 -0
  486. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/drain_policy.py +0 -0
  487. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/event_observers.py +0 -0
  488. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/heartbeat.py +0 -0
  489. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_dispatch.py +0 -0
  490. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/types.py +0 -0
  491. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/__init__.py +0 -0
  492. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/bootstrap.py +0 -0
  493. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/correlation.py +0 -0
  494. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/init.py +0 -0
  495. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
  496. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/maintenance.py +0 -0
  497. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/observers.py +0 -0
  498. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/query.py +0 -0
  499. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/reader.py +0 -0
  500. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/retention.py +0 -0
  501. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/router.py +0 -0
  502. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/sinks.py +0 -0
  503. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/status.py +0 -0
  504. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/tools.py +0 -0
  505. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/utils/__init__.py +0 -0
  506. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/utils/time.py +0 -0
  507. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
  508. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/README.md +0 -0
  509. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/__init__.py +0 -0
  510. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +0 -0
  511. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +0 -0
  512. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
  513. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
  514. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +0 -0
  515. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +0 -0
  516. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
  517. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
  518. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.test.ts +0 -0
  519. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +0 -0
  520. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
  521. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
  522. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
  523. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
  524. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
  525. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
  526. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
  527. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +0 -0
  528. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
  529. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
  530. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
  531. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/spawn_origins.test.ts +0 -0
  532. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/spawn_origins.ts +0 -0
  533. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
  534. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/package.json +0 -0
  535. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
  536. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
  537. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
  538. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/vitest.config.ts +0 -0
  539. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/AGENTS.md +0 -0
  540. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/__init__.py +0 -0
  541. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/config.py +0 -0
  542. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/fs.py +0 -0
  543. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/git.py +0 -0
  544. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/state.py +0 -0
  545. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/types.py +0 -0
  546. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/py.typed +0 -0
  547. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/server/AGENTS.md +0 -0
  548. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/server/__init__.py +0 -0
  549. {meridian_cli-0.3.1 → meridian_cli-0.3.2}/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.3.1
3
+ Version: 0.3.2
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
@@ -41,6 +41,7 @@ Requires-Dist: httpx>=0.28; extra == 'app'
41
41
  Provides-Extra: dev
42
42
  Requires-Dist: pyright>=1.1.400; extra == 'dev'
43
43
  Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
44
+ Requires-Dist: pytest-timeout>=2.4.0; extra == 'dev'
44
45
  Requires-Dist: pytest>=8.4.0; extra == 'dev'
45
46
  Requires-Dist: ruff>=0.12.0; extra == 'dev'
46
47
  Provides-Extra: templates
@@ -56,6 +56,7 @@ dev = [
56
56
  "pyright>=1.1.400",
57
57
  "pytest>=8.4.0",
58
58
  "pytest-asyncio>=0.24.0",
59
+ "pytest-timeout>=2.4.0",
59
60
  "ruff>=0.12.0",
60
61
  ]
61
62
  templates = [
@@ -140,9 +141,11 @@ ignore = [
140
141
 
141
142
  [tool.pytest.ini_options]
142
143
  testpaths = ["tests"]
143
- addopts = "-ra -n auto"
144
+ addopts = "-ra -n 4"
144
145
  asyncio_mode = "auto"
145
146
  pythonpath = ["src"]
147
+ timeout = 60
148
+ timeout_method = "thread"
146
149
 
147
150
  [dependency-groups]
148
151
  dev = [
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.3.1"
5
+ __version__ = "0.3.2"
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  _SPAWN_SUPPLEMENT = (
6
6
  "Agent Notes:\n\n"
7
- "Lifecycle: queued → running → finalizing → succeeded | failed | cancelled.\n"
7
+ "Lifecycle: queued → running → finalizing → succeeded | failed | cancelled | timed_out.\n"
8
8
  "'finalizing' is transient — treat as active when polling.\n\n"
9
9
  "Which subcommand when:\n\n"
10
10
  " show ID Status, report, cost — first check for any spawn\n\n"
@@ -37,6 +37,7 @@ from meridian.lib.ops.spawn.api import (
37
37
  SpawnForkInput,
38
38
  SpawnListInput,
39
39
  SpawnShowInput,
40
+ SpawnSignalInput,
40
41
  SpawnStatsInput,
41
42
  SpawnStatusInput,
42
43
  SpawnWaitInput,
@@ -46,9 +47,11 @@ from meridian.lib.ops.spawn.api import (
46
47
  spawn_children_sync,
47
48
  spawn_continue_sync,
48
49
  spawn_create_sync,
50
+ spawn_done_sync,
49
51
  spawn_files_sync,
50
52
  spawn_fork_sync,
51
53
  spawn_list_sync,
54
+ spawn_rearm_sync,
52
55
  spawn_show_sync,
53
56
  spawn_stats_sync,
54
57
  spawn_status_sync,
@@ -85,6 +88,20 @@ def _prepare_spawn_runtime_write() -> RuntimeWriteContext:
85
88
  return prepare_for_runtime_write(require_established_project_root())
86
89
 
87
90
 
91
+ def _foreground_spawn_id_notifier(*, quiet: bool) -> Callable[[str], None] | None:
92
+ if quiet or _get_global_options().output.format == "json":
93
+ return None
94
+ sink = _current_output_sink()
95
+
96
+ def _notify(spawn_id: str) -> None:
97
+ sink.status(f"Spawn id: {spawn_id}")
98
+ from meridian.cli.output import flush_sink
99
+
100
+ flush_sink(sink)
101
+
102
+ return _notify
103
+
104
+
88
105
  def _spawn_create_exit_code(result: SpawnActionOutput) -> int:
89
106
  if result.exit_code is not None:
90
107
  return result.exit_code
@@ -558,6 +575,7 @@ def _spawn_create(
558
575
  ),
559
576
  sink=_current_output_sink(),
560
577
  prepared=_prepare_spawn_runtime_write(),
578
+ on_spawn_id=_foreground_spawn_id_notifier(quiet=quiet),
561
579
  )
562
580
  output_format = _get_global_options().output.format
563
581
  if output_format != "json" and metadata:
@@ -581,7 +599,10 @@ def _spawn_list(
581
599
  str | None,
582
600
  Parameter(
583
601
  name="--status",
584
- help="Filter by status: queued, running, finalizing, succeeded, failed, cancelled.",
602
+ help=(
603
+ "Filter by status: queued, running, finalizing, succeeded, "
604
+ "failed, cancelled, timed_out."
605
+ ),
585
606
  ),
586
607
  ] = None,
587
608
  view: Annotated[
@@ -590,7 +611,7 @@ def _spawn_list(
590
611
  name="--view",
591
612
  help=(
592
613
  "Preset list view: active, recent (recent active spawns), "
593
- "all, running, queued, completed, failed, cancelled. "
614
+ "all, running, queued, completed, failed, cancelled, timed_out. "
594
615
  "Default: active."
595
616
  ),
596
617
  ),
@@ -635,6 +656,7 @@ def _spawn_list(
635
656
  "completed": ("succeeded",),
636
657
  "failed": ("failed",),
637
658
  "cancelled": ("cancelled",),
659
+ "timed_out": ("timed_out",),
638
660
  }
639
661
  if normalized_view not in view_map:
640
662
  supported = ", ".join(view_map)
@@ -969,6 +991,42 @@ def _spawn_cancel_all(
969
991
  raise SystemExit(1)
970
992
 
971
993
 
994
+ def _spawn_done(
995
+ emit: Any,
996
+ spawn_id: Annotated[
997
+ str | None,
998
+ Parameter(help="Spawn ID to finish (defaults to MERIDIAN_SPAWN_ID)."),
999
+ ] = None,
1000
+ ) -> None:
1001
+ result = spawn_done_sync(
1002
+ SpawnSignalInput(spawn_id=spawn_id),
1003
+ ctx=RuntimeContext.from_environment(),
1004
+ sink=_current_output_sink(),
1005
+ prepared=_prepare_spawn_runtime_write(),
1006
+ )
1007
+ emit(result)
1008
+ if result.status == "failed":
1009
+ raise SystemExit(1)
1010
+
1011
+
1012
+ def _spawn_rearm(
1013
+ emit: Any,
1014
+ spawn_id: Annotated[
1015
+ str | None,
1016
+ Parameter(help="Spawn ID to keep resident (defaults to MERIDIAN_SPAWN_ID)."),
1017
+ ] = None,
1018
+ ) -> None:
1019
+ result = spawn_rearm_sync(
1020
+ SpawnSignalInput(spawn_id=spawn_id),
1021
+ ctx=RuntimeContext.from_environment(),
1022
+ sink=_current_output_sink(),
1023
+ prepared=_prepare_spawn_runtime_write(),
1024
+ )
1025
+ emit(result)
1026
+ if result.status == "failed":
1027
+ raise SystemExit(1)
1028
+
1029
+
972
1030
  def _spawn_inject(
973
1031
  spawn_id: Annotated[
974
1032
  str,
@@ -1021,6 +1079,20 @@ def register_spawn_commands(app: App, emit: Emitter) -> tuple[set[str], dict[str
1021
1079
  emit=emit,
1022
1080
  default_handler=partial(_spawn_create, emit),
1023
1081
  )
1082
+ app.command(
1083
+ partial(_spawn_done, emit),
1084
+ name="done",
1085
+ help="Signal a resident spawn to finish successfully.",
1086
+ )
1087
+ registered.add("spawn.done")
1088
+ descriptions["meridian.spawn.done"] = "Signal a resident spawn to finish successfully."
1089
+ app.command(
1090
+ partial(_spawn_rearm, emit),
1091
+ name="rearm",
1092
+ help="Signal a resident spawn to keep running.",
1093
+ )
1094
+ registered.add("spawn.rearm")
1095
+ descriptions["meridian.spawn.rearm"] = "Signal a resident spawn to keep running."
1024
1096
  app.command(
1025
1097
  _spawn_inject,
1026
1098
  name="inject",
@@ -98,7 +98,6 @@ def missing_fork_session_error_with_discovery(
98
98
  return missing_fork_session_error(normalized_ref)
99
99
 
100
100
  from meridian.lib.ops.runtime import resolve_runtime_root_for_read
101
- from meridian.lib.state import spawn_store
102
101
  from meridian.lib.state.primary_meta import read_primary_harness_session_discovery
103
102
 
104
103
  runtime_root = resolve_runtime_root_for_read(project_root)
@@ -111,7 +110,13 @@ def missing_fork_session_error_with_discovery(
111
110
  else (source_chat_id or "").strip()
112
111
  )
113
112
  if chat_ref:
114
- chat_spawns = spawn_store.list_spawns(runtime_root, filters={"chat_id": chat_ref})
113
+ from meridian.lib.state import session_identity
114
+
115
+ owner_chat_id = session_identity.get_owner_chat_for_session(runtime_root, chat_ref)
116
+ lookup_chat_id = owner_chat_id or chat_ref
117
+ chat_spawns = session_identity.list_spawns_for_owner_chat(
118
+ runtime_root, lookup_chat_id
119
+ )
115
120
  pi_primary_spawns = [
116
121
  row for row in chat_spawns if row.kind == "primary" and row.harness == "pi"
117
122
  ]
@@ -1337,6 +1337,30 @@ class MeridianConfig(BaseSettings):
1337
1337
  env_vars=("MERIDIAN_PI_CHILD_WAVE_TIMEOUT_SECONDS",),
1338
1338
  ),
1339
1339
  ] = None
1340
+ resident_deadline_seconds: Annotated[
1341
+ float | None,
1342
+ config_field(
1343
+ "timeouts.resident_deadline_seconds",
1344
+ value_kind="float",
1345
+ file_aliases=(
1346
+ file_alias("timeouts", "resident_deadline_seconds"),
1347
+ file_alias(None, "resident_deadline_seconds"),
1348
+ ),
1349
+ env_vars=("MERIDIAN_RESIDENT_DEADLINE_SECONDS",),
1350
+ ),
1351
+ ] = None
1352
+ resident_poll_seconds: Annotated[
1353
+ float | None,
1354
+ config_field(
1355
+ "timeouts.resident_poll_seconds",
1356
+ value_kind="float",
1357
+ file_aliases=(
1358
+ file_alias("timeouts", "resident_poll_seconds"),
1359
+ file_alias(None, "resident_poll_seconds"),
1360
+ ),
1361
+ env_vars=("MERIDIAN_RESIDENT_POLL_SECONDS",),
1362
+ ),
1363
+ ] = None
1340
1364
  pi_task_ping_interval_seconds: Annotated[
1341
1365
  float | None,
1342
1366
  config_field(
@@ -11,7 +11,9 @@ from meridian.lib.core.types import (
11
11
  )
12
12
  from meridian.lib.core.util import FormatContext
13
13
 
14
- SpawnStatus = Literal["queued", "running", "finalizing", "succeeded", "failed", "cancelled"]
14
+ SpawnStatus = Literal[
15
+ "queued", "running", "finalizing", "succeeded", "failed", "cancelled", "timed_out"
16
+ ]
15
17
 
16
18
 
17
19
  class TokenUsage(BaseModel):
@@ -35,6 +35,7 @@ from uuid import UUID
35
35
  import psutil
36
36
  import structlog
37
37
 
38
+ from meridian.lib.core.spawn_lifecycle import TERMINAL_SPAWN_STATUSES, is_active_spawn_status
38
39
  from meridian.lib.core.spawn_start import SpawnStartMetadata
39
40
  from meridian.lib.core.telemetry import (
40
41
  CORE_EVENTS,
@@ -58,7 +59,6 @@ if TYPE_CHECKING:
58
59
  from meridian.lib.core.launch_policy_snapshot import LaunchPolicySnapshot
59
60
  from meridian.lib.hooks.dispatch import HookDispatcher
60
61
  from meridian.lib.launch.types import PrimarySessionMetadata
61
- from meridian.lib.platform.process_scope.base import ProcessScopeSnapshot
62
62
  from meridian.lib.state.spawn.model import (
63
63
  LaunchMode,
64
64
  SpawnOrigin,
@@ -99,14 +99,14 @@ def _spawn_transitions() -> Any:
99
99
  # ---------------------------------------------------------------------------
100
100
 
101
101
  EventType = Literal["spawn.created", "spawn.running", "spawn.finalized"]
102
- TerminalStatus = Literal["succeeded", "failed", "cancelled"]
102
+ TerminalStatus = Literal["succeeded", "failed", "cancelled", "timed_out"]
103
103
  TerminalOrigin = Literal["runner", "launcher", "cancel", "reconciler", "launch_failure"]
104
104
 
105
105
 
106
106
  type TerminalOutcomeCategory = Literal["succeeded"] | SpawnFailureCategory
107
107
 
108
108
 
109
- _TERMINAL_STATUS_VALUES: frozenset[str] = frozenset({"succeeded", "failed", "cancelled"})
109
+ _TERMINAL_STATUS_VALUES: frozenset[str] = TERMINAL_SPAWN_STATUSES
110
110
 
111
111
  # ---------------------------------------------------------------------------
112
112
  # Event ID generation
@@ -235,6 +235,7 @@ class SpawnLifecycleService:
235
235
  self,
236
236
  *,
237
237
  chat_id: str,
238
+ owner_chat_id: str | None = None,
238
239
  parent_id: str | None = None,
239
240
  session_metadata: PrimarySessionMetadata,
240
241
  kind: str = "child",
@@ -262,6 +263,7 @@ class SpawnLifecycleService:
262
263
  result_id = _spawn_store().start_spawn(
263
264
  self._runtime_root,
264
265
  chat_id=chat_id,
266
+ owner_chat_id=owner_chat_id,
265
267
  parent_id=parent_id,
266
268
  model=session_metadata.model,
267
269
  agent=session_metadata.agent,
@@ -306,13 +308,8 @@ class SpawnLifecycleService:
306
308
  worker_pid: int | None = None,
307
309
  runner_pid: int | None = None,
308
310
  runner_created_at_epoch: float | None = None,
309
- scope_snapshot: ProcessScopeSnapshot | None = None,
310
311
  ) -> None:
311
- """Mark a spawn as running and dispatch spawn.running.
312
-
313
- ``scope_snapshot`` is accepted here as a threading seam for Phase 2
314
- persistence; it is not used in the current phase.
315
- """
312
+ """Mark a spawn as running and dispatch spawn.running."""
316
313
  with bind_lifecycle_correlation(
317
314
  self._correlation(operation="mark_running", spawn_id=spawn_id)
318
315
  ):
@@ -421,7 +418,7 @@ class SpawnLifecycleService:
421
418
  resolved_exited_at = exited_at or _utc_now_iso(clock)
422
419
  if self._owns_record(spawn_id):
423
420
  assert self._record is not None
424
- if self._record.status not in {"queued", "running", "finalizing"}:
421
+ if not is_active_spawn_status(self._record.status):
425
422
  return False
426
423
  updated = _spawn_transitions().apply_runner_exit(
427
424
  self._record,
@@ -811,6 +808,7 @@ class SpawnLifecycleService:
811
808
  "spawn.succeeded",
812
809
  "spawn.failed",
813
810
  "spawn.cancelled",
811
+ "spawn.timed_out",
814
812
  }:
815
813
  payload = _terminal_telemetry_payload(record)
816
814
  _emit_lifecycle_event(event_name, record, payload=payload)
@@ -13,7 +13,11 @@ import structlog
13
13
 
14
14
  from meridian.lib.core.types import SpawnId
15
15
  from meridian.lib.platform.process_scope import terminate_scope_sync, terminate_tree_sync
16
- from meridian.lib.platform.process_scope.base import CleanupResult, ProcessScopeSnapshot
16
+ from meridian.lib.platform.process_scope.base import (
17
+ CleanupResult,
18
+ ProcessScopeSnapshot,
19
+ birth_time_unverified,
20
+ )
17
21
  from meridian.lib.state.process_scope_projection import (
18
22
  is_scope_released,
19
23
  mark_scope_released,
@@ -362,12 +366,17 @@ def reclaim_session_owned_scopes_for_chat(
362
366
  chat_id: str,
363
367
  *,
364
368
  grace_seconds: float = 5.0,
369
+ require_live_root: bool = False,
365
370
  ) -> list[CleanupResult]:
366
371
  """Reclaim all session_owned scopes on spawns belonging to a chat.
367
372
 
368
373
  Called at session exit. Terminates all unreleased session_owned scopes
369
374
  on spawns whose chat_id matches, regardless of which specific
370
375
  harness_session_id they reference.
376
+
377
+ Crash repair passes ``require_live_root=True`` because it runs after a
378
+ stale lease has been declared terminal; this keeps repair fail-closed when
379
+ the recorded root is gone or the PID has been reused.
371
380
  """
372
381
  from meridian.lib.state.spawn_store import list_spawns
373
382
 
@@ -381,6 +390,34 @@ def reclaim_session_owned_scopes_for_chat(
381
390
  continue
382
391
  if is_scope_released(runtime_root, spawn_id, scope.release_id):
383
392
  continue
393
+ if require_live_root:
394
+ skip_reason = _live_root_skip_reason(scope)
395
+ if skip_reason is not None:
396
+ result = CleanupResult(
397
+ scope_id=scope.scope_id,
398
+ root_pid=scope.root_pid,
399
+ descendant_count=None,
400
+ reason="session_exit",
401
+ grace_seconds=0.0,
402
+ kill_escalated=False,
403
+ degraded_fallback=False,
404
+ skip_reason=skip_reason,
405
+ )
406
+ logger.debug(
407
+ "Skipped session-owned scope reclaim during crash repair.",
408
+ spawn_id=record.id,
409
+ scope_id=scope.scope_id,
410
+ root_pid=scope.root_pid,
411
+ descendant_count=None,
412
+ reason="session_exit",
413
+ grace_seconds=0.0,
414
+ kill_escalated=False,
415
+ degraded_fallback=False,
416
+ skip_reason=skip_reason,
417
+ chat_id=chat_id,
418
+ )
419
+ results.append(result)
420
+ continue
384
421
  result = terminate_scope_sync(scope, grace_seconds=grace_seconds, reason="session_exit")
385
422
  mark_scope_released(runtime_root, spawn_id, scope.release_id)
386
423
  logger.debug(
@@ -400,6 +437,18 @@ def reclaim_session_owned_scopes_for_chat(
400
437
  return results
401
438
 
402
439
 
440
+ def _live_root_skip_reason(scope: ProcessScopeSnapshot) -> str | None:
441
+ if birth_time_unverified(scope.root_created_at_epoch):
442
+ return "birth_time_unverified_skip_crash_reclaim_to_avoid_pid_reuse_kill"
443
+ try:
444
+ actual = psutil.Process(scope.root_pid).create_time()
445
+ except (psutil.NoSuchProcess, psutil.AccessDenied, OSError):
446
+ return "root_not_alive"
447
+ if abs(actual - scope.root_created_at_epoch) > 1.0:
448
+ return "pid_reuse_detected"
449
+ return None
450
+
451
+
403
452
  __all__ = [
404
453
  "cancel_managed_primary",
405
454
  "reclaim_session_owned_scopes_for_chat",
@@ -12,13 +12,20 @@ from typing import cast
12
12
 
13
13
  from meridian.lib.core.domain import SpawnStatus
14
14
 
15
+ # TODO(status-authority): SpawnStatus Literal in core/domain.py duplicates these sets.
16
+ ALL_SPAWN_STATUSES: frozenset[str] = frozenset(
17
+ {"queued", "running", "finalizing", "succeeded", "failed", "cancelled", "timed_out"}
18
+ )
15
19
  ACTIVE_SPAWN_STATUSES: frozenset[str] = frozenset({"queued", "running", "finalizing"})
16
- TERMINAL_SPAWN_STATUSES: frozenset[str] = frozenset({"succeeded", "failed", "cancelled"})
20
+ TERMINAL_SPAWN_STATUSES: frozenset[str] = frozenset(
21
+ {"succeeded", "failed", "cancelled", "timed_out"}
22
+ )
23
+ FAILURE_SPAWN_STATUSES: frozenset[str] = frozenset({"failed", "timed_out"})
17
24
 
18
25
  _ALLOWED_TRANSITIONS: dict[str, frozenset[str]] = {
19
- "queued": frozenset({"running", "succeeded", "failed", "cancelled"}),
20
- "running": frozenset({"finalizing", "succeeded", "failed", "cancelled"}),
21
- "finalizing": frozenset({"succeeded", "failed", "cancelled"}),
26
+ "queued": frozenset({"running", "succeeded", "failed", "cancelled", "timed_out"}),
27
+ "running": frozenset({"finalizing", "succeeded", "failed", "cancelled", "timed_out"}),
28
+ "finalizing": frozenset({"succeeded", "failed", "cancelled", "timed_out"}),
22
29
  }
23
30
  _CONTROL_EVENT_NAMES: frozenset[str] = frozenset(
24
31
  {"cancelled", "error", "error.connectionclosed"}
@@ -73,6 +80,7 @@ class ExecutionTerminalFacts:
73
80
  failure_reason: str | None = None
74
81
  cancellation_observed: bool = False
75
82
  durable_report_completion: bool = False
83
+ terminal_status: SpawnStatus | None = None
76
84
 
77
85
 
78
86
  @dataclass(frozen=True)
@@ -154,6 +162,18 @@ def is_active_spawn_status(status: str) -> bool:
154
162
  return status in ACTIVE_SPAWN_STATUSES
155
163
 
156
164
 
165
+ def is_terminal_spawn_status(status: str) -> bool:
166
+ return status in TERMINAL_SPAWN_STATUSES
167
+
168
+
169
+ def coerce_spawn_status(status: str) -> SpawnStatus:
170
+ """Preserve every known spawn status; recover unknown persisted values as failed."""
171
+
172
+ if status in ALL_SPAWN_STATUSES:
173
+ return cast("SpawnStatus", status)
174
+ return "failed"
175
+
176
+
157
177
  def validate_transition(from_status: SpawnStatus, to_status: SpawnStatus) -> None:
158
178
  allowed = _ALLOWED_TRANSITIONS.get(from_status, frozenset())
159
179
  if to_status not in allowed:
@@ -202,11 +222,16 @@ def resolve_execution_terminal_state(
202
222
  failure_reason: str | None,
203
223
  cancelled: bool = False,
204
224
  durable_report_completion: bool = False,
225
+ terminal_status: SpawnStatus | None = None,
205
226
  ) -> tuple[SpawnStatus, int, str | None]:
206
227
  """Normalize one execution outcome into the persisted terminal state."""
207
228
 
229
+ if terminal_status is not None and terminal_status != "succeeded":
230
+ return terminal_status, exit_code, failure_reason
208
231
  if durable_report_completion:
209
232
  return "succeeded", 0, None
233
+ if terminal_status is not None:
234
+ return terminal_status, exit_code, failure_reason
210
235
  if cancelled:
211
236
  resolved_exit_code = exit_code if exit_code != 0 else 130
212
237
  return "cancelled", resolved_exit_code, failure_reason
@@ -225,6 +250,7 @@ def resolve_execution_terminal_outcome(
225
250
  failure_reason=facts.failure_reason,
226
251
  cancelled=facts.cancellation_observed,
227
252
  durable_report_completion=facts.durable_report_completion,
253
+ terminal_status=facts.terminal_status,
228
254
  )
229
255
  return ExecutionTerminalOutcome(
230
256
  status=status,