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.
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/PKG-INFO +2 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/pyproject.toml +4 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/__init__.py +1 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/agent_help.py +1 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/spawn.py +74 -2
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/utils.py +7 -2
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/settings.py +24 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/domain.py +3 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/lifecycle.py +8 -10
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/process_cleanup.py +50 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/spawn_lifecycle.py +30 -4
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/spawn_service.py +67 -14
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/telemetry.py +3 -3
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/.context/CONTEXT.md +6 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/AGENTS.md +4 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/base.py +15 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/claude_ws.py +1 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/codex_ws.py +118 -63
- meridian_cli-0.3.2/src/meridian/lib/harness/connections/liveness.py +155 -0
- meridian_cli-0.3.2/src/meridian/lib/harness/connections/managed_backend.py +128 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/opencode_http.py +259 -103
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/pi_rpc.py +1 -0
- meridian_cli-0.3.2/src/meridian/lib/harness/connections/resident_backend.py +70 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi_lifecycle_events.py +7 -173
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/errors.py +2 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/primary_attach.py +106 -69
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/runner.py +33 -3
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/subprocess_launcher.py +3 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/resolve.py +60 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/session_scope.py +2 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/signals.py +8 -2
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming_runner.py +69 -51
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/diag.py +17 -2
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/reference.py +27 -12
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/reference_recovery.py +29 -16
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_export.py +44 -14
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_target.py +101 -27
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +1 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/__init__.py +6 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/api.py +251 -48
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/context_ref.py +3 -2
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute.py +69 -23
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_init.py +3 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_runner.py +2 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_session.py +2 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/models.py +32 -5
- meridian_cli-0.3.2/src/meridian/lib/ops/spawn/pre_init.py +134 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/query.py +6 -5
- meridian_cli-0.3.2/src/meridian/lib/platform/detached_process.py +132 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/base.py +18 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/fallback.py +8 -4
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/posix.py +20 -7
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/windows_job.py +6 -5
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/liveness.py +23 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/managed_primary.py +21 -24
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/primary_meta.py +9 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/process_scope_projection.py +26 -26
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/reaper.py +111 -31
- meridian_cli-0.3.2/src/meridian/lib/state/session_identity.py +172 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/session_store.py +5 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/model.py +2 -2
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/repository.py +3 -0
- meridian_cli-0.3.2/src/meridian/lib/state/spawn_signals.py +61 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn_store.py +25 -2
- meridian_cli-0.3.2/src/meridian/lib/state/spawn_tree.py +119 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/AGENTS.md +8 -1
- meridian_cli-0.3.2/src/meridian/lib/streaming/completion_nudge.py +21 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/disk_watcher.py +3 -6
- meridian_cli-0.3.2/src/meridian/lib/streaming/drain_coordinator.py +120 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/drain_wait.py +10 -10
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_drain.py +253 -59
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_process_cleanup.py +2 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_quiescence.py +3 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/pi_subspawn_tracker.py +47 -25
- meridian_cli-0.3.2/src/meridian/lib/streaming/resident_drain.py +320 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/signal_canceller.py +3 -5
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_drain_loop.py +158 -103
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_manager.py +165 -99
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_session.py +3 -1
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/events.py +13 -3
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/observer.py +20 -4
- meridian_cli-0.3.1/src/meridian/lib/platform/windows_job.py +0 -102
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/.gitignore +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/LICENSE +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/README.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/ag_ui/__init__.pyi +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/ag_ui/core.pyi +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/__main__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/_cmd_utils.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/app_tree.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/argv_normalization.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/bootstrap.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/bootstrap_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/chat_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/config_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/doctor_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/entrypoint.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/ext_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/ext_registration.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/hooks_authority.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/hooks_commands.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/kg_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/main.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/mars_passthrough.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/mermaid_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/migrate_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/misc_commands.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/models_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/output.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/primary_launch.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/qi_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/report_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/session_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/spawn_inject.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/catalog.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/classify.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/cyclopts_app.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/help.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/startup/policy.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/streaming_serve.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/sync_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/telemetry_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/work_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/cli/workspace_cmd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/dev/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/dev/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/dev/pytests.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/config.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/project_state.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/bootstrap/services.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/agent.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/bootstrap.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/catalog_session.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/model_aliases.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/models.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/catalog/skill.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/backend_acquisition.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/backend_handle.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/checkpoint.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/command_handler.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/command_invariants.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/commands.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_index.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_log.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_observer.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/event_pipeline.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/frontend.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/base.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/claude.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/codex.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/common.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/opencode.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/registry.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/policy.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/protocol.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/recovery.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/replay.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/runtime.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/server.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/session_service.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/chat/ws_fanout.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/catalog.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/context_config.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/preserving_edit.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/project_config_state.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/project_paths.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/project_root.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/schema.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/config/workspace.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/context/resolver.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/child_env.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/clock.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/codec.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/command_strings.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/context.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/conversation.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/depth.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/execution_policy.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/formatting.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/launch_policy_snapshot.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/logging.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/overrides.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/resolved_context.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/sink.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/spawn_start.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/core/util.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/diagnostics.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/biomed.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/sessions.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/commands/workbench.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/context.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/descriptors.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/dispatcher.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/first_party.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/observability.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/registry.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/extensions/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/adapter.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/bundle.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/claude.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/claude_preflight.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/claude_utils.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/codex.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/codex_rollout.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/common.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/connections/errors.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/control_action.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/cost.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/cursor.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/errors.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractor.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/base.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/claude.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/codex.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/cursor.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/opencode.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/extractors/pi.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/launch_spec.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/launch_types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/opencode.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/opencode_storage.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/opencode_transcript.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/base.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/claude.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/codex.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/passthrough/registry.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/permission_broker.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi_paths.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/_guards.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_claude.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_pi_native_tui.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/project_pi_rpc.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/registry.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/semantics.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/session_detection.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/harness/transcript.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/base.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/builtin_registry.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/config.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/dispatch.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/interval.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/registry.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/runner.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/hooks/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ignores.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/graph.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/report.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/serializer.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/kg/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/artifact_io.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/bundle_adapter.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/claude_session_access.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/command.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/compiler.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/composition.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/composition_spawn.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/constants.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/context.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/cwd.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/env.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/extract.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/fork.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/launch_types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/materialize.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/permissions.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/plan.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/policies.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/policy_snapshot.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/ports.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/session.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/prompt.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/prompt_context.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/reference.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/report.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/request.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/resolution.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/run_inputs.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/runner_helpers.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/text_utils.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/workspace.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/workspace_projection.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/launch/written_files.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/extract.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/markdown/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/report.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/scanner.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/serializer.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/line_map.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/suppression.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/style/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/mermaid/validator.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/debug_tracer.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/observability/trace_helpers.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/catalog.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/commands.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/config.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/config_surface.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/context.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/hooks.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/init_ops.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/mars.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/migration.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/pruning.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/qi.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/report.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/runtime.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_corpus.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_log.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_log_render.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_render.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_repair.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_search.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/session_transcript.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/spawn/prepare.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/sync_conflicts.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_attachment.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_dashboard.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_lifecycle.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/work_sessions.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/ops/workspace.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/locking.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/terminate.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/platform/unix_modules.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/budget.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/guardrails.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/permissions.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/safety/redaction.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/service_context.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/spawn/archive.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/artifact_store.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/atomic.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/event_store.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/history.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/launch_boundary.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/paths.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/runtime_root.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn/transitions.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/spawn_report.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/timestamps.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/user_paths.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/wordgen.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/wordlists.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/state/work_store.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/control_socket.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/drain_policy.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/event_observers.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/heartbeat.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/spawn_dispatch.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/streaming/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/bootstrap.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/correlation.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/init.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/maintenance.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/observers.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/query.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/reader.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/retention.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/router.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/sinks.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/telemetry/status.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/tools.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/utils/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/lib/utils/time.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/README.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.test.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/spawn_origins.test.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/spawn_origins.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/package.json +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/pi_runtime/vitest.config.ts +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/__init__.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/config.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/fs.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/git.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/state.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/plugin_api/types.py +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/py.typed +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/server/AGENTS.md +0 -0
- {meridian_cli-0.3.1 → meridian_cli-0.3.2}/src/meridian/server/__init__.py +0 -0
- {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.
|
|
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
|
|
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 = [
|
|
@@ -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=
|
|
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
|
-
|
|
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[
|
|
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] =
|
|
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
|
|
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
|
|
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(
|
|
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,
|