apm-cli 0.28.0__tar.gz → 0.29.0__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.
- {apm_cli-0.28.0/src/apm_cli.egg-info → apm_cli-0.29.0}/PKG-INFO +4 -3
- {apm_cli-0.28.0 → apm_cli-0.29.0}/README.md +3 -2
- {apm_cli-0.28.0 → apm_cli-0.29.0}/pyproject.toml +1 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/base.py +4 -2
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/codex.py +19 -4
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/copilot.py +23 -8
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/cursor.py +2 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/gemini.py +2 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/kiro.py +2 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/vscode.py +2 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/__init__.py +146 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/assets.py +368 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/constants.py +23 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/errors.py +162 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/io.py +101 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/ir.py +196 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/loader.py +966 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/projection.py +61 -0
- apm_cli-0.29.0/src/apm_cli/agent_plugins/validation.py +690 -0
- apm_cli-0.29.0/src/apm_cli/bundle/agent_plugin_exporter.py +521 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/attest.py +1 -1
- apm_cli-0.29.0/src/apm_cli/bundle/claude_plugin_exporter.py +32 -0
- apm_cli-0.29.0/src/apm_cli/bundle/export_common.py +41 -0
- apm_cli-0.29.0/src/apm_cli/bundle/formats.py +147 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/local_bundle.py +158 -18
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/lockfile_enrichment.py +11 -4
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/packer.py +28 -8
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/plugin_exporter.py +63 -53
- apm_cli-0.29.0/src/apm_cli/bundle/reproducible_archive.py +79 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/_helpers.py +37 -17
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/compile/cli.py +2 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/_utils.py +26 -4
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/cli.py +59 -2
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/init.py +108 -15
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/install.py +67 -73
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/lock.py +21 -5
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/__init__.py +21 -15
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/check.py +30 -15
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/validate.py +15 -11
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/mcp.py +8 -5
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/pack.py +46 -14
- apm_cli-0.29.0/src/apm_cli/commands/plugin/init.py +73 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/prune.py +116 -7
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/cli.py +165 -15
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/engine.py +184 -77
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/agents_compiler.py +67 -14
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/context_optimizer.py +80 -96
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/distributed_compiler.py +104 -32
- apm_cli-0.29.0/src/apm_cli/compilation/inventory.py +122 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/user_root_context.py +39 -12
- apm_cli-0.29.0/src/apm_cli/copilot_plugins/__init__.py +54 -0
- apm_cli-0.29.0/src/apm_cli/copilot_plugins/capability.py +142 -0
- apm_cli-0.29.0/src/apm_cli/copilot_plugins/catalog.py +106 -0
- apm_cli-0.29.0/src/apm_cli/copilot_plugins/constants.py +32 -0
- apm_cli-0.29.0/src/apm_cli/copilot_plugins/registrar.py +659 -0
- apm_cli-0.29.0/src/apm_cli/copilot_plugins/settings.py +306 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/apm_yml.py +11 -3
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/auth.py +25 -7
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/build_orchestrator.py +31 -9
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/command_logger.py +11 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/deployment_ledger.py +24 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/plugin_manifest.py +56 -21
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/script_executors.py +3 -31
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/target_catalog.py +25 -4
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/target_detection.py +11 -19
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/_shared.py +25 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/apm_resolver.py +23 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/artifactory_orchestrator.py +4 -5
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/bare_cache.py +4 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_auth_env.py +20 -7
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/github_downloader.py +19 -21
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/lockfile.py +29 -14
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/package_validator.py +12 -6
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/plugin_parser.py +398 -66
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/resolver.py +36 -2
- apm_cli-0.29.0/src/apm_cli/hook_contract.py +266 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/context.py +9 -0
- apm_cli-0.29.0/src/apm_cli/install/deployable_source_plan.py +264 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/drift.py +55 -7
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/exec_gate.py +74 -7
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/ref_reuse.py +16 -7
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/security_scan.py +20 -9
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/integrity.py +27 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/local_bundle_handler.py +249 -59
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/local_bundle_paths.py +4 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/lsp/integration.py +73 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/manifest_reconcile.py +127 -40
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/integration.py +91 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/ownership.py +4 -4
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/registry.py +6 -18
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/warnings.py +29 -17
- apm_cli-0.29.0/src/apm_cli/install/native_plugin_admission.py +207 -0
- apm_cli-0.29.0/src/apm_cli/install/phases/copilot_plugins.py +198 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/finalize.py +16 -4
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/integrate.py +23 -2
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/pipeline.py +39 -45
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/request.py +1 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/resolution_staging.py +9 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/service.py +77 -4
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/services.py +124 -37
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/sources.py +106 -68
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/template.py +202 -20
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/agent_integrator.py +4 -3
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/base_integrator.py +13 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/canvas_integrator.py +15 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/command_integrator.py +7 -3
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_bundle.py +46 -12
- apm_cli-0.29.0/src/apm_cli/integration/hook_command_paths.py +58 -0
- apm_cli-0.29.0/src/apm_cli/integration/hook_command_warnings.py +25 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_integrator.py +183 -182
- apm_cli-0.29.0/src/apm_cli/integration/hook_ir.py +5 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_native_formats.py +6 -73
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_ownership.py +68 -15
- apm_cli-0.29.0/src/apm_cli/integration/hook_reintegration.py +37 -0
- apm_cli-0.29.0/src/apm_cli/integration/hook_source_selection.py +188 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/instruction_integrator.py +10 -6
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/kiro_hook_integrator.py +11 -10
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/mcp_config_view.py +33 -6
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/mcp_integrator.py +10 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/prompt_integrator.py +9 -3
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/skill_integrator.py +387 -302
- apm_cli-0.29.0/src/apm_cli/integration/skill_package_routing.py +49 -0
- apm_cli-0.29.0/src/apm_cli/integration/skill_support.py +97 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/targets.py +14 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/builder.py +21 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/models.py +108 -33
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/validator.py +15 -7
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/yml_schema.py +30 -12
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/apm_package.py +73 -42
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/identity.py +1 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/mcp.py +26 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/reference.py +53 -20
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/format_detection.py +76 -17
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/validation.py +128 -21
- apm_cli-0.29.0/src/apm_cli/policy/_gitlab.py +490 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/_help_text.py +2 -2
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/ci_checks.py +83 -6
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/discovery.py +106 -93
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/discovery.py +131 -27
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/operations.py +1 -1
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/copilot_runtime.py +12 -6
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/executables.py +129 -20
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/gate.py +69 -2
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/content_hash.py +12 -5
- apm_cli-0.29.0/src/apm_cli/utils/net.py +58 -0
- apm_cli-0.29.0/src/apm_cli/utils/path_security.py +243 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/patterns.py +103 -3
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/yaml_io.py +105 -23
- {apm_cli-0.28.0 → apm_cli-0.29.0/src/apm_cli.egg-info}/PKG-INFO +4 -3
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/SOURCES.txt +33 -0
- apm_cli-0.28.0/src/apm_cli/commands/plugin/init.py +0 -44
- apm_cli-0.28.0/src/apm_cli/integration/hook_ir.py +0 -54
- apm_cli-0.28.0/src/apm_cli/utils/path_security.py +0 -130
- {apm_cli-0.28.0 → apm_cli-0.29.0}/AUTHORS +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/LICENSE +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/NOTICE +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/setup.cfg +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/_mcp_runtime_args.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/antigravity.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/claude.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/hermes.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/intellij.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/opencode.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/windsurf.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/package_manager/base.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bootstrap_mirror.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/plugin_layout.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/unpacker.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/git_cache.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/http_cache.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/integrity.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/locking.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/paths.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/url_normalize.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cli.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/_apm_yml_writer.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/approve.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/audit.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/cache.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/compile/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/compile/watcher.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/config.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/why.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/doctor.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/experimental.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/find.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/lifecycle.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/list_cmd.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/audit.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/doctor.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/init.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/migrate.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/outdated.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/add.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/remove.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/set.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/outdated.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/plugin/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/policy.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/publish.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/run.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/runtime.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/self_update.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/targets.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/lockfile_state.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/update.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/view.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/build_id.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/claude_formatter.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/constants.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/constitution.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/constitution_block.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/gemini_formatter.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/injector.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/link_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/managed_section.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/output_writer.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/template_builder.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/config.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/constants.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/_child_tls/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/_child_tls/_apm_tls.pth +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/_child_tls/_apm_tls_bootstrap.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/azure_cli.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/conflict_detector.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/deployment_state.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/docker_args.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/errors.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/experimental.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/host_providers.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/install_audit.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/lifecycle_scripts.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/null_logger.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/operations.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/output_mode.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/project_name.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/safe_installer.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/scope.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/script_runner.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/script_trust.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/tls_trust.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/token_manager.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/aggregator.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/artifactory_entry.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/clone_engine.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/dependency_graph.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/download_strategies.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_file_transport.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_reference_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_remote_ops.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_semver_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/github_downloader_validation.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/github_rate_limit.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/host_backends.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/installed_package.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/outdated_ref_cache.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/outdated_row.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/path_anchoring.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/reachability.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/auth.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/client.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/config_loader.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/extractor.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/feature_gate.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/outdated.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/semver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry_proxy.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/revision_pins.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/shared_clone_cache.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/tiered_ref_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/transport_selection.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/verifier.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/why_walker.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/drift.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/authoring.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/declared_license.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/formats.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/purl.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/sbom.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/spdx.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/spdx_data.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/factory.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/argv.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/artifactory_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/audit_replay.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/cache_pin.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/deployed_paths.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/drift_render.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/errors.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/gitlab_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/base.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/branch_ref_drift.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/buggy_lockfile_recovery.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/no_work.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/ref_seed.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/insecure_policy.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/lsp/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/args.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/command.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/conflicts.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/entry.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/writer.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/outcome.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/package_resolution.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/package_selection.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/_redownload.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/_skip_logic.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/audit.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/cleanup.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/download.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/heal.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/local_content.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/lockfile.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/policy_gate.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/policy_target_check.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/post_deps_local.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/resolve.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/targets.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/plan.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/presentation/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/presentation/dry_run.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/registry_wiring.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/root_redirect.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/service_integration.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/skill_path_migration.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/summary.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/target_filter.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/target_hints.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/target_warnings.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/transaction.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/validation.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/_hook_dropped_targets.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/_shared.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/cleanup.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_db.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_project.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_workflow_integrator.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_ws.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_cowork_paths.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/coverage.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/dispatch.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_file_routing.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/lsp_integrator.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/mcp_integrator_install.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/opencode_frontmatter.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/skill_transformer.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/utils.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/_git_utils.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/_io.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/_shared.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/audit.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/auth_helpers.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/client.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/diagnostics.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/drift_check.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/errors.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/git_stderr.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/init_template.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/migration.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/output_mappers.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/output_profiles.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/ref_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/registry.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/semver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/shadow_detector.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/tag_pattern.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/version_check.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/version_pins.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/version_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/yml_editor.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/lsp.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/materialization.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/object_fields.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/provider_coordinates.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/registry_entry.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/selection.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/subsets.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/types.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/manifest_contract.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/plugin.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/results.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/formatters.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/models.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/script_formatters.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/_constraint_pinning.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/_shared.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/inheritance.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/install_preflight.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/matcher.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/models.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/outcome_routing.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/parser.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/policy_checks.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/project_config.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/schema.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/models.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/parser.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/client.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/integration.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/base.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/codex_runtime.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/factory.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/llm_runtime.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/manager.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/registry.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/utils.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/audit_report.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/content_scanner.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/base.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/gate.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/generic_sarif.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/options.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/registry.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/runner.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/sarif_ingest.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/skillspector.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/file_scanner.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/update_policy.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/archive.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/atomic_io.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/console.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/diagnostics.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/exclude.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/file_ops.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/git_env.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/git_sparse.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/github_host.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/guards.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/helpers.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/install_tui.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/normalization.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/paths.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/perf_stats.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/reflink.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/short_sha.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/subprocess_env.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/version_checker.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/version.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/__init__.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/discovery.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/parser.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/runner.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/dependency_links.txt +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/entry_points.txt +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/requires.txt +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/top_level.txt +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_apm_package_models.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_apm_resolver.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_codex_docker_args_fix.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_codex_empty_string_and_defaults.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_collision_integration.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_console.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_distributed_compilation.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_empty_string_and_defaults.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_enhanced_discovery.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_github_downloader.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_github_downloader_token_precedence.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_gitlab_git_transport.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_lockfile.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_runnable_prompts.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_runtime_manager_token_precedence.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_token_manager.py +0 -0
- {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_virtual_package_multi_install.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apm-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.29.0
|
|
4
4
|
Summary: MCP configuration tool
|
|
5
5
|
Author-email: Daniel Meppiel <user@example.com>
|
|
6
6
|
License: MIT License
|
|
@@ -78,7 +78,7 @@ Think `package.json`, `requirements.txt`, or `Cargo.toml` — but for AI agent c
|
|
|
78
78
|
|
|
79
79
|
GitHub Copilot | Claude Code | Grok Build | Cursor | OpenCode | Codex | Gemini | Windsurf | Kiro
|
|
80
80
|
|
|
81
|
-
**[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)** · **[Roadmap](https://github.com/
|
|
81
|
+
**[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)** · **[v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)**
|
|
82
82
|
|
|
83
83
|
---
|
|
84
84
|
|
|
@@ -239,7 +239,8 @@ Use agentrc to author high-quality instructions, then package them with APM to s
|
|
|
239
239
|
|
|
240
240
|
Created by [@danielmeppiel](https://github.com/danielmeppiel). Maintained by [@danielmeppiel](https://github.com/danielmeppiel) and [@sergio-sisternes-epam](https://github.com/sergio-sisternes-epam).
|
|
241
241
|
|
|
242
|
-
- [Roadmap
|
|
242
|
+
- [v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)
|
|
243
|
+
- [Discussions](https://github.com/microsoft/apm/discussions)
|
|
243
244
|
- [Contributing](CONTRIBUTING.md)
|
|
244
245
|
- [AI Native Development guide](https://danielmeppiel.github.io/awesome-ai-native) — a practical learning path for AI-native development
|
|
245
246
|
|
|
@@ -6,7 +6,7 @@ Think `package.json`, `requirements.txt`, or `Cargo.toml` — but for AI agent c
|
|
|
6
6
|
|
|
7
7
|
GitHub Copilot | Claude Code | Grok Build | Cursor | OpenCode | Codex | Gemini | Windsurf | Kiro
|
|
8
8
|
|
|
9
|
-
**[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)** · **[Roadmap](https://github.com/
|
|
9
|
+
**[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)** · **[v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)**
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -167,7 +167,8 @@ Use agentrc to author high-quality instructions, then package them with APM to s
|
|
|
167
167
|
|
|
168
168
|
Created by [@danielmeppiel](https://github.com/danielmeppiel). Maintained by [@danielmeppiel](https://github.com/danielmeppiel) and [@sergio-sisternes-epam](https://github.com/sergio-sisternes-epam).
|
|
169
169
|
|
|
170
|
-
- [Roadmap
|
|
170
|
+
- [v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)
|
|
171
|
+
- [Discussions](https://github.com/microsoft/apm/discussions)
|
|
171
172
|
- [Contributing](CONTRIBUTING.md)
|
|
172
173
|
- [AI Native Development guide](https://danielmeppiel.github.io/awesome-ai-native) — a practical learning path for AI-native development
|
|
173
174
|
|
|
@@ -7,7 +7,7 @@ from dataclasses import dataclass
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from typing import Any, ClassVar
|
|
9
9
|
|
|
10
|
-
from ...models.dependency.mcp import _RESERVED_EXTRA_KEYS
|
|
10
|
+
from ...models.dependency.mcp import _RESERVED_EXTRA_KEYS, TrustedEnvLiteral
|
|
11
11
|
from ...utils.console import _rich_error, _rich_warning
|
|
12
12
|
|
|
13
13
|
_INPUT_VAR_RE = re.compile(r"\$\{input:([^}]+)\}")
|
|
@@ -1087,7 +1087,9 @@ class MCPClientAdapter(ABC):
|
|
|
1087
1087
|
if not isinstance(raw_value, str):
|
|
1088
1088
|
translated[name] = raw_value
|
|
1089
1089
|
continue
|
|
1090
|
-
if
|
|
1090
|
+
if isinstance(raw_value, TrustedEnvLiteral):
|
|
1091
|
+
translated[name] = raw_value
|
|
1092
|
+
elif _has_env_placeholder(raw_value):
|
|
1091
1093
|
self._last_legacy_angle_vars.update(_extract_legacy_angle_vars(raw_value))
|
|
1092
1094
|
translated[name] = self._translate_env_placeholder_for_runtime(raw_value)
|
|
1093
1095
|
placeholder_keys.extend(
|
|
@@ -12,6 +12,7 @@ from ...registry.client import SimpleRegistryClient
|
|
|
12
12
|
from ...registry.integration import RegistryIntegration
|
|
13
13
|
from ...utils.atomic_io import atomic_write_text
|
|
14
14
|
from ...utils.console import _rich_success, _rich_warning
|
|
15
|
+
from ...utils.net import is_loopback_host
|
|
15
16
|
from ...utils.path_security import PathTraversalError
|
|
16
17
|
from ._mcp_runtime_args import process_v01_value_hint_arg
|
|
17
18
|
from .base import MCPClientAdapter
|
|
@@ -216,6 +217,8 @@ class CodexClientAdapter(MCPClientAdapter):
|
|
|
216
217
|
raw = server_info.get("_raw_stdio")
|
|
217
218
|
if raw:
|
|
218
219
|
config["command"] = raw["command"]
|
|
220
|
+
if raw.get("cwd") is not None:
|
|
221
|
+
config["cwd"] = raw["cwd"]
|
|
219
222
|
resolved_env_for_args: dict = {}
|
|
220
223
|
if raw.get("env"):
|
|
221
224
|
resolved_env_for_args = self._resolve_environment_variables(
|
|
@@ -239,7 +242,8 @@ class CodexClientAdapter(MCPClientAdapter):
|
|
|
239
242
|
# Precedence on Codex when a server publishes BOTH a remote and a stdio
|
|
240
243
|
# package: prefer the stdio package (falls through to the packages branch
|
|
241
244
|
# below). The remote-only branch here handles the streamable-http path
|
|
242
|
-
# and rejects SSE / non-https / empty-url remotes
|
|
245
|
+
# and rejects SSE / non-https (except loopback http) / empty-url remotes
|
|
246
|
+
# with explicit warnings.
|
|
243
247
|
remotes = server_info.get("remotes", [])
|
|
244
248
|
packages = server_info.get("packages", [])
|
|
245
249
|
if remotes and not packages:
|
|
@@ -263,11 +267,22 @@ class CodexClientAdapter(MCPClientAdapter):
|
|
|
263
267
|
)
|
|
264
268
|
return None
|
|
265
269
|
|
|
266
|
-
|
|
267
|
-
|
|
270
|
+
try:
|
|
271
|
+
parsed_remote = urlparse(remote_url)
|
|
272
|
+
scheme = parsed_remote.scheme.lower()
|
|
273
|
+
insecure_loopback = scheme == "http" and is_loopback_host(parsed_remote.hostname)
|
|
274
|
+
except ValueError:
|
|
275
|
+
scheme = ""
|
|
276
|
+
insecure_loopback = False
|
|
277
|
+
# Codex CLI itself accepts plain-http loopback URLs (its docs use
|
|
278
|
+
# http://localhost examples), and local dev servers rarely carry
|
|
279
|
+
# certs -- so loopback http is allowed. Any other non-https host is
|
|
280
|
+
# still rejected to avoid cleartext bearer tokens in transit.
|
|
281
|
+
if scheme != "https" and not insecure_loopback:
|
|
268
282
|
_rich_warning(
|
|
269
283
|
f"Skipping MCP server '{server_name}' for Codex CLI: remote URL "
|
|
270
|
-
f"must use https:// (got {scheme or 'no scheme'})."
|
|
284
|
+
f"must use https:// (got {scheme or 'no scheme'}). "
|
|
285
|
+
"Plain http is allowed for loopback addresses only.",
|
|
271
286
|
symbol="warning",
|
|
272
287
|
)
|
|
273
288
|
return None
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""GitHub Copilot CLI implementation of MCP client adapter.
|
|
2
2
|
|
|
3
|
-
This adapter implements the Copilot
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
This adapter implements the Copilot-specific handling of MCP server configuration.
|
|
4
|
+
At project scope it targets .github/mcp.json (read by Copilot CLI); at user scope
|
|
5
|
+
it targets the global ~/.copilot/mcp-config.json file.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import json
|
|
@@ -13,6 +13,7 @@ from typing import ClassVar
|
|
|
13
13
|
import click
|
|
14
14
|
|
|
15
15
|
from ...core.token_manager import GitHubTokenManager
|
|
16
|
+
from ...models.dependency.mcp import TrustedEnvLiteral
|
|
16
17
|
from ...registry.client import SimpleRegistryClient
|
|
17
18
|
from ...registry.integration import RegistryIntegration
|
|
18
19
|
from ...utils.console import _rich_warning
|
|
@@ -103,13 +104,23 @@ class CopilotClientAdapter(MCPClientAdapter):
|
|
|
103
104
|
self.registry_integration = RegistryIntegration(registry_url)
|
|
104
105
|
|
|
105
106
|
def get_config_path(self):
|
|
106
|
-
"""Get the path to the Copilot
|
|
107
|
+
"""Get the path to the Copilot MCP configuration file.
|
|
108
|
+
|
|
109
|
+
At user scope returns the global Copilot CLI config so MCP servers are
|
|
110
|
+
available across all projects. At project scope returns the per-repo
|
|
111
|
+
.github/mcp.json path that Copilot CLI reads since deprecating
|
|
112
|
+
.vscode/mcp.json.
|
|
107
113
|
|
|
108
114
|
Returns:
|
|
109
|
-
str: Path to
|
|
115
|
+
str: Path to the MCP configuration file.
|
|
110
116
|
"""
|
|
111
|
-
|
|
112
|
-
|
|
117
|
+
if self.user_scope:
|
|
118
|
+
configured_home = os.environ.get("COPILOT_HOME", "").strip()
|
|
119
|
+
copilot_home = (
|
|
120
|
+
Path(configured_home).expanduser() if configured_home else Path.home() / ".copilot"
|
|
121
|
+
)
|
|
122
|
+
return str(copilot_home / "mcp-config.json")
|
|
123
|
+
return str(self.project_root / ".github" / "mcp.json")
|
|
113
124
|
|
|
114
125
|
def update_config(self, config_updates):
|
|
115
126
|
"""Update the Copilot CLI MCP configuration.
|
|
@@ -423,6 +434,8 @@ class CopilotClientAdapter(MCPClientAdapter):
|
|
|
423
434
|
raw = server_info.get("_raw_stdio")
|
|
424
435
|
if raw:
|
|
425
436
|
config["command"] = raw["command"]
|
|
437
|
+
if raw.get("cwd") is not None:
|
|
438
|
+
config["cwd"] = raw["cwd"]
|
|
426
439
|
resolved_env_for_args = {}
|
|
427
440
|
if raw.get("env"):
|
|
428
441
|
resolved_env_for_args = self._resolve_environment_variables(
|
|
@@ -723,7 +736,9 @@ class CopilotClientAdapter(MCPClientAdapter):
|
|
|
723
736
|
if not isinstance(raw_value, str):
|
|
724
737
|
translated[name] = _stringify_env_literal(raw_value)
|
|
725
738
|
continue
|
|
726
|
-
if
|
|
739
|
+
if isinstance(raw_value, TrustedEnvLiteral):
|
|
740
|
+
translated[name] = raw_value
|
|
741
|
+
elif _has_env_placeholder(raw_value):
|
|
727
742
|
self._last_legacy_angle_vars.update(_extract_legacy_angle_vars(raw_value))
|
|
728
743
|
translated[name] = self._translate_env_placeholder_for_runtime(raw_value)
|
|
729
744
|
for match in _ENV_VAR_RE.finditer(translated[name]):
|
|
@@ -134,6 +134,8 @@ class CursorClientAdapter(CopilotClientAdapter):
|
|
|
134
134
|
if raw:
|
|
135
135
|
config["type"] = "stdio"
|
|
136
136
|
config["command"] = raw["command"]
|
|
137
|
+
if raw.get("cwd") is not None:
|
|
138
|
+
config["cwd"] = raw["cwd"]
|
|
137
139
|
resolved_env_for_args: dict = {}
|
|
138
140
|
if raw.get("env"):
|
|
139
141
|
resolved_env_for_args = self._resolve_environment_variables(
|
|
@@ -148,6 +148,8 @@ class GeminiClientAdapter(CopilotClientAdapter):
|
|
|
148
148
|
raw = server_info.get("_raw_stdio")
|
|
149
149
|
if raw:
|
|
150
150
|
config["command"] = raw["command"]
|
|
151
|
+
if raw.get("cwd") is not None:
|
|
152
|
+
config["cwd"] = raw["cwd"]
|
|
151
153
|
resolved_env_for_args: dict = {}
|
|
152
154
|
if raw.get("env"):
|
|
153
155
|
resolved_env_for_args = self._resolve_environment_variables(
|
|
@@ -116,6 +116,8 @@ class KiroClientAdapter(CopilotClientAdapter):
|
|
|
116
116
|
raw = server_info.get("_raw_stdio")
|
|
117
117
|
if raw:
|
|
118
118
|
config: dict[str, Any] = {"command": raw["command"]}
|
|
119
|
+
if raw.get("cwd") is not None:
|
|
120
|
+
config["cwd"] = raw["cwd"]
|
|
119
121
|
resolved_env_for_args: dict[str, Any] = {}
|
|
120
122
|
if raw.get("env"):
|
|
121
123
|
resolved_env_for_args = self._resolve_environment_variables(
|
|
@@ -277,6 +277,8 @@ class VSCodeClientAdapter(MCPClientAdapter):
|
|
|
277
277
|
"command": raw["command"],
|
|
278
278
|
"args": raw["args"],
|
|
279
279
|
}
|
|
280
|
+
if raw.get("cwd") is not None:
|
|
281
|
+
server_config["cwd"] = raw["cwd"]
|
|
280
282
|
if raw.get("env"):
|
|
281
283
|
# Translate bare ${VAR} -> ${env:VAR} so VS Code's runtime env
|
|
282
284
|
# interpolation resolves them at server-start. ${input:...}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"""Agent Plugins v1 contract helpers."""
|
|
2
|
+
|
|
3
|
+
from .assets import AssetInventoryError, open_verified_asset
|
|
4
|
+
from .constants import (
|
|
5
|
+
AGENT_PLUGINS_SCHEMA_PREFIX,
|
|
6
|
+
AGENT_PLUGINS_SITE_COMMIT,
|
|
7
|
+
AGENT_PLUGINS_SPEC_COMMIT,
|
|
8
|
+
AGENT_PLUGINS_SPEC_SHA256,
|
|
9
|
+
AGENT_PLUGINS_VERSION,
|
|
10
|
+
COM_MICROSOFT_APM_NAMESPACE,
|
|
11
|
+
COM_MICROSOFT_APM_SCHEMA_VERSION,
|
|
12
|
+
MAX_COMPONENT_ASSET_BYTES,
|
|
13
|
+
MAX_COMPONENT_ASSET_ENTRIES,
|
|
14
|
+
MCP_SCHEMA_ID,
|
|
15
|
+
MCP_SCHEMA_SHA256,
|
|
16
|
+
PLUGIN_SCHEMA_ID,
|
|
17
|
+
PLUGIN_SCHEMA_SHA256,
|
|
18
|
+
SUPPORTED_MCP_SCHEMA_IDS,
|
|
19
|
+
SUPPORTED_PLUGIN_SCHEMA_IDS,
|
|
20
|
+
)
|
|
21
|
+
from .errors import (
|
|
22
|
+
AgentPluginDeploymentBoundaryError,
|
|
23
|
+
AgentPluginError,
|
|
24
|
+
AgentPluginLegacyBoundaryError,
|
|
25
|
+
AgentPluginManifestAuthorityError,
|
|
26
|
+
AgentPluginManifestError,
|
|
27
|
+
NotAgentPluginError,
|
|
28
|
+
UnsupportedAgentPluginVersionError,
|
|
29
|
+
)
|
|
30
|
+
from .io import MAX_JSON_BYTES, read_json_document
|
|
31
|
+
from .ir import (
|
|
32
|
+
AgentPlugin,
|
|
33
|
+
AgentPluginAsset,
|
|
34
|
+
AgentPluginComponents,
|
|
35
|
+
AgentPluginDetection,
|
|
36
|
+
AgentPluginDiagnostic,
|
|
37
|
+
AgentPluginExecutable,
|
|
38
|
+
AgentPluginIdentity,
|
|
39
|
+
AgentPluginMcpServer,
|
|
40
|
+
AgentPluginSkill,
|
|
41
|
+
ApmConfiguration,
|
|
42
|
+
ApmExtensionData,
|
|
43
|
+
DiagnosticSeverity,
|
|
44
|
+
FrozenJsonArray,
|
|
45
|
+
FrozenJsonObject,
|
|
46
|
+
FrozenJsonValue,
|
|
47
|
+
JsonValue,
|
|
48
|
+
McpServerType,
|
|
49
|
+
SourceProvenance,
|
|
50
|
+
thaw_frozen_json,
|
|
51
|
+
)
|
|
52
|
+
from .loader import (
|
|
53
|
+
admit_legacy_plugin_manifest,
|
|
54
|
+
detect_agent_plugin,
|
|
55
|
+
load_agent_plugin,
|
|
56
|
+
reject_agent_plugin_legacy_normalization,
|
|
57
|
+
)
|
|
58
|
+
from .validation import (
|
|
59
|
+
ValidationResult,
|
|
60
|
+
args_contain_literal_secret,
|
|
61
|
+
contains_literal_secret_fields,
|
|
62
|
+
is_agent_plugin_schema_id,
|
|
63
|
+
schema_version_from_id,
|
|
64
|
+
supports_mcp_schema_id,
|
|
65
|
+
supports_plugin_schema_id,
|
|
66
|
+
url_contains_literal_secret,
|
|
67
|
+
validate_mcp_config_document,
|
|
68
|
+
validate_mcp_config_file,
|
|
69
|
+
validate_plugin_manifest_document,
|
|
70
|
+
validate_plugin_manifest_file,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def __getattr__(name: str) -> object:
|
|
75
|
+
"""Lazily expose compatibility projection without a models import cycle."""
|
|
76
|
+
if name != "project_agent_plugin_package":
|
|
77
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
78
|
+
from .projection import project_agent_plugin_package
|
|
79
|
+
|
|
80
|
+
return project_agent_plugin_package
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
__all__ = [
|
|
84
|
+
"AGENT_PLUGINS_SCHEMA_PREFIX",
|
|
85
|
+
"AGENT_PLUGINS_SITE_COMMIT",
|
|
86
|
+
"AGENT_PLUGINS_SPEC_COMMIT",
|
|
87
|
+
"AGENT_PLUGINS_SPEC_SHA256",
|
|
88
|
+
"AGENT_PLUGINS_VERSION",
|
|
89
|
+
"COM_MICROSOFT_APM_NAMESPACE",
|
|
90
|
+
"COM_MICROSOFT_APM_SCHEMA_VERSION",
|
|
91
|
+
"MAX_COMPONENT_ASSET_BYTES",
|
|
92
|
+
"MAX_COMPONENT_ASSET_ENTRIES",
|
|
93
|
+
"MAX_JSON_BYTES",
|
|
94
|
+
"MCP_SCHEMA_ID",
|
|
95
|
+
"MCP_SCHEMA_SHA256",
|
|
96
|
+
"PLUGIN_SCHEMA_ID",
|
|
97
|
+
"PLUGIN_SCHEMA_SHA256",
|
|
98
|
+
"SUPPORTED_MCP_SCHEMA_IDS",
|
|
99
|
+
"SUPPORTED_PLUGIN_SCHEMA_IDS",
|
|
100
|
+
"AgentPlugin",
|
|
101
|
+
"AgentPluginAsset",
|
|
102
|
+
"AgentPluginComponents",
|
|
103
|
+
"AgentPluginDeploymentBoundaryError",
|
|
104
|
+
"AgentPluginDetection",
|
|
105
|
+
"AgentPluginDiagnostic",
|
|
106
|
+
"AgentPluginError",
|
|
107
|
+
"AgentPluginExecutable",
|
|
108
|
+
"AgentPluginIdentity",
|
|
109
|
+
"AgentPluginLegacyBoundaryError",
|
|
110
|
+
"AgentPluginManifestAuthorityError",
|
|
111
|
+
"AgentPluginManifestError",
|
|
112
|
+
"AgentPluginMcpServer",
|
|
113
|
+
"AgentPluginSkill",
|
|
114
|
+
"ApmConfiguration",
|
|
115
|
+
"ApmExtensionData",
|
|
116
|
+
"AssetInventoryError",
|
|
117
|
+
"DiagnosticSeverity",
|
|
118
|
+
"FrozenJsonArray",
|
|
119
|
+
"FrozenJsonObject",
|
|
120
|
+
"FrozenJsonValue",
|
|
121
|
+
"JsonValue",
|
|
122
|
+
"McpServerType",
|
|
123
|
+
"NotAgentPluginError",
|
|
124
|
+
"SourceProvenance",
|
|
125
|
+
"UnsupportedAgentPluginVersionError",
|
|
126
|
+
"ValidationResult",
|
|
127
|
+
"admit_legacy_plugin_manifest",
|
|
128
|
+
"args_contain_literal_secret",
|
|
129
|
+
"contains_literal_secret_fields",
|
|
130
|
+
"detect_agent_plugin",
|
|
131
|
+
"is_agent_plugin_schema_id",
|
|
132
|
+
"load_agent_plugin",
|
|
133
|
+
"open_verified_asset",
|
|
134
|
+
"project_agent_plugin_package",
|
|
135
|
+
"read_json_document",
|
|
136
|
+
"reject_agent_plugin_legacy_normalization",
|
|
137
|
+
"schema_version_from_id",
|
|
138
|
+
"supports_mcp_schema_id",
|
|
139
|
+
"supports_plugin_schema_id",
|
|
140
|
+
"thaw_frozen_json",
|
|
141
|
+
"url_contains_literal_secret",
|
|
142
|
+
"validate_mcp_config_document",
|
|
143
|
+
"validate_mcp_config_file",
|
|
144
|
+
"validate_plugin_manifest_document",
|
|
145
|
+
"validate_plugin_manifest_file",
|
|
146
|
+
]
|