docs/design/daemon-extension-local-path-install.md
The CLI can install an Extension from a path on the daemon host, but the daemon REST install routes reject the same source. Callers that already placed an Extension on the daemon filesystem must therefore start a terminal command instead of using the asynchronous Extension operation API.
Allow an existing daemon-local path in the source field of both install
contracts:
POST /workspace/extensions/install remains the primary-workspace
compatibility route and installs with user activation.POST /extensions/install remains the process-global V2 route and uses its
existing explicit user or workspace activation request.No new route or SDK method is needed. DaemonClient.installExtension() and
DaemonClient.installUserExtension() already send the shared
ExtensionInstallRequest.source field and poll the existing operation model.
The accepted source set becomes Git, GitHub, npm, or a path that exists on the
daemon host and is classified as local by the existing source parser.
Local installation keeps the current CLI semantics: the Extension manager
copies the source into managed Extension storage rather than linking it. A
directory or a supported local archive path therefore uses the same parsing,
conversion, consent, staging, commit, and cleanup logic already exercised by
the CLI. The REST contract accepts only absolute local paths. This avoids
resolving a relative path against the daemon process working directory and
prevents an existing local owner/repo directory from shadowing a remote
GitHub shorthand.
Advertise extension_local_path_install so clients can distinguish daemons
that accept local paths from older daemons that reject them. The capability
covers both install routes; clients must still preflight
extension_management_v2 before using the V2 route.
ref, or autoUpdate.
Existing npm registry and activation validation remains authoritative.type: "local"./capabilities advertises extension_local_path_install.