meridian-cli 0.2.2__tar.gz → 0.2.3__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.2.2 → meridian_cli-0.2.3}/PKG-INFO +3 -3
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/README.md +1 -1
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/pyproject.toml +1 -2
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/__init__.py +1 -1
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/spawn.py +17 -1
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/catalog.py +5 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/work_cmd.py +48 -1
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/.context/CONTEXT.md +46 -3
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/commands.py +17 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/runtime.py +3 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/api.py +80 -1
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/models.py +3 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/prepare.py +15 -10
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/work_lifecycle.py +54 -72
- meridian_cli-0.2.3/src/meridian/lib/ops/work_worktree.py +231 -0
- meridian_cli-0.2.3/src/meridian/lib/ops/worktree_ensure.py +768 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/worktree_lifecycle.py +55 -27
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/worktree_ops.py +13 -2
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/.context/CONTEXT.md +22 -0
- meridian_cli-0.2.3/src/meridian/lib/state/temp_worktree_store.py +107 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/work_store.py +84 -5
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/.gitignore +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/LICENSE +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/ag_ui/__init__.pyi +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/ag_ui/core.pyi +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/__main__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/_cmd_utils.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/agent_help.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/app_tree.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/argv_normalization.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/bootstrap.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/bootstrap_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/chat_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/config_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/doctor_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/entrypoint.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/ext_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/ext_registration.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/hooks_authority.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/hooks_commands.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/kg_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/main.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/mars_passthrough.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/mermaid_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/migrate_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/misc_commands.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/models_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/output.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/primary_launch.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/qi_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/report_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/session_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/spawn_inject.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/classify.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/cyclopts_app.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/help.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/lazy_dispatch.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/startup/policy.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/streaming_serve.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/sync_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/telemetry_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/utils.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/cli/workspace_cmd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/dev/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/dev/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/dev/pytests.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/config.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/project_state.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/runtime_state.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/bootstrap/services.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/agent.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/bootstrap.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/catalog_session.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/model_aliases.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/models.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/catalog/skill.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/backend_acquisition.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/backend_handle.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/checkpoint.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/command_handler.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/command_invariants.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/commands.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/discovery.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/launcher.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/policy.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/portless.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/raw_vite.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/dev_frontend/supervisor.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_index.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_log.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_observer.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/event_pipeline.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/frontend.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/base.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/claude.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/codex.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/common.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/opencode.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/registry.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/normalization/synthetic.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/policy.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/protocol.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/recovery.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/replay.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/runtime.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/server.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/session_service.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/chat/ws_fanout.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/catalog.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/context_config.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/preserving_edit.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/project_config_state.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/project_paths.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/project_root.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/schema.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/settings.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/config/workspace.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/context/resolver.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/child_env.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/clock.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/codec.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/context.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/conversation.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/depth.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/domain.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/execution_policy.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/formatting.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/lifecycle.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/logging.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/overrides.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/process_cleanup.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/resolved_context.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/sink.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/spawn_lifecycle.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/spawn_service.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/spawn_start.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/telemetry.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/core/util.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/diagnostics.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/biomed.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/mermaid.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/sessions.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/commands/workbench.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/context.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/descriptors.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/dispatcher.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/first_party.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/observability.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/registry.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/extensions/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/adapter.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/bundle.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/claude.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/claude_preflight.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/claude_utils.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/codex.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/codex_rollout.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/common.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/base.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/claude_ws.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/codex_ws.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/cursor_subprocess.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/errors.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/opencode_http.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/pi_lifecycle_file.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/connections/pi_rpc.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/control_action.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/cost.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/cursor.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/errors.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractor.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/base.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/claude.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/codex.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/cursor.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/opencode.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/extractors/pi.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/launch_spec.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/launch_types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/opencode.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/opencode_storage.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/opencode_transcript.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/base.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/claude.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/codex.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/opencode.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/passthrough/registry.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/permission_broker.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/pi.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/pi_lifecycle_events.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/pi_runtime_resolver.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/_guards.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/permission_flags.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/pi_extension_projection.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_claude.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_codex_common.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_codex_streaming.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_codex_subprocess.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_cursor.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_opencode_streaming.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_opencode_subprocess.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_pi_native_tui.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/project_pi_rpc.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/projections/projection_errors.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/registry.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/semantics.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/session_detection.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/harness/transcript.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/autosync_store.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/base.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin/git_autosync.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/builtin_registry.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/config.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/dispatch.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/interval.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/registry.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/runner.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/hooks/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ignores.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/graph.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/report.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/serializer.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/kg/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/artifact_io.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/bundle_adapter.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/claude_session_access.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/command.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/compiler.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/composition.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/constants.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/context.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/cwd.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/env.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/errors.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/extract.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/fork.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/launch_types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/materialize.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/permissions.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/plan.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/policies.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/ports.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/primary_attach.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/pty_launcher.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/runner.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/session.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/subprocess_launcher.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/process/windows_launcher.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/prompt.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/reference.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/report.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/request.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/resolve.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/run_inputs.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/runner_helpers.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/session_scope.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/signals.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/heartbeat.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming/terminal_arbitrator.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/streaming_runner.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/text_utils.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/workspace.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/workspace_projection.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/launch/written_files.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/extract.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/markdown/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/report.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/scanner.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/serializer.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/bare_end.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/fill_no_color.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/line_map.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/ox_edge.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/preprocess.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/suppression.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/style/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/mermaid/validator.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/debug_tracer.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/observability/trace_helpers.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/catalog.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/config.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/config_surface.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/context.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/diag.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/hooks.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/init_ops.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/mars.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/migration.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/pruning.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/qi.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/reference.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/reference_recovery.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/report.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_export.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_log.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_read.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_render.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_repair.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_search.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/session_target.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/context_ref.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_bg.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_init.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_runner.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/execute_session.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/failure_policy.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/spawn/query.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/sync_conflicts.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/work_attachment.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/work_dashboard.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/workspace.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/ops/worktree_format.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/locking.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/base.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/fallback.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/posix.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/process_scope/windows_job.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/terminate.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/unix_modules.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/platform/windows_job.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/budget.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/guardrails.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/permissions.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/safety/redaction.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/service_context.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/spawn/archive.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/artifact_store.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/atomic.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/event_store.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/history.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/launch_boundary.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/liveness.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/managed_primary.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/paths.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/primary_meta.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/process_scope_projection.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/reaper.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/session_store.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/model.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/repository.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/terminal_policy.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn/transitions.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/spawn_store.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/user_paths.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/wordgen.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/state/wordlists.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/control_socket.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/drain_policy.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/event_observers.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/heartbeat.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/inject_lock.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/signal_canceller.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/spawn_manager.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/streaming/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/bootstrap.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/correlation.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/events.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/init.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/local_jsonl.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/maintenance.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/observer.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/observers.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/query.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/reader.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/retention.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/router.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/sinks.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/telemetry/status.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/tools.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/utils/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/lib/utils/time.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/README.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/managed-bash/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/managed-bash/src/index.ts +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/meridian-lifecycle/.context/CONTEXT.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/meridian-lifecycle/src/index.ts +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/shared/lifecycle_sidecar.ts +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/extensions/types.ts +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/package.json +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/pnpm-lock.yaml +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/pi_runtime/pnpm-workspace.yaml +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/config.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/fs.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/git.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/state.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/plugin_api/types.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/py.typed +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/server/AGENTS.md +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/server/__init__.py +0 -0
- {meridian_cli-0.2.2 → meridian_cli-0.2.3}/src/meridian/server/main.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meridian-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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
|
|
@@ -24,7 +24,7 @@ Requires-Dist: coolname>=4.0.0
|
|
|
24
24
|
Requires-Dist: cyclopts>=3.0
|
|
25
25
|
Requires-Dist: fastapi>=0.115
|
|
26
26
|
Requires-Dist: markdown-it-py>=4.0
|
|
27
|
-
Requires-Dist: mars-agents==0.7.
|
|
27
|
+
Requires-Dist: mars-agents==0.7.1
|
|
28
28
|
Requires-Dist: mcp>=1.0
|
|
29
29
|
Requires-Dist: pathspec>=1.1.0
|
|
30
30
|
Requires-Dist: psutil>=7.2.2
|
|
@@ -192,7 +192,7 @@ graph TB
|
|
|
192
192
|
uv sync --extra dev
|
|
193
193
|
uv run ruff check .
|
|
194
194
|
uv run pytest-llm
|
|
195
|
-
uv run pyright
|
|
195
|
+
uv run --extra dev python -m pyright
|
|
196
196
|
```
|
|
197
197
|
|
|
198
198
|
See [DEVELOPMENT.md](DEVELOPMENT.md) for full dev setup.
|
|
@@ -24,7 +24,7 @@ dependencies = [
|
|
|
24
24
|
"cyclopts>=3.0",
|
|
25
25
|
"fastapi>=0.115",
|
|
26
26
|
"markdown-it-py>=4.0",
|
|
27
|
-
"mars-agents==0.7.
|
|
27
|
+
"mars-agents==0.7.1",
|
|
28
28
|
"mcp>=1.0",
|
|
29
29
|
"pathspec>=1.1.0",
|
|
30
30
|
"psutil>=7.2.2",
|
|
@@ -44,7 +44,6 @@ Issues = "https://github.com/haowjy/meridian-cli/issues"
|
|
|
44
44
|
|
|
45
45
|
[project.scripts]
|
|
46
46
|
meridian = "meridian.cli.entrypoint:main"
|
|
47
|
-
pyright = "pyright.cli:entrypoint"
|
|
48
47
|
pytests = "meridian.dev.pytests:main"
|
|
49
48
|
pytest-llm = "meridian.dev.pytests:main"
|
|
50
49
|
|
|
@@ -275,7 +275,10 @@ def _spawn_create(
|
|
|
275
275
|
bool | None,
|
|
276
276
|
Parameter(
|
|
277
277
|
name="--worktree",
|
|
278
|
-
help=
|
|
278
|
+
help=(
|
|
279
|
+
"Ensure and use the selected work item's Meridian-managed canonical "
|
|
280
|
+
"worktree as task cwd."
|
|
281
|
+
),
|
|
279
282
|
),
|
|
280
283
|
] = None,
|
|
281
284
|
no_worktree: Annotated[
|
|
@@ -285,6 +288,16 @@ def _spawn_create(
|
|
|
285
288
|
help="Force authority root as task cwd, ignoring any configured worktree path.",
|
|
286
289
|
),
|
|
287
290
|
] = False,
|
|
291
|
+
repo: Annotated[
|
|
292
|
+
str | None,
|
|
293
|
+
Parameter(
|
|
294
|
+
name="--repo",
|
|
295
|
+
help=(
|
|
296
|
+
"Target implementation repository path or workspace alias for first "
|
|
297
|
+
"managed worktree ensure."
|
|
298
|
+
),
|
|
299
|
+
),
|
|
300
|
+
] = None,
|
|
288
301
|
dry_run: Annotated[
|
|
289
302
|
bool,
|
|
290
303
|
Parameter(name="--dry-run", help="Preview without executing harness."),
|
|
@@ -478,6 +491,7 @@ def _spawn_create(
|
|
|
478
491
|
desc=desc,
|
|
479
492
|
work=work,
|
|
480
493
|
worktree=worktree_intent,
|
|
494
|
+
repo=repo,
|
|
481
495
|
**shared_launch_kwargs,
|
|
482
496
|
),
|
|
483
497
|
sink=_current_output_sink(),
|
|
@@ -497,6 +511,7 @@ def _spawn_create(
|
|
|
497
511
|
desc=desc,
|
|
498
512
|
work=work,
|
|
499
513
|
worktree=worktree_intent,
|
|
514
|
+
repo=repo,
|
|
500
515
|
**shared_launch_kwargs,
|
|
501
516
|
),
|
|
502
517
|
sink=_current_output_sink(),
|
|
@@ -516,6 +531,7 @@ def _spawn_create(
|
|
|
516
531
|
goal=resolved_goal,
|
|
517
532
|
work=work,
|
|
518
533
|
worktree=worktree_intent,
|
|
534
|
+
repo=repo,
|
|
519
535
|
**shared_launch_kwargs,
|
|
520
536
|
),
|
|
521
537
|
sink=_current_output_sink(),
|
|
@@ -383,6 +383,11 @@ _COMMAND_DESCRIPTORS: tuple[CommandDescriptor, ...] = (
|
|
|
383
383
|
_write_runtime(("work", "delete"), "Delete work item.", extension_ref="meridian.work.delete"),
|
|
384
384
|
_write_runtime(("work", "rename"), "Rename work item.", extension_ref="meridian.work.rename"),
|
|
385
385
|
_write_runtime(("work", "clear"), "Clear current work.", extension_ref="meridian.work.clear"),
|
|
386
|
+
_write_runtime(
|
|
387
|
+
("work", "worktree"),
|
|
388
|
+
"Show or ensure canonical managed worktree state.",
|
|
389
|
+
extension_ref="meridian.work.worktree",
|
|
390
|
+
),
|
|
386
391
|
_write_runtime(
|
|
387
392
|
("work", "set-worktree"),
|
|
388
393
|
"Assign an existing worktree path to a work item.",
|
|
@@ -37,6 +37,7 @@ from meridian.lib.ops.work_lifecycle import (
|
|
|
37
37
|
WorkStartInput,
|
|
38
38
|
WorkSwitchInput,
|
|
39
39
|
WorkUpdateInput,
|
|
40
|
+
WorkWorktreeInput,
|
|
40
41
|
work_clear_sync,
|
|
41
42
|
work_clear_worktree_sync,
|
|
42
43
|
work_delete_sync,
|
|
@@ -47,6 +48,7 @@ from meridian.lib.ops.work_lifecycle import (
|
|
|
47
48
|
work_start_sync,
|
|
48
49
|
work_switch_sync,
|
|
49
50
|
work_update_sync,
|
|
51
|
+
work_worktree_sync,
|
|
50
52
|
)
|
|
51
53
|
|
|
52
54
|
Emitter = Callable[[Any], None]
|
|
@@ -76,12 +78,22 @@ def _work_start(
|
|
|
76
78
|
] = None,
|
|
77
79
|
worktree: Annotated[
|
|
78
80
|
bool | None,
|
|
79
|
-
Parameter(
|
|
81
|
+
Parameter(
|
|
82
|
+
name="--worktree",
|
|
83
|
+
help="Ensure Meridian-managed canonical isolation for this work item.",
|
|
84
|
+
),
|
|
80
85
|
] = None,
|
|
81
86
|
no_worktree: Annotated[
|
|
82
87
|
bool,
|
|
83
88
|
Parameter(name="--no-worktree", help="Skip worktree creation even if default is set."),
|
|
84
89
|
] = False,
|
|
90
|
+
repo: Annotated[
|
|
91
|
+
str | None,
|
|
92
|
+
Parameter(
|
|
93
|
+
name="--repo",
|
|
94
|
+
help="Target implementation repository path or [workspace.<name>] alias.",
|
|
95
|
+
),
|
|
96
|
+
] = None,
|
|
85
97
|
) -> None:
|
|
86
98
|
# Resolve explicit worktree intent from the two flags.
|
|
87
99
|
# --no-worktree wins over --worktree if both are passed (degenerate case).
|
|
@@ -100,6 +112,7 @@ def _work_start(
|
|
|
100
112
|
goal=goal,
|
|
101
113
|
chat_id=_runtime_chat_id(),
|
|
102
114
|
worktree=worktree_intent,
|
|
115
|
+
repo=repo,
|
|
103
116
|
)
|
|
104
117
|
)
|
|
105
118
|
)
|
|
@@ -277,6 +290,39 @@ def _work_clear(emit: Emitter) -> None:
|
|
|
277
290
|
emit(work_clear_sync(WorkClearInput(chat_id=_runtime_chat_id())))
|
|
278
291
|
|
|
279
292
|
|
|
293
|
+
def _work_worktree(
|
|
294
|
+
emit: Emitter,
|
|
295
|
+
work_id: Annotated[
|
|
296
|
+
str,
|
|
297
|
+
Parameter(help="Optional work item id. Defaults to active work for this session."),
|
|
298
|
+
] = "",
|
|
299
|
+
ensure: Annotated[
|
|
300
|
+
bool,
|
|
301
|
+
Parameter(
|
|
302
|
+
name="--ensure",
|
|
303
|
+
help="Create/recover Meridian's canonical managed worktree if needed.",
|
|
304
|
+
),
|
|
305
|
+
] = False,
|
|
306
|
+
repo: Annotated[
|
|
307
|
+
str | None,
|
|
308
|
+
Parameter(
|
|
309
|
+
name="--repo",
|
|
310
|
+
help="Target implementation repository path or [workspace.<name>] alias.",
|
|
311
|
+
),
|
|
312
|
+
] = None,
|
|
313
|
+
) -> None:
|
|
314
|
+
emit(
|
|
315
|
+
work_worktree_sync(
|
|
316
|
+
WorkWorktreeInput(
|
|
317
|
+
work_id=work_id,
|
|
318
|
+
ensure=ensure,
|
|
319
|
+
repo=repo,
|
|
320
|
+
chat_id=_runtime_chat_id(),
|
|
321
|
+
)
|
|
322
|
+
)
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
|
|
280
326
|
def _work_set_worktree(
|
|
281
327
|
emit: Emitter,
|
|
282
328
|
work_id: Annotated[
|
|
@@ -326,6 +372,7 @@ def register_work_commands(app: App, emit: Emitter) -> tuple[set[str], dict[str,
|
|
|
326
372
|
"meridian.work.reopen": lambda: partial(_work_reopen, emit),
|
|
327
373
|
"meridian.work.rename": lambda: partial(_work_rename, emit),
|
|
328
374
|
"meridian.work.clear": lambda: partial(_work_clear, emit),
|
|
375
|
+
"meridian.work.worktree": lambda: partial(_work_worktree, emit),
|
|
329
376
|
"meridian.work.set-worktree": lambda: partial(_work_set_worktree, emit),
|
|
330
377
|
"meridian.work.clear-worktree": lambda: partial(_work_clear_worktree, emit),
|
|
331
378
|
}
|
|
@@ -77,9 +77,13 @@ use `SPEC_ONLY`. Do not set `REQUIRED` on execution paths.
|
|
|
77
77
|
|
|
78
78
|
### Worktree Lifecycle Protection
|
|
79
79
|
|
|
80
|
-
`ops/worktree_lifecycle.py`
|
|
81
|
-
and crash recovery. It is intentionally limited to git/worktree
|
|
82
|
-
structured results for callers
|
|
80
|
+
`ops/worktree_lifecycle.py` is the raw git worktree layer — it owns creation,
|
|
81
|
+
restoration, cleanup, and crash recovery. It is intentionally limited to git/worktree
|
|
82
|
+
concerns and returns structured results for callers to persist elsewhere.
|
|
83
|
+
|
|
84
|
+
`ops/worktree_ensure.py` sits above it and provides high-level ensure semantics used
|
|
85
|
+
by `work_worktree.py` and spawn logic. The split is: lifecycle owns raw git operations,
|
|
86
|
+
ensure owns state management and idempotency.
|
|
83
87
|
|
|
84
88
|
**Destructive operations guard against three conditions:**
|
|
85
89
|
|
|
@@ -124,6 +128,45 @@ type (e.g., `{"agents": [...], "skills": [...]}`). This avoids coupling Python
|
|
|
124
128
|
to the mars JSON report shape — new content types (hooks, MCP servers, etc.) are
|
|
125
129
|
automatically counted without Python model changes.
|
|
126
130
|
|
|
131
|
+
### ops/worktree_ensure.py — Managed Worktree Orchestration
|
|
132
|
+
|
|
133
|
+
`worktree_ensure.py` sits above `worktree_lifecycle.py` and provides high-level
|
|
134
|
+
ensure semantics with state management, dry-run support, and session-scoped temporary
|
|
135
|
+
worktrees. Used by `work_worktree.py` and `spawn/api.py`.
|
|
136
|
+
|
|
137
|
+
**Key contracts:**
|
|
138
|
+
|
|
139
|
+
`ensure_work_item_worktree()` is idempotent — calling twice returns `already_available`
|
|
140
|
+
on the second call. Once managed metadata (repo_path + name) is persisted, subsequent
|
|
141
|
+
calls reuse it regardless of `--repo` or cwd. Accepts dry-run mode and `allow_missing_dry_run`
|
|
142
|
+
for work items that don't exist yet. Returns `WorktreeEnsureResult` with status, metadata,
|
|
143
|
+
repo_root, canonical_path, and optional warning.
|
|
144
|
+
|
|
145
|
+
`ensure_temporary_worktree()` provides session-scoped isolation keyed by spawn_id/chat_id
|
|
146
|
+
(via `_temporary_key(ctx)` → `worktree-temp/` store). Uses same pending/rollback discipline:
|
|
147
|
+
set pending before git, clear on failure, upgrade to ready on success.
|
|
148
|
+
|
|
149
|
+
`get_temporary_worktree_status()` is read-only; heals pending-but-dir-exists records.
|
|
150
|
+
|
|
151
|
+
Repo resolution (`_resolve_target_repo()`, `_resolve_repo_root()`) supports path selectors,
|
|
152
|
+
workspace aliases, and cwd-based inference. Dry-run mode uses `.git` marker scanning
|
|
153
|
+
without running git commands.
|
|
154
|
+
|
|
155
|
+
Managed path policy: `_canonical_target()` derives `<repo>.worktrees/<name>`. Non-canonical
|
|
156
|
+
paths are detected as drift and fail clearly.
|
|
157
|
+
|
|
158
|
+
### ops/work_worktree.py — Work Worktree Command Orchestration
|
|
159
|
+
|
|
160
|
+
`work_worktree.py` orchestrates `meridian work worktree` command logic. Accepts
|
|
161
|
+
`WorkWorktreeInput` (work_id, ensure, repo, chat_id, project_root), returns
|
|
162
|
+
`WorkWorktreeOutput` with worktree path, branch, name, repo_root, managed status,
|
|
163
|
+
exists flag, temporary flag, ensured flag, message, and warning.
|
|
164
|
+
|
|
165
|
+
Routes based on whether a work item is active: calls `ensure_work_item_worktree()`
|
|
166
|
+
if present, else delegates to `ensure_temporary_worktree()`. When `ensure=False`,
|
|
167
|
+
returns status-only response (no-op) if path already exists. When work_id is empty
|
|
168
|
+
and no active work item, uses temporary worktree path.
|
|
169
|
+
|
|
127
170
|
## Contracts
|
|
128
171
|
|
|
129
172
|
### OperationRuntime
|
|
@@ -166,6 +166,8 @@ from meridian.lib.ops.work_lifecycle import (
|
|
|
166
166
|
WorkSwitchOutput,
|
|
167
167
|
WorkUpdateInput,
|
|
168
168
|
WorkUpdateOutput,
|
|
169
|
+
WorkWorktreeInput,
|
|
170
|
+
WorkWorktreeOutput,
|
|
169
171
|
work_clear,
|
|
170
172
|
work_clear_sync,
|
|
171
173
|
work_clear_worktree,
|
|
@@ -186,6 +188,8 @@ from meridian.lib.ops.work_lifecycle import (
|
|
|
186
188
|
work_switch_sync,
|
|
187
189
|
work_update,
|
|
188
190
|
work_update_sync,
|
|
191
|
+
work_worktree,
|
|
192
|
+
work_worktree_sync,
|
|
189
193
|
)
|
|
190
194
|
from meridian.lib.ops.workspace import (
|
|
191
195
|
WorkspaceInitInput,
|
|
@@ -569,6 +573,19 @@ _OP_SPECS: tuple[ExtensionCommandSpec, ...] = (
|
|
|
569
573
|
agent_default_format="text",
|
|
570
574
|
surfaces=frozenset({ExtensionSurface.CLI, ExtensionSurface.HTTP}),
|
|
571
575
|
),
|
|
576
|
+
ExtensionCommandSpec.from_op(
|
|
577
|
+
extension_id="meridian.work",
|
|
578
|
+
command_id="worktree",
|
|
579
|
+
summary="Show or ensure worktree state for an active or explicit work item.",
|
|
580
|
+
handler=work_worktree,
|
|
581
|
+
sync_handler=work_worktree_sync,
|
|
582
|
+
input_type=WorkWorktreeInput,
|
|
583
|
+
output_type=WorkWorktreeOutput,
|
|
584
|
+
cli_group="work",
|
|
585
|
+
cli_name="worktree",
|
|
586
|
+
agent_default_format="text",
|
|
587
|
+
surfaces=frozenset({ExtensionSurface.CLI, ExtensionSurface.HTTP}),
|
|
588
|
+
),
|
|
572
589
|
ExtensionCommandSpec.from_op(
|
|
573
590
|
extension_id="meridian.work",
|
|
574
591
|
command_id="set-worktree",
|
|
@@ -126,6 +126,7 @@ class ResolvedRoots:
|
|
|
126
126
|
project_root: Path
|
|
127
127
|
project_state_dir: Path
|
|
128
128
|
runtime_root: Path
|
|
129
|
+
execution_cwd: Path
|
|
129
130
|
|
|
130
131
|
|
|
131
132
|
def runtime_context(ctx: RuntimeContext | None) -> RuntimeContext:
|
|
@@ -361,6 +362,7 @@ def resolve_roots(project_root: str | None) -> ResolvedRoots:
|
|
|
361
362
|
project_root=authority.project_root,
|
|
362
363
|
project_state_dir=authority.project_state_dir,
|
|
363
364
|
runtime_root=authority.runtime_root,
|
|
365
|
+
execution_cwd=authority.execution_cwd,
|
|
364
366
|
)
|
|
365
367
|
|
|
366
368
|
|
|
@@ -370,6 +372,7 @@ def resolve_roots_for_read(project_root: str | None) -> ResolvedRoots:
|
|
|
370
372
|
project_root=authority.project_root,
|
|
371
373
|
project_state_dir=authority.project_state_dir,
|
|
372
374
|
runtime_root=authority.runtime_root or authority.project_state_dir,
|
|
375
|
+
execution_cwd=authority.execution_cwd,
|
|
373
376
|
)
|
|
374
377
|
|
|
375
378
|
|
|
@@ -19,6 +19,7 @@ from meridian.lib.core.spawn_lifecycle import ACTIVE_SPAWN_STATUSES, is_active_s
|
|
|
19
19
|
from meridian.lib.core.spawn_service import CancelOutcome
|
|
20
20
|
from meridian.lib.core.telemetry import register_debug_trace_observer
|
|
21
21
|
from meridian.lib.core.types import SpawnId
|
|
22
|
+
from meridian.lib.launch.cwd import TaskCwdResolution
|
|
22
23
|
from meridian.lib.launch.request import SessionRequest
|
|
23
24
|
from meridian.lib.ops.reference import ResolvedSessionReference, resolve_session_reference
|
|
24
25
|
from meridian.lib.ops.runtime import (
|
|
@@ -33,6 +34,8 @@ from meridian.lib.ops.runtime import (
|
|
|
33
34
|
resolve_runtime_root_for_read,
|
|
34
35
|
runtime_context,
|
|
35
36
|
)
|
|
37
|
+
from meridian.lib.ops.work_attachment import ensure_explicit_work_item
|
|
38
|
+
from meridian.lib.ops.worktree_ensure import ensure_work_item_worktree
|
|
36
39
|
from meridian.lib.state import session_store, spawn_store, work_store
|
|
37
40
|
from meridian.lib.state.paths import resolve_project_paths
|
|
38
41
|
from meridian.lib.state.primary_meta import (
|
|
@@ -247,6 +250,30 @@ def _merge_warnings(*warnings: str | None) -> str | None:
|
|
|
247
250
|
return " ".join(merged)
|
|
248
251
|
|
|
249
252
|
|
|
253
|
+
def _resolve_selected_work_item(
|
|
254
|
+
*,
|
|
255
|
+
payload_work: str,
|
|
256
|
+
context: RuntimeContext,
|
|
257
|
+
runtime_root: Path,
|
|
258
|
+
) -> str | None:
|
|
259
|
+
explicit_work_id = payload_work.strip() or None
|
|
260
|
+
if explicit_work_id is not None:
|
|
261
|
+
return explicit_work_id
|
|
262
|
+
|
|
263
|
+
ambient_work_id = (context.work_id or "").strip() or None
|
|
264
|
+
if ambient_work_id is not None:
|
|
265
|
+
return ambient_work_id
|
|
266
|
+
|
|
267
|
+
chat_id = (context.chat_id or "").strip()
|
|
268
|
+
if not chat_id:
|
|
269
|
+
return None
|
|
270
|
+
try:
|
|
271
|
+
active_work_id = session_store.get_session_active_work_id(runtime_root, chat_id) or ""
|
|
272
|
+
return active_work_id.strip() or None
|
|
273
|
+
except Exception:
|
|
274
|
+
return None
|
|
275
|
+
|
|
276
|
+
|
|
250
277
|
def spawn_create_sync(
|
|
251
278
|
payload: SpawnCreateInput,
|
|
252
279
|
ctx: RuntimeContext | None = None,
|
|
@@ -290,11 +317,57 @@ def spawn_create_sync(
|
|
|
290
317
|
work_id=payload.work,
|
|
291
318
|
)
|
|
292
319
|
payload = payload.model_copy(update={"work": resolved_work_id})
|
|
293
|
-
if not work_exists:
|
|
320
|
+
if not work_exists and payload.worktree is not True:
|
|
294
321
|
dry_run_work_warning = (
|
|
295
322
|
f"Work item '{resolved_work_id}' does not exist. "
|
|
296
323
|
"Dry-run leaves state unchanged; it would be created on launch."
|
|
297
324
|
)
|
|
325
|
+
ensure_warning: str | None = None
|
|
326
|
+
forced_task_cwd_resolution: TaskCwdResolution | None = None
|
|
327
|
+
if payload.worktree is True:
|
|
328
|
+
resolved_runtime_root = (
|
|
329
|
+
_runtime_root_from_prepared_for_read(
|
|
330
|
+
prepared_context,
|
|
331
|
+
project_root=resolved_root,
|
|
332
|
+
)
|
|
333
|
+
if prepared_context is not None
|
|
334
|
+
else (
|
|
335
|
+
authority.runtime_root
|
|
336
|
+
if authority.runtime_root is not None
|
|
337
|
+
else resolve_runtime_root_for_read(resolved_root)
|
|
338
|
+
)
|
|
339
|
+
)
|
|
340
|
+
selected_work_id = _resolve_selected_work_item(
|
|
341
|
+
payload_work=payload.work,
|
|
342
|
+
context=resolved_context,
|
|
343
|
+
runtime_root=resolved_runtime_root,
|
|
344
|
+
)
|
|
345
|
+
if selected_work_id is not None:
|
|
346
|
+
project_state_dir = resolve_project_paths(resolved_root).root_dir
|
|
347
|
+
explicit_work_requested = bool(payload.work.strip())
|
|
348
|
+
if explicit_work_requested and not payload.dry_run:
|
|
349
|
+
selected_work_id = ensure_explicit_work_item(
|
|
350
|
+
project_state_dir,
|
|
351
|
+
selected_work_id,
|
|
352
|
+
)
|
|
353
|
+
payload = payload.model_copy(update={"work": selected_work_id})
|
|
354
|
+
ensured = ensure_work_item_worktree(
|
|
355
|
+
project_root=resolved_root,
|
|
356
|
+
project_state_dir=project_state_dir,
|
|
357
|
+
work_id=selected_work_id,
|
|
358
|
+
target_repo=payload.repo,
|
|
359
|
+
execution_cwd=authority.execution_cwd,
|
|
360
|
+
dry_run=payload.dry_run,
|
|
361
|
+
allow_missing_dry_run=explicit_work_requested,
|
|
362
|
+
)
|
|
363
|
+
ensure_warning = ensured.warning
|
|
364
|
+
if payload.dry_run:
|
|
365
|
+
forced_task_cwd_resolution = TaskCwdResolution(
|
|
366
|
+
task_cwd=ensured.worktree_path,
|
|
367
|
+
source="forced-worktree",
|
|
368
|
+
work_item=selected_work_id,
|
|
369
|
+
)
|
|
370
|
+
preflight_warning = _merge_warnings(preflight_warning, ensure_warning)
|
|
298
371
|
|
|
299
372
|
runtime = None
|
|
300
373
|
if not payload.dry_run:
|
|
@@ -322,6 +395,7 @@ def spawn_create_sync(
|
|
|
322
395
|
runtime=runtime,
|
|
323
396
|
preflight_warning=preflight_warning,
|
|
324
397
|
ctx=resolved_context,
|
|
398
|
+
forced_task_cwd_resolution=forced_task_cwd_resolution,
|
|
325
399
|
)
|
|
326
400
|
forked_from = _forked_from_output(payload)
|
|
327
401
|
if payload.dry_run:
|
|
@@ -1528,6 +1602,7 @@ def _build_fork_create_input(
|
|
|
1528
1602
|
inherited_skills: tuple[str, ...],
|
|
1529
1603
|
requested_work: str,
|
|
1530
1604
|
requested_worktree: bool | None,
|
|
1605
|
+
requested_repo: str | None,
|
|
1531
1606
|
requested_goal: str | None,
|
|
1532
1607
|
harness: str | None,
|
|
1533
1608
|
) -> SpawnCreateInput:
|
|
@@ -1543,6 +1618,7 @@ def _build_fork_create_input(
|
|
|
1543
1618
|
desc=payload.desc,
|
|
1544
1619
|
work=requested_work or (resolved_reference.source_work_id or ""),
|
|
1545
1620
|
worktree=requested_worktree,
|
|
1621
|
+
repo=requested_repo,
|
|
1546
1622
|
goal=requested_goal,
|
|
1547
1623
|
session=SessionRequest(
|
|
1548
1624
|
requested_harness_session_id=resolved_reference.harness_session_id,
|
|
@@ -1609,6 +1685,7 @@ def spawn_fork_sync(
|
|
|
1609
1685
|
requested_agent = (payload.agent or "").strip() or None
|
|
1610
1686
|
requested_work = payload.work.strip()
|
|
1611
1687
|
requested_worktree = payload.worktree
|
|
1688
|
+
requested_repo = payload.repo
|
|
1612
1689
|
requested_goal = payload.goal
|
|
1613
1690
|
if requested_goal is None and _looks_like_spawn_ref(normalized_source_ref):
|
|
1614
1691
|
source_row = read_spawn_row(
|
|
@@ -1636,6 +1713,7 @@ def spawn_fork_sync(
|
|
|
1636
1713
|
inherited_skills=inherited_skills,
|
|
1637
1714
|
requested_work=requested_work,
|
|
1638
1715
|
requested_worktree=requested_worktree,
|
|
1716
|
+
requested_repo=requested_repo,
|
|
1639
1717
|
requested_goal=requested_goal,
|
|
1640
1718
|
harness=requested_harness,
|
|
1641
1719
|
)
|
|
@@ -1721,6 +1799,7 @@ def spawn_continue_sync(
|
|
|
1721
1799
|
desc=payload.desc,
|
|
1722
1800
|
work=payload.work,
|
|
1723
1801
|
worktree=payload.worktree,
|
|
1802
|
+
repo=payload.repo,
|
|
1724
1803
|
session=SessionRequest(
|
|
1725
1804
|
requested_harness_session_id=resolved_reference.harness_session_id,
|
|
1726
1805
|
continue_harness=resolved_reference.harness,
|
|
@@ -123,6 +123,7 @@ class SpawnCreateInput(SpawnLaunchOptions):
|
|
|
123
123
|
desc: str = ""
|
|
124
124
|
work: str = ""
|
|
125
125
|
worktree: bool | None = None
|
|
126
|
+
repo: str | None = None
|
|
126
127
|
session: SessionRequest = SessionRequest()
|
|
127
128
|
|
|
128
129
|
@field_validator("goal", mode="before")
|
|
@@ -1051,6 +1052,7 @@ class SpawnContinueInput(SpawnLaunchOptions):
|
|
|
1051
1052
|
desc: str = ""
|
|
1052
1053
|
work: str = ""
|
|
1053
1054
|
worktree: bool | None = None
|
|
1055
|
+
repo: str | None = None
|
|
1054
1056
|
fork: bool = False
|
|
1055
1057
|
|
|
1056
1058
|
@field_validator("goal", mode="before")
|
|
@@ -1074,6 +1076,7 @@ class SpawnForkInput(SpawnLaunchOptions):
|
|
|
1074
1076
|
desc: str = ""
|
|
1075
1077
|
work: str = ""
|
|
1076
1078
|
worktree: bool | None = None
|
|
1079
|
+
repo: str | None = None
|
|
1077
1080
|
|
|
1078
1081
|
@field_validator("goal", mode="before")
|
|
1079
1082
|
@classmethod
|
|
@@ -7,7 +7,7 @@ from meridian.lib.core.overrides import RuntimeOverrides
|
|
|
7
7
|
from meridian.lib.diagnostics import capture_library_diagnostics
|
|
8
8
|
from meridian.lib.harness.registry import get_default_harness_registry
|
|
9
9
|
from meridian.lib.launch.context import build_launch_context
|
|
10
|
-
from meridian.lib.launch.cwd import LaunchDirectoryContext, resolve_task_cwd
|
|
10
|
+
from meridian.lib.launch.cwd import LaunchDirectoryContext, TaskCwdResolution, resolve_task_cwd
|
|
11
11
|
from meridian.lib.launch.reference import parse_template_assignments, validate_reference_paths
|
|
12
12
|
from meridian.lib.launch.request import (
|
|
13
13
|
ExecutionBudget,
|
|
@@ -48,6 +48,7 @@ def build_create_payload(
|
|
|
48
48
|
runtime: OperationRuntime | None = None,
|
|
49
49
|
preflight_warning: str | None = None,
|
|
50
50
|
ctx: RuntimeContext | None = None,
|
|
51
|
+
forced_task_cwd_resolution: TaskCwdResolution | None = None,
|
|
51
52
|
) -> SpawnRequest:
|
|
52
53
|
"""Build a spawn request without leaking library warnings to stderr."""
|
|
53
54
|
|
|
@@ -84,14 +85,18 @@ def build_create_payload(
|
|
|
84
85
|
).strip() or None
|
|
85
86
|
except Exception:
|
|
86
87
|
ambient_work_id = None
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
project_state_dir = resolve_project_paths(project_root).root_dir
|
|
89
|
+
if forced_task_cwd_resolution is not None:
|
|
90
|
+
task_cwd_resolution = forced_task_cwd_resolution
|
|
91
|
+
else:
|
|
92
|
+
task_cwd_resolution = resolve_task_cwd(
|
|
93
|
+
project_root,
|
|
94
|
+
project_state_dir=project_state_dir,
|
|
95
|
+
explicit_work_id=explicit_work_id,
|
|
96
|
+
ambient_work_id=ambient_work_id,
|
|
97
|
+
force_worktree=payload.worktree is True,
|
|
98
|
+
force_no_worktree=payload.worktree is False,
|
|
99
|
+
)
|
|
95
100
|
directory_context = LaunchDirectoryContext.from_task_cwd_resolution(
|
|
96
101
|
authority_root=project_root,
|
|
97
102
|
task_cwd_resolution=task_cwd_resolution,
|
|
@@ -148,7 +153,7 @@ def build_create_payload(
|
|
|
148
153
|
template_vars=parsed_template_vars,
|
|
149
154
|
goal=payload.goal,
|
|
150
155
|
work_id_hint=payload.work.strip() or None,
|
|
151
|
-
warning=preflight_warning,
|
|
156
|
+
warning=preflight_warning.strip() if preflight_warning is not None else None,
|
|
152
157
|
authority_root=directory_context.authority_root.as_posix(),
|
|
153
158
|
task_cwd=directory_context.logical_task_cwd.as_posix(),
|
|
154
159
|
reference_anchor=directory_context.reference_anchor.as_posix(),
|