meridian-cli 0.3.2__tar.gz → 0.3.4__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.2 → meridian_cli-0.3.4}/.gitignore +1 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/PKG-INFO +1 -13
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/README.md +0 -12
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/__init__.py +1 -1
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/spawn.py +15 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/settings.py +36 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/child_env.py +1 -1
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/launch_policy_snapshot.py +1 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/spawn_service.py +18 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/.context/CONTEXT.md +7 -6
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/AGENTS.md +17 -3
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_pi_native_tui.py +19 -5
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_pi_rpc.py +19 -5
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/env.py +2 -2
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/policy_snapshot.py +1 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/runner.py +5 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/request.py +1 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/config.py +41 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/api.py +2 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_runner.py +4 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/models.py +3 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/prepare.py +30 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/.context/CONTEXT.md +15 -11
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/AGENTS.md +2 -1
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/.context/CONTEXT.md +23 -3
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/AGENTS.md +8 -6
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/LICENSE +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/pyproject.toml +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/ag_ui/__init__.pyi +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/ag_ui/core.pyi +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/__main__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/_cmd_utils.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/agent_help.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/app_tree.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/argv_normalization.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/bootstrap.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/bootstrap_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/chat_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/config_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/doctor_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/entrypoint.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/ext_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/ext_registration.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/hooks_authority.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/hooks_commands.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/kg_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/main.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/mars_passthrough.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/mermaid_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/migrate_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/misc_commands.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/models_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/output.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/primary_launch.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/qi_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/report_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/session_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/spawn_inject.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/catalog.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/classify.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/cyclopts_app.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/help.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/startup/policy.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/streaming_serve.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/sync_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/telemetry_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/utils.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/work_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/cli/workspace_cmd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/dev/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/dev/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/dev/pytests.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/config.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/project_state.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/bootstrap/services.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/agent.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/bootstrap.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/catalog_session.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/model_aliases.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/models.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/catalog/skill.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/backend_acquisition.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/backend_handle.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/checkpoint.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/command_handler.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/command_invariants.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/commands.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_index.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_log.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_observer.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/event_pipeline.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/frontend.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/base.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/claude.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/codex.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/common.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/opencode.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/registry.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/policy.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/protocol.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/recovery.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/replay.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/runtime.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/server.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/session_service.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/chat/ws_fanout.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/catalog.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/context_config.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/preserving_edit.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/project_config_state.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/project_paths.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/project_root.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/schema.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/config/workspace.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/context/resolver.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/clock.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/codec.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/command_strings.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/context.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/conversation.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/depth.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/domain.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/execution_policy.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/formatting.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/lifecycle.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/logging.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/overrides.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/process_cleanup.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/resolved_context.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/sink.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/spawn_start.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/telemetry.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/core/util.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/diagnostics.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/biomed.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/sessions.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/commands/workbench.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/context.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/descriptors.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/dispatcher.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/first_party.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/observability.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/registry.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/extensions/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/adapter.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/bundle.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/claude.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/claude_preflight.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/claude_utils.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/codex.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/codex_rollout.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/common.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/base.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/codex_ws.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/errors.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/liveness.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/managed_backend.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/resident_backend.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/control_action.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/cost.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/cursor.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/errors.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractor.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/base.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/claude.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/codex.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/cursor.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/opencode.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/extractors/pi.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/launch_spec.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/launch_types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/opencode.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/opencode_storage.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/opencode_transcript.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/base.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/claude.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/codex.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/passthrough/registry.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/permission_broker.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi_paths.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/_guards.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_claude.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/registry.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/semantics.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/session_detection.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/transcript.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/base.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/builtin_registry.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/config.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/dispatch.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/interval.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/registry.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/runner.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/hooks/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ignores.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/graph.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/report.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/serializer.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/kg/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/artifact_io.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/bundle_adapter.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/claude_session_access.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/command.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/compiler.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/composition.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/composition_spawn.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/constants.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/context.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/cwd.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/errors.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/extract.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/fork.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/launch_types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/materialize.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/permissions.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/plan.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/policies.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/ports.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/primary_attach.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/session.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/prompt.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/prompt_context.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/reference.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/report.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/resolution.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/resolve.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/run_inputs.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/runner_helpers.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/session_scope.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/signals.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/streaming_runner.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/text_utils.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/workspace.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/workspace_projection.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/launch/written_files.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/extract.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/markdown/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/report.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/scanner.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/serializer.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/line_map.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/suppression.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/style/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/mermaid/validator.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/debug_tracer.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/observability/trace_helpers.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/catalog.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/commands.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/config_surface.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/context.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/diag.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/hooks.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/init_ops.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/mars.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/migration.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/pruning.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/qi.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/reference.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/reference_recovery.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/report.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/runtime.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_corpus.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_export.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_log.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_log_render.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_render.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_repair.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_search.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_target.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/session_transcript.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/pre_init.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/spawn/query.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/sync_conflicts.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_attachment.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_dashboard.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_lifecycle.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/work_sessions.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/ops/workspace.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/detached_process.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/locking.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/base.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/posix.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/terminate.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/platform/unix_modules.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/budget.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/guardrails.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/permissions.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/safety/redaction.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/service_context.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/spawn/archive.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/artifact_store.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/atomic.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/event_store.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/history.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/launch_boundary.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/liveness.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/managed_primary.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/paths.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/primary_meta.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/process_scope_projection.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/reaper.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/runtime_root.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/session_identity.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/session_store.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/model.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/repository.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn/transitions.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_report.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_signals.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_store.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/spawn_tree.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/timestamps.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/user_paths.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/wordgen.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/wordlists.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/state/work_store.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/completion_nudge.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/control_socket.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/disk_watcher.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/drain_coordinator.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/drain_policy.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/drain_wait.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/event_observers.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/heartbeat.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_drain.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_process_cleanup.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_quiescence.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/pi_subspawn_tracker.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/resident_drain.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/signal_canceller.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_dispatch.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_drain_loop.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_manager.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/spawn_session.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/streaming/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/bootstrap.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/correlation.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/events.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/init.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/maintenance.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/observer.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/observers.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/query.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/reader.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/retention.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/router.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/sinks.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/telemetry/status.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/tools.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/utils/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/utils/time.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/README.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/dist/extensions/managed-bash/index.js +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/dist/extensions/meridian-spawn-watch/index.js +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/bundle.smoke.test.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_log_store.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.test.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/bash_runtime.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/bundle.smoke.test.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.test.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/meridian-spawn-watch/src/index.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/ids.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/json_file.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/log_overlay.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/meridian_cli.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.test.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/meridian_spawn.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/pi_harness_profile.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/pi_state_paths.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/schemas.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/selectable_panel.test.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/selectable_panel.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/spawn_origins.test.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/spawn_origins.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/extensions/shared/ui.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/package.json +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/scripts/verify-extensions-loop.mjs +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/pi_runtime/vitest.config.ts +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/config.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/fs.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/git.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/state.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/plugin_api/types.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/py.typed +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/server/AGENTS.md +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/server/__init__.py +0 -0
- {meridian_cli-0.3.2 → meridian_cli-0.3.4}/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.4
|
|
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
|
|
@@ -54,18 +54,6 @@ Orchestrate AI coding agents across Claude Code, Codex, and OpenCode. Each model
|
|
|
54
54
|
|
|
55
55
|
> **Early development.** Meridian is not stable. Expect breaking changes in any release. If you need a stable workflow, this project is not ready for you yet.
|
|
56
56
|
|
|
57
|
-
## v0.1.0 Migration
|
|
58
|
-
|
|
59
|
-
v0.1.0 removes all legacy state format support in the state layer.
|
|
60
|
-
|
|
61
|
-
If you are upgrading from any pre-0.1.0 build, run:
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
rm -rf ~/.meridian
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
This is a clean break. There is no automatic migration.
|
|
68
|
-
|
|
69
57
|
## Why
|
|
70
58
|
|
|
71
59
|
Claude Code is (supposed to be) the best way to run Claude. Codex CLI is often the best way to run GPT. Each provider's harness is optimized for their models — sandboxing, tool use, context handling, everything (supposedly).
|
|
@@ -4,18 +4,6 @@ Orchestrate AI coding agents across Claude Code, Codex, and OpenCode. Each model
|
|
|
4
4
|
|
|
5
5
|
> **Early development.** Meridian is not stable. Expect breaking changes in any release. If you need a stable workflow, this project is not ready for you yet.
|
|
6
6
|
|
|
7
|
-
## v0.1.0 Migration
|
|
8
|
-
|
|
9
|
-
v0.1.0 removes all legacy state format support in the state layer.
|
|
10
|
-
|
|
11
|
-
If you are upgrading from any pre-0.1.0 build, run:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
rm -rf ~/.meridian
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
This is a clean break. There is no automatic migration.
|
|
18
|
-
|
|
19
7
|
## Why
|
|
20
8
|
|
|
21
9
|
Claude Code is (supposed to be) the best way to run Claude. Codex CLI is often the best way to run GPT. Each provider's harness is optimized for their models — sandboxing, tool use, context handling, everything (supposedly).
|
|
@@ -185,6 +185,7 @@ def _shared_launch_input_kwargs(
|
|
|
185
185
|
debug: bool,
|
|
186
186
|
task_ping_interval: str | None,
|
|
187
187
|
task_ping_reset_on_activity: bool | None,
|
|
188
|
+
env: tuple[str, ...],
|
|
188
189
|
) -> SpawnLaunchOptionUpdates:
|
|
189
190
|
return {
|
|
190
191
|
"dry_run": dry_run,
|
|
@@ -204,6 +205,7 @@ def _shared_launch_input_kwargs(
|
|
|
204
205
|
"debug": debug,
|
|
205
206
|
"task_ping_interval": task_ping_interval,
|
|
206
207
|
"task_ping_reset_on_activity": task_ping_reset_on_activity,
|
|
208
|
+
"env": env,
|
|
207
209
|
}
|
|
208
210
|
|
|
209
211
|
|
|
@@ -454,6 +456,18 @@ def _spawn_create(
|
|
|
454
456
|
show=False,
|
|
455
457
|
),
|
|
456
458
|
] = False,
|
|
459
|
+
env: Annotated[
|
|
460
|
+
tuple[str, ...],
|
|
461
|
+
Parameter(
|
|
462
|
+
name="--env",
|
|
463
|
+
help=(
|
|
464
|
+
"Environment variables for the spawned harness "
|
|
465
|
+
"in KEY=VALUE form (repeatable). "
|
|
466
|
+
"Overrides config-level [env] defaults."
|
|
467
|
+
),
|
|
468
|
+
negative_iterable=(),
|
|
469
|
+
),
|
|
470
|
+
] = (),
|
|
457
471
|
) -> None:
|
|
458
472
|
# Passthrough lives on GlobalOptions, not a function parameter — see
|
|
459
473
|
# _split_passthrough_args() for why cyclopts can't handle ``--`` correctly.
|
|
@@ -500,6 +514,7 @@ def _spawn_create(
|
|
|
500
514
|
task_ping_interval=task_ping_interval,
|
|
501
515
|
task_ping_reset_on_activity=task_ping_reset_on_activity,
|
|
502
516
|
debug=debug,
|
|
517
|
+
env=env,
|
|
503
518
|
)
|
|
504
519
|
resolved_prompt = _resolve_spawn_prompt(
|
|
505
520
|
prompt,
|
|
@@ -428,6 +428,23 @@ def _normalize_harness_table(
|
|
|
428
428
|
return values
|
|
429
429
|
|
|
430
430
|
|
|
431
|
+
def _normalize_env_table(raw_value: object, *, source: str) -> dict[str, str]:
|
|
432
|
+
if not isinstance(raw_value, dict):
|
|
433
|
+
raise ValueError(f"Invalid value for '{source}': expected table.")
|
|
434
|
+
values: dict[str, str] = {}
|
|
435
|
+
for raw_key, raw_val in cast("dict[str, object]", raw_value).items():
|
|
436
|
+
key = str(raw_key).strip()
|
|
437
|
+
if not key:
|
|
438
|
+
raise ValueError(f"Invalid value for '{source}': expected non-empty key.")
|
|
439
|
+
if not isinstance(raw_val, str):
|
|
440
|
+
raise ValueError(
|
|
441
|
+
f"Invalid value for '{source}.{key}': expected string, got "
|
|
442
|
+
f"{type(raw_val).__name__} ({raw_val!r})."
|
|
443
|
+
)
|
|
444
|
+
values[key] = raw_val
|
|
445
|
+
return values
|
|
446
|
+
|
|
447
|
+
|
|
431
448
|
def _normalize_spawn_table(raw_value: object, *, source: str) -> dict[str, object]:
|
|
432
449
|
if not isinstance(raw_value, dict):
|
|
433
450
|
raise ValueError(f"Invalid value for '{source}': expected table.")
|
|
@@ -766,6 +783,19 @@ DYNAMIC_SECTION_DESCRIPTORS: dict[str, DynamicSectionDescriptor] = {
|
|
|
766
783
|
"",
|
|
767
784
|
),
|
|
768
785
|
),
|
|
786
|
+
"env": DynamicSectionDescriptor(
|
|
787
|
+
section_key="env",
|
|
788
|
+
merge_kind="nested_dict",
|
|
789
|
+
scaffold_lines=(
|
|
790
|
+
"# -- Environment variables passed to spawned harnesses -----------------------",
|
|
791
|
+
"# Flat key-value string map. Applied to every spawn from this project.",
|
|
792
|
+
"# Keys from meridian.local.toml override meridian.toml; project overrides user.",
|
|
793
|
+
"",
|
|
794
|
+
"# [env]",
|
|
795
|
+
'# OPENCODE_ENABLE_EXA = "1"',
|
|
796
|
+
"",
|
|
797
|
+
),
|
|
798
|
+
),
|
|
769
799
|
}
|
|
770
800
|
|
|
771
801
|
|
|
@@ -791,6 +821,8 @@ def normalize_dynamic_sections(
|
|
|
791
821
|
source=section_key,
|
|
792
822
|
project_root=project_root,
|
|
793
823
|
)
|
|
824
|
+
elif section_key == "env":
|
|
825
|
+
value = _normalize_env_table(raw_value, source=section_key)
|
|
794
826
|
else:
|
|
795
827
|
continue
|
|
796
828
|
if descriptor.merge_kind != "external" and value is not None:
|
|
@@ -862,6 +894,9 @@ def _normalize_toml_payload(
|
|
|
862
894
|
_normalize_spawn_table(raw_value, source="spawn"),
|
|
863
895
|
)
|
|
864
896
|
continue
|
|
897
|
+
if key == "env":
|
|
898
|
+
normalized["env"] = _normalize_env_table(raw_value, source="env")
|
|
899
|
+
continue
|
|
865
900
|
if key in DYNAMIC_SECTION_DESCRIPTORS:
|
|
866
901
|
normalized = merge_dynamic_sections(
|
|
867
902
|
normalized,
|
|
@@ -1404,6 +1439,7 @@ class MeridianConfig(BaseSettings):
|
|
|
1404
1439
|
output: OutputConfig = Field(default_factory=OutputConfig)
|
|
1405
1440
|
state: StateConfig = Field(default_factory=StateConfig)
|
|
1406
1441
|
work: WorkConfig = Field(default_factory=WorkConfig)
|
|
1442
|
+
env: dict[str, str] = Field(default_factory=dict)
|
|
1407
1443
|
|
|
1408
1444
|
@field_validator("default_wait_yield_seconds", "min_wait_yield_seconds")
|
|
1409
1445
|
@classmethod
|
|
@@ -31,7 +31,7 @@ def validate_child_env_keys(overrides: Mapping[str, str]) -> None:
|
|
|
31
31
|
:data:`ALLOWED_CHILD_ENV_KEYS`.
|
|
32
32
|
"""
|
|
33
33
|
for key in overrides:
|
|
34
|
-
if not key.startswith("MERIDIAN_"):
|
|
34
|
+
if not key.upper().startswith("MERIDIAN_"):
|
|
35
35
|
continue
|
|
36
36
|
if key in ALLOWED_CHILD_ENV_KEYS:
|
|
37
37
|
continue
|
|
@@ -25,6 +25,7 @@ class LaunchPolicySnapshot(BaseModel):
|
|
|
25
25
|
skill_paths: tuple[str, ...] = ()
|
|
26
26
|
loaded_skills: tuple[SkillContent, ...] = ()
|
|
27
27
|
extra_args: tuple[str, ...] = ()
|
|
28
|
+
env: dict[str, str] = Field(default_factory=dict)
|
|
28
29
|
execution_policy: ResolvedExecutionPolicy = Field(default_factory=ResolvedExecutionPolicy)
|
|
29
30
|
tools: ToolsField | None = None
|
|
30
31
|
mcp_tools: tuple[str, ...] = ()
|
|
@@ -76,6 +76,20 @@ _MAX_REAP_PASSES = 4
|
|
|
76
76
|
logger = structlog.get_logger()
|
|
77
77
|
|
|
78
78
|
|
|
79
|
+
def _config_snapshot_env(config_snapshot: dict[str, object]) -> dict[str, str]:
|
|
80
|
+
env = config_snapshot.get("env")
|
|
81
|
+
if isinstance(env, dict):
|
|
82
|
+
result: dict[str, str] = {}
|
|
83
|
+
for k, v in cast("dict[str, object]", env).items():
|
|
84
|
+
if not k.strip():
|
|
85
|
+
continue
|
|
86
|
+
if not isinstance(v, str):
|
|
87
|
+
continue
|
|
88
|
+
result[k] = v
|
|
89
|
+
return result
|
|
90
|
+
return {}
|
|
91
|
+
|
|
92
|
+
|
|
79
93
|
def _resolve_explicit_timeout_seconds(resolved_request: object) -> float | None:
|
|
80
94
|
"""Extract explicit timeout seconds from resolved request-like objects."""
|
|
81
95
|
|
|
@@ -360,6 +374,9 @@ class SpawnApplicationService:
|
|
|
360
374
|
project_paths=project_paths,
|
|
361
375
|
spawn_id=str(final_spawn_id),
|
|
362
376
|
)
|
|
377
|
+
config_env = _config_snapshot_env(payload.runtime.config_snapshot)
|
|
378
|
+
request_env = dict(prepared_surface.request.env)
|
|
379
|
+
resolved_env = {**config_env, **request_env}
|
|
363
380
|
launch_ctx = await asyncio.to_thread(
|
|
364
381
|
bind_spawn_launch_context,
|
|
365
382
|
prepared=prepared_surface,
|
|
@@ -368,6 +385,7 @@ class SpawnApplicationService:
|
|
|
368
385
|
report_output_path=report_output_path,
|
|
369
386
|
runtime_work_id=effective_work_id,
|
|
370
387
|
dry_run=False,
|
|
388
|
+
plan_overrides=resolved_env,
|
|
371
389
|
),
|
|
372
390
|
runtime=payload.runtime,
|
|
373
391
|
harness_registry=payload.harness_registry,
|
{meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/connections/.context/CONTEXT.md
RENAMED
|
@@ -45,12 +45,16 @@ Required abstract methods — every subclass must implement all of these:
|
|
|
45
45
|
- `harness_id`, `spawn_id`, `capabilities` properties
|
|
46
46
|
- `session_id` → `str | None` (None until the transport delivers a session identifier)
|
|
47
47
|
- `subprocess_pid` → `int | None`
|
|
48
|
+
- `resident_backend` → `ResidentBackendControl | None`; Codex/OpenCode expose
|
|
49
|
+
this for resident-until-done structured liveness and follow-up turns;
|
|
50
|
+
non-resident transports return None. This is the only public resident control
|
|
51
|
+
seam — callers do not reach for adapter-specific backend objects.
|
|
52
|
+
- `scope_snapshot` → `ProcessScopeSnapshot | None`; managed backends expose the
|
|
53
|
+
process-scope facts captured at launch so primary attach and cleanup paths do
|
|
54
|
+
not reconstruct containment from PID fields.
|
|
48
55
|
- `start(config, spec)` → async; raises if already started
|
|
49
56
|
- `stop()` → async; idempotent
|
|
50
57
|
- `health()` → bool
|
|
51
|
-
- `resident_backend` → `ResidentBackendControl | None`; Codex/OpenCode expose
|
|
52
|
-
this for resident-until-done structured liveness and follow-up turns;
|
|
53
|
-
non-resident transports return None.
|
|
54
58
|
- `send_user_message(text)` → async
|
|
55
59
|
- `send_cancel()` → async
|
|
56
60
|
- `events()` → `AsyncIterator[HarnessEvent]`
|
|
@@ -61,9 +65,6 @@ supports the capability:
|
|
|
61
65
|
- `start_observer(config, spec)` — observer mode; guard with `capabilities.supports_primary_observer`
|
|
62
66
|
- `configure_primary_runtime_requests(policy, event_sink, request_handler)`
|
|
63
67
|
- `inject_runtime_event(event)`
|
|
64
|
-
- `inject_turn(message)` — compatibility wrapper that delegates to
|
|
65
|
-
`resident_backend.begin_followup_turn`; transports should implement follow-up
|
|
66
|
-
turns through the resident backend seam instead of overriding this directly.
|
|
67
68
|
- `respond_request(request_id, decision, payload)` — Codex only
|
|
68
69
|
- `respond_user_input(request_id, answers)` — Codex only
|
|
69
70
|
|
|
@@ -11,12 +11,13 @@ Each transport wraps a long-lived process and turns its output into a stream of
|
|
|
11
11
|
`HarnessEvent` objects consumed by the drain loop. The drain loop calls
|
|
12
12
|
`terminal_outcome(event)` on each event; when that returns non-None, it breaks.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Transports differ at the wire level:
|
|
15
15
|
- **Claude** (`claude_ws.py`): stdin/stdout NDJSON. No WebSocket despite the filename.
|
|
16
|
-
- **Codex** (`codex_ws.py`): real WebSocket to `codex app-server`, JSON-RPC 2.0.
|
|
16
|
+
- **Codex** (`codex_ws.py`): real WebSocket to a managed `codex app-server`, JSON-RPC 2.0.
|
|
17
17
|
Codex's `requestApproval` and `requestUserInput` messages are dispatched to
|
|
18
18
|
either `AutoAcceptHandler` (spawn paths) or `InteractiveHandler` (managed-primary attach).
|
|
19
|
-
- **OpenCode** (`opencode_http.py`): HTTP+SSE to `opencode serve`.
|
|
19
|
+
- **OpenCode** (`opencode_http.py`): HTTP+SSE to managed `opencode serve`.
|
|
20
|
+
- **Cursor/Pi**: narrower spawned-session transports; no resident backend seam.
|
|
20
21
|
|
|
21
22
|
## Key Rules
|
|
22
23
|
|
|
@@ -31,6 +32,14 @@ distinction.
|
|
|
31
32
|
implement all abstract methods, register in the bundle. Missing registration →
|
|
32
33
|
`KeyError` at lookup time.
|
|
33
34
|
|
|
35
|
+
**Resident control goes through `resident_backend`.** Do not add connection-level
|
|
36
|
+
turn-injection or managed-backend shims. Codex/OpenCode return a
|
|
37
|
+
`ResidentBackendControl`; callers use `begin_followup_turn()` through that seam.
|
|
38
|
+
|
|
39
|
+
**Managed backend liveness belongs to `BackendLivenessPolicy`.** Adapters feed it
|
|
40
|
+
activity, active turns, active requests, backend pid, and birth time; callers consume
|
|
41
|
+
its structured decisions instead of inventing per-adapter alive checks.
|
|
42
|
+
|
|
34
43
|
## Entry Points
|
|
35
44
|
|
|
36
45
|
- `base.py` — `HarnessConnection` ABC, `HarnessEvent`, `ConnectionCapabilities`,
|
|
@@ -39,6 +48,11 @@ implement all abstract methods, register in the bundle. Missing registration →
|
|
|
39
48
|
`ResidentDrainCoordinator` for structured liveness, awaiting-done signaling,
|
|
40
49
|
and follow-up turns. This seam's presence, not the harness id, selects the
|
|
41
50
|
resident drain coordinator.
|
|
51
|
+
- `liveness.py` — `BackendLivenessPolicy`, the shared managed-backend liveness
|
|
52
|
+
classifier for Codex/OpenCode.
|
|
53
|
+
- `managed_backend.py` — single helper for launching managed backend subprocesses,
|
|
54
|
+
building `ProcessScopeSnapshot`, linking parent-death behavior when possible,
|
|
55
|
+
and recording `process_scopes.json`.
|
|
42
56
|
- `__init__.py` — `get_connection_class(harness_id, transport_id)`.
|
|
43
57
|
|
|
44
58
|
## Depth
|
|
@@ -52,6 +52,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
|
|
|
52
52
|
|
|
53
53
|
_MANAGED_FLAG_ALIASES: dict[str, tuple[str, ...]] = {
|
|
54
54
|
"--model": ("--model", "-m"),
|
|
55
|
+
"--thinking": ("--thinking",),
|
|
55
56
|
"--append-system-prompt": ("--append-system-prompt",),
|
|
56
57
|
"--session": ("--session",),
|
|
57
58
|
"--fork": ("--fork",),
|
|
@@ -148,12 +149,13 @@ def _project_model_arg(spec: ResolvedLaunchSpec) -> str | None:
|
|
|
148
149
|
if not model:
|
|
149
150
|
return None
|
|
150
151
|
|
|
151
|
-
thinking = _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
|
|
152
|
-
if thinking:
|
|
153
|
-
return f"{model}:{thinking}"
|
|
154
152
|
return model
|
|
155
153
|
|
|
156
154
|
|
|
155
|
+
def _project_thinking_level(spec: ResolvedLaunchSpec) -> str | None:
|
|
156
|
+
return _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
|
|
157
|
+
|
|
158
|
+
|
|
157
159
|
def project_pi_native_tui_spec_to_cli_args(
|
|
158
160
|
spec: ResolvedLaunchSpec,
|
|
159
161
|
*,
|
|
@@ -162,19 +164,26 @@ def project_pi_native_tui_spec_to_cli_args(
|
|
|
162
164
|
"""Project one ``ResolvedLaunchSpec`` into an ordered native Pi TUI command list."""
|
|
163
165
|
|
|
164
166
|
command: list[str] = list(base_command)
|
|
167
|
+
passthrough_tail = spec.extra_args
|
|
165
168
|
|
|
166
169
|
model_arg = _project_model_arg(spec)
|
|
167
170
|
if model_arg is not None:
|
|
168
171
|
command.extend(("--model", model_arg))
|
|
169
172
|
|
|
173
|
+
thinking_level = _project_thinking_level(spec)
|
|
174
|
+
model_override_in_passthrough = any(
|
|
175
|
+
_has_flag(passthrough_tail, alias) for alias in _MANAGED_FLAG_ALIASES["--model"]
|
|
176
|
+
)
|
|
177
|
+
emit_thinking = thinking_level is not None and not model_override_in_passthrough
|
|
178
|
+
if emit_thinking and thinking_level is not None:
|
|
179
|
+
command.extend(("--thinking", thinking_level))
|
|
180
|
+
|
|
170
181
|
if spec.appended_system_prompt:
|
|
171
182
|
command.extend(("--append-system-prompt", spec.appended_system_prompt))
|
|
172
183
|
|
|
173
184
|
continue_session_id = (spec.continue_session_id or "").strip()
|
|
174
185
|
has_continue_session = bool(continue_session_id)
|
|
175
186
|
has_continue_fork = has_continue_session and spec.continue_fork
|
|
176
|
-
|
|
177
|
-
passthrough_tail = spec.extra_args
|
|
178
187
|
_reject_mode_collisions(passthrough_tail)
|
|
179
188
|
_reject_continue_collisions(passthrough_tail)
|
|
180
189
|
_reject_extension_collisions(passthrough_tail)
|
|
@@ -184,6 +193,11 @@ def project_pi_native_tui_spec_to_cli_args(
|
|
|
184
193
|
has_managed_value=model_arg is not None,
|
|
185
194
|
passthrough_tail=passthrough_tail,
|
|
186
195
|
)
|
|
196
|
+
_log_collision_if_needed(
|
|
197
|
+
managed_flag="--thinking",
|
|
198
|
+
has_managed_value=emit_thinking,
|
|
199
|
+
passthrough_tail=passthrough_tail,
|
|
200
|
+
)
|
|
187
201
|
_log_collision_if_needed(
|
|
188
202
|
managed_flag="--append-system-prompt",
|
|
189
203
|
has_managed_value=bool(spec.appended_system_prompt),
|
{meridian_cli-0.3.2 → meridian_cli-0.3.4}/src/meridian/lib/harness/projections/project_pi_rpc.py
RENAMED
|
@@ -53,6 +53,7 @@ _DELEGATED_FIELDS: frozenset[str] = frozenset(
|
|
|
53
53
|
|
|
54
54
|
_MANAGED_FLAG_ALIASES: dict[str, tuple[str, ...]] = {
|
|
55
55
|
"--model": ("--model", "-m"),
|
|
56
|
+
"--thinking": ("--thinking",),
|
|
56
57
|
"--append-system-prompt": ("--append-system-prompt",),
|
|
57
58
|
"--session": ("--session",),
|
|
58
59
|
"--fork": ("--fork",),
|
|
@@ -143,12 +144,13 @@ def _project_model_arg(spec: ResolvedLaunchSpec) -> str | None:
|
|
|
143
144
|
if not model:
|
|
144
145
|
return None
|
|
145
146
|
|
|
146
|
-
thinking = _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
|
|
147
|
-
if thinking:
|
|
148
|
-
return f"{model}:{thinking}"
|
|
149
147
|
return model
|
|
150
148
|
|
|
151
149
|
|
|
150
|
+
def _project_thinking_level(spec: ResolvedLaunchSpec) -> str | None:
|
|
151
|
+
return _EFFORT_TO_THINKING.get((spec.effort or "").strip().lower())
|
|
152
|
+
|
|
153
|
+
|
|
152
154
|
def _default_pi_session_dir() -> str:
|
|
153
155
|
return str(resolve_pi_spawn_session_root())
|
|
154
156
|
|
|
@@ -161,19 +163,26 @@ def project_pi_spec_to_cli_args(
|
|
|
161
163
|
"""Project one ``ResolvedLaunchSpec`` into an ordered Pi RPC command list."""
|
|
162
164
|
|
|
163
165
|
command: list[str] = list(base_command)
|
|
166
|
+
passthrough_tail = spec.extra_args
|
|
164
167
|
|
|
165
168
|
model_arg = _project_model_arg(spec)
|
|
166
169
|
if model_arg is not None:
|
|
167
170
|
command.extend(("--model", model_arg))
|
|
168
171
|
|
|
172
|
+
thinking_level = _project_thinking_level(spec)
|
|
173
|
+
model_override_in_passthrough = any(
|
|
174
|
+
_has_flag(passthrough_tail, alias) for alias in _MANAGED_FLAG_ALIASES["--model"]
|
|
175
|
+
)
|
|
176
|
+
emit_thinking = thinking_level is not None and not model_override_in_passthrough
|
|
177
|
+
if emit_thinking and thinking_level is not None:
|
|
178
|
+
command.extend(("--thinking", thinking_level))
|
|
179
|
+
|
|
169
180
|
if spec.appended_system_prompt:
|
|
170
181
|
command.extend(("--append-system-prompt", spec.appended_system_prompt))
|
|
171
182
|
|
|
172
183
|
continue_session_id = (spec.continue_session_id or "").strip()
|
|
173
184
|
has_continue_session = bool(continue_session_id)
|
|
174
185
|
has_continue_fork = has_continue_session and spec.continue_fork
|
|
175
|
-
|
|
176
|
-
passthrough_tail = spec.extra_args
|
|
177
186
|
_reject_mode_collisions(passthrough_tail)
|
|
178
187
|
_reject_extension_collisions(passthrough_tail)
|
|
179
188
|
_reject_session_dir_collisions(passthrough_tail)
|
|
@@ -183,6 +192,11 @@ def project_pi_spec_to_cli_args(
|
|
|
183
192
|
has_managed_value=model_arg is not None,
|
|
184
193
|
passthrough_tail=passthrough_tail,
|
|
185
194
|
)
|
|
195
|
+
_log_collision_if_needed(
|
|
196
|
+
managed_flag="--thinking",
|
|
197
|
+
has_managed_value=emit_thinking,
|
|
198
|
+
passthrough_tail=passthrough_tail,
|
|
199
|
+
)
|
|
186
200
|
_log_collision_if_needed(
|
|
187
201
|
managed_flag="--append-system-prompt",
|
|
188
202
|
has_managed_value=bool(spec.appended_system_prompt),
|
|
@@ -178,10 +178,10 @@ def merge_env_overrides(
|
|
|
178
178
|
"""
|
|
179
179
|
forbidden: list[tuple[str, str]] = []
|
|
180
180
|
for key in plan_overrides:
|
|
181
|
-
if key.startswith("MERIDIAN_"):
|
|
181
|
+
if key.upper().startswith("MERIDIAN_"):
|
|
182
182
|
forbidden.append((key, "plan_overrides"))
|
|
183
183
|
for key in preflight_overrides:
|
|
184
|
-
if key.startswith("MERIDIAN_"):
|
|
184
|
+
if key.upper().startswith("MERIDIAN_"):
|
|
185
185
|
forbidden.append((key, "preflight_overrides"))
|
|
186
186
|
|
|
187
187
|
if forbidden:
|
|
@@ -95,6 +95,7 @@ def build_launch_policy_snapshot(
|
|
|
95
95
|
tools=request.tools,
|
|
96
96
|
mcp_tools=request.mcp_tools,
|
|
97
97
|
extra_args=request.extra_args,
|
|
98
|
+
env=request.env,
|
|
98
99
|
model_selection_requested_token=request.model_selection_requested_token,
|
|
99
100
|
model_selection_selected_token=(
|
|
100
101
|
model_selection.selected_model_token
|
|
@@ -990,6 +990,11 @@ def run_harness_process(
|
|
|
990
990
|
}
|
|
991
991
|
)
|
|
992
992
|
plan_overrides: dict[str, str] = {}
|
|
993
|
+
config_env = runtime.config_snapshot.get("env")
|
|
994
|
+
if isinstance(config_env, dict):
|
|
995
|
+
for k, v in cast("dict[str, str]", config_env).items():
|
|
996
|
+
if k.strip():
|
|
997
|
+
plan_overrides[k] = v
|
|
993
998
|
if runtime_request.execution_policy.autocompact is not None:
|
|
994
999
|
plan_overrides["CLAUDE_AUTOCOMPACT_PCT_OVERRIDE"] = str(
|
|
995
1000
|
runtime_request.execution_policy.autocompact
|
|
@@ -90,6 +90,7 @@ class SpawnRequest(BaseModel):
|
|
|
90
90
|
extra_args: tuple[str, ...] = ()
|
|
91
91
|
mcp_tools: tuple[str, ...] = ()
|
|
92
92
|
tools: ToolsField | None = None
|
|
93
|
+
env: dict[str, str] = Field(default_factory=dict)
|
|
93
94
|
|
|
94
95
|
# Execution policy carrier (replaces flat effort/sandbox/approval/autocompact/autocompact_pct)
|
|
95
96
|
execution_policy: ResolvedExecutionPolicy = Field(default_factory=ResolvedExecutionPolicy)
|
|
@@ -500,6 +500,29 @@ def _dynamic_value_source(
|
|
|
500
500
|
return "builtin"
|
|
501
501
|
|
|
502
502
|
|
|
503
|
+
def _resolve_env_config_source(
|
|
504
|
+
*,
|
|
505
|
+
env_key: str,
|
|
506
|
+
project_dynamic_overrides: dict[str, object],
|
|
507
|
+
user_dynamic_overrides: dict[str, object],
|
|
508
|
+
) -> Literal["file", "user-config", "builtin"]:
|
|
509
|
+
project_env = project_dynamic_overrides.get("env")
|
|
510
|
+
if isinstance(project_env, dict) and env_key in project_env:
|
|
511
|
+
return "file"
|
|
512
|
+
user_env = user_dynamic_overrides.get("env")
|
|
513
|
+
if isinstance(user_env, dict) and env_key in user_env:
|
|
514
|
+
return "user-config"
|
|
515
|
+
return "builtin"
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
_SECRET_ENV_KEY_SUFFIXES = ("_TOKEN", "_KEY", "_SECRET")
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
def _looks_like_secret_env_key(key: str) -> bool:
|
|
522
|
+
normalized = key.upper()
|
|
523
|
+
return any(normalized.endswith(suffix) for suffix in _SECRET_ENV_KEY_SUFFIXES)
|
|
524
|
+
|
|
525
|
+
|
|
503
526
|
def _dynamic_config_values(inspection: _ConfigInspectionState) -> list[ConfigResolvedValue]:
|
|
504
527
|
values: list[ConfigResolvedValue] = []
|
|
505
528
|
resolved = inspection.resolved_dynamic_overrides
|
|
@@ -569,6 +592,24 @@ def _dynamic_config_values(inspection: _ConfigInspectionState) -> list[ConfigRes
|
|
|
569
592
|
)
|
|
570
593
|
)
|
|
571
594
|
|
|
595
|
+
env_config = inspection.surface.resolved_config.env
|
|
596
|
+
if env_config:
|
|
597
|
+
for env_key, env_value in sorted(env_config.items()):
|
|
598
|
+
display_value: object = env_value
|
|
599
|
+
if _looks_like_secret_env_key(env_key):
|
|
600
|
+
display_value = "[redacted]"
|
|
601
|
+
values.append(
|
|
602
|
+
ConfigResolvedValue(
|
|
603
|
+
key=f"env.{env_key}",
|
|
604
|
+
value=display_value,
|
|
605
|
+
source=_resolve_env_config_source(
|
|
606
|
+
env_key=env_key,
|
|
607
|
+
project_dynamic_overrides=inspection.project_dynamic_overrides,
|
|
608
|
+
user_dynamic_overrides=inspection.user_dynamic_overrides,
|
|
609
|
+
),
|
|
610
|
+
)
|
|
611
|
+
)
|
|
612
|
+
|
|
572
613
|
return values
|
|
573
614
|
|
|
574
615
|
|
|
@@ -1868,6 +1868,8 @@ def _reject_continue_policy_overrides(payload: SpawnContinueInput) -> None:
|
|
|
1868
1868
|
rejected.append("--autocompact-pct")
|
|
1869
1869
|
if payload.passthrough_args:
|
|
1870
1870
|
rejected.append("--")
|
|
1871
|
+
if payload.env:
|
|
1872
|
+
rejected.append("--env")
|
|
1871
1873
|
if payload.work.strip():
|
|
1872
1874
|
rejected.append("--work")
|
|
1873
1875
|
if payload.task_dir is not None and payload.task_dir.strip():
|
|
@@ -236,6 +236,10 @@ async def _prepare_execution_handoff(
|
|
|
236
236
|
autocompact=request.execution_policy.autocompact,
|
|
237
237
|
ctx=resolved_context,
|
|
238
238
|
)
|
|
239
|
+
if runtime.config.env or request.env:
|
|
240
|
+
resolved_env = dict(runtime.config.env)
|
|
241
|
+
resolved_env.update(request.env)
|
|
242
|
+
run_env_overrides = {**resolved_env, **run_env_overrides}
|
|
239
243
|
runtime_work_id = session_context.work_id or work_id
|
|
240
244
|
final_request = resolved_request.model_copy(update={"work_id_hint": runtime_work_id})
|
|
241
245
|
launch_runtime = runtime_request.model_copy(
|
|
@@ -73,6 +73,7 @@ class SpawnLaunchOptionUpdates(TypedDict):
|
|
|
73
73
|
debug: bool
|
|
74
74
|
task_ping_interval: str | None
|
|
75
75
|
task_ping_reset_on_activity: bool | None
|
|
76
|
+
env: tuple[str, ...]
|
|
76
77
|
|
|
77
78
|
|
|
78
79
|
class SpawnLaunchOptions(BaseModel):
|
|
@@ -95,6 +96,7 @@ class SpawnLaunchOptions(BaseModel):
|
|
|
95
96
|
debug: bool = False
|
|
96
97
|
task_ping_interval: str | None = None
|
|
97
98
|
task_ping_reset_on_activity: bool | None = None
|
|
99
|
+
env: tuple[str, ...] = ()
|
|
98
100
|
|
|
99
101
|
def launch_option_updates(self) -> SpawnLaunchOptionUpdates:
|
|
100
102
|
return {
|
|
@@ -115,6 +117,7 @@ class SpawnLaunchOptions(BaseModel):
|
|
|
115
117
|
"debug": self.debug,
|
|
116
118
|
"task_ping_interval": self.task_ping_interval,
|
|
117
119
|
"task_ping_reset_on_activity": self.task_ping_reset_on_activity,
|
|
120
|
+
"env": self.env,
|
|
118
121
|
}
|
|
119
122
|
|
|
120
123
|
|
|
@@ -41,6 +41,32 @@ from .models import SpawnCreateInput
|
|
|
41
41
|
_DRY_RUN_REPORT_PATH = "<spawn-report-path>"
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
def _parse_env_assignments(raw: tuple[str, ...]) -> dict[str, str]:
|
|
45
|
+
parsed: dict[str, str] = {}
|
|
46
|
+
for item in raw:
|
|
47
|
+
if "=" not in item:
|
|
48
|
+
raise ValueError(
|
|
49
|
+
f"Invalid --env value {item!r}: expected KEY=VALUE format."
|
|
50
|
+
)
|
|
51
|
+
key, _, value = item.partition("=")
|
|
52
|
+
key = key.strip()
|
|
53
|
+
if not key:
|
|
54
|
+
raise ValueError(
|
|
55
|
+
f"Invalid --env value {item!r}: KEY is empty."
|
|
56
|
+
)
|
|
57
|
+
parsed[key] = value
|
|
58
|
+
return parsed
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _resolve_spawn_env(payload: SpawnCreateInput) -> dict[str, str]:
|
|
62
|
+
cli_env = _parse_env_assignments(payload.env)
|
|
63
|
+
if cli_env:
|
|
64
|
+
return cli_env
|
|
65
|
+
if payload.launch_policy_snapshot is not None:
|
|
66
|
+
return dict(payload.launch_policy_snapshot.env)
|
|
67
|
+
return {}
|
|
68
|
+
|
|
69
|
+
|
|
44
70
|
@dataclass(frozen=True)
|
|
45
71
|
class SpawnCreateArtifacts:
|
|
46
72
|
"""Resolved spawn request plus expensive prepared surface for bind-only execute."""
|
|
@@ -171,6 +197,7 @@ def build_create_payload(
|
|
|
171
197
|
launch_policy_snapshot=payload.launch_policy_snapshot,
|
|
172
198
|
pi_task_ping_interval_seconds=parse_duration_seconds(payload.task_ping_interval),
|
|
173
199
|
pi_task_ping_reset_on_activity=payload.task_ping_reset_on_activity,
|
|
200
|
+
env=_resolve_spawn_env(payload),
|
|
174
201
|
)
|
|
175
202
|
|
|
176
203
|
mars_runtime_source = runtime or build_runtime_from_root_and_config(
|
|
@@ -200,12 +227,15 @@ def build_create_payload(
|
|
|
200
227
|
),
|
|
201
228
|
)
|
|
202
229
|
if composition_dry_run:
|
|
230
|
+
plan_overrides = dict(config.env)
|
|
231
|
+
plan_overrides.update(raw_request.env)
|
|
203
232
|
preview_context = bind_spawn_launch_context(
|
|
204
233
|
prepared=prepared_surface,
|
|
205
234
|
bindings=RuntimeBindings(
|
|
206
235
|
spawn_id="dry-run",
|
|
207
236
|
report_output_path=Path(_DRY_RUN_REPORT_PATH),
|
|
208
237
|
dry_run=True,
|
|
238
|
+
plan_overrides=plan_overrides,
|
|
209
239
|
),
|
|
210
240
|
runtime=preview_runtime,
|
|
211
241
|
harness_registry=harness_registry,
|