shortcutxl 0.3.76 → 0.3.78
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.
- package/BINARY-INVENTORY.json +813 -813
- package/CHANGELOG.md +14 -0
- package/dist/ai/models.d.ts +10 -6
- package/dist/ai/models.generated.d.ts +72 -0
- package/dist/ai/models.generated.js +33 -0
- package/dist/ai/models.js +36 -13
- package/dist/ai/providers/anthropic.d.ts +4 -2
- package/dist/ai/providers/anthropic.js +59 -29
- package/dist/ai/providers/azure-openai-responses.d.ts +2 -1
- package/dist/ai/providers/azure-openai-responses.js +4 -20
- package/dist/ai/providers/google-vertex.d.ts +8 -2
- package/dist/ai/providers/google-vertex.js +66 -54
- package/dist/ai/providers/google.js +15 -48
- package/dist/ai/providers/openai-completions.d.ts +4 -1
- package/dist/ai/providers/openai-completions.js +26 -10
- package/dist/ai/providers/openai-reasoning.d.ts +5 -0
- package/dist/ai/providers/openai-reasoning.js +13 -0
- package/dist/ai/providers/openai-responses-shared.js +1 -1
- package/dist/ai/providers/openai-responses.d.ts +6 -2
- package/dist/ai/providers/openai-responses.js +28 -23
- package/dist/ai/providers/simple-options.d.ts +2 -3
- package/dist/ai/providers/simple-options.js +4 -6
- package/dist/ai/types.d.ts +19 -2
- package/dist/app/agent-session-runtime-adapter.js +7 -6
- package/dist/app/agent-session.d.ts +0 -15
- package/dist/app/agent-session.js +0 -37
- package/dist/app/approvals/approval-errors.d.ts +15 -0
- package/dist/app/approvals/approval-errors.js +14 -0
- package/dist/app/approvals/runtime-approval-gates.d.ts +1 -2
- package/dist/app/approvals/tool-approval.d.ts +1 -0
- package/dist/app/approvals/tool-approval.js +11 -23
- package/dist/app/approvals/types.d.ts +0 -14
- package/dist/app/approvals/types.js +0 -2
- package/dist/app/background/tool-summaries.js +0 -2
- package/dist/app/extensions/slash-commands.js +1 -3
- package/dist/app/local/tools/execute-code/executor.d.ts +1 -1
- package/dist/app/local/tools/execute-code/executor.js +20 -10
- package/dist/app/local/tools/execute-code/tool.js +21 -2
- package/dist/app/modes/action/agent.js +4 -5
- package/dist/app/modes/ask/agent.js +4 -6
- package/dist/app/modes/index.js +20 -10
- package/dist/app/modes/installation/agent.js +4 -5
- package/dist/app/modes/manage/agent.js +3 -4
- package/dist/app/modes/manage/prompt.js +1 -2
- package/dist/app/modes/metadata.d.ts +31 -0
- package/dist/app/modes/metadata.js +35 -0
- package/dist/app/modes/plan/agent.js +5 -8
- package/dist/app/modes/plan/prompt.js +3 -3
- package/dist/app/permissions/runtime-approval-flow.d.ts +1 -5
- package/dist/app/permissions/runtime-approval-flow.js +0 -28
- package/dist/app/permissions/tool-gates.d.ts +2 -3
- package/dist/app/permissions/tool-gates.js +3 -81
- package/dist/app/prompts/com-api.js +1 -1
- package/dist/app/prompts/shared-guidelines.js +7 -3
- package/dist/app/providers/google-vertex-gateway.js +4 -51
- package/dist/app/providers/model-registry.d.ts +1 -0
- package/dist/app/providers/model-registry.js +39 -0
- package/dist/app/providers/model-resolver.js +10 -7
- package/dist/app/providers/register-shortcut-provider.js +6 -6
- package/dist/app/providers/shortcut-api-v2-transport.js +4 -0
- package/dist/app/providers/shortcut-llm-proxy-client.d.ts +2 -2
- package/dist/app/providers/shortcut-llm-proxy-client.js +1 -0
- package/dist/app/resources/package-manager.js +2 -123
- package/dist/app/resources/resource-patterns.d.ts +9 -0
- package/dist/app/resources/resource-patterns.js +120 -0
- package/dist/app/session/forked-agent.d.ts +2 -2
- package/dist/app/session/model-manager.js +3 -2
- package/dist/app/session/session-lifecycle.js +3 -2
- package/dist/app/session/session-models.d.ts +2 -0
- package/dist/app/session/session-models.js +14 -6
- package/dist/app/settings-manager.d.ts +3 -3
- package/dist/app/shared/tools/execute-code/mog.d.ts +3 -1
- package/dist/app/shared/tools/execute-code/mog.js +18 -2
- package/dist/app/tools/bash.js +3 -3
- package/dist/app/tools/execute-code/index.d.ts +1 -0
- package/dist/app/tools/execute-code/index.js +3 -1
- package/dist/app/tools/find-ignore-files.d.ts +3 -0
- package/dist/app/tools/find-ignore-files.js +33 -0
- package/dist/app/tools/find.js +2 -21
- package/dist/app/tools/llm-analysis.js +0 -2
- package/dist/app/tools/refresh-context.d.ts +1 -1
- package/dist/app/tools/session-settings/update-session-settings.js +2 -2
- package/dist/app/tools/switch-mode.js +2 -2
- package/dist/app/tools/take-screenshot.js +0 -2
- package/dist/app/tools/task/runner.js +1 -2
- package/dist/app/tools/task/task.d.ts +1 -3
- package/dist/app/tools/task/task.js +20 -40
- package/dist/app/tools/web-search.js +12 -2
- package/dist/autocomplete/core.d.ts +33 -0
- package/dist/autocomplete/core.js +113 -0
- package/dist/{tui → autocomplete}/fuzzy.d.ts +0 -1
- package/dist/{tui → autocomplete}/fuzzy.js +0 -1
- package/dist/{tui/autocomplete.d.ts → autocomplete/index.d.ts} +0 -1
- package/dist/{tui/autocomplete.js → autocomplete/index.js} +62 -158
- package/dist/cli/args.js +1 -1
- package/dist/cli/list-models.js +1 -1
- package/dist/cli.js +26227 -30480
- package/dist/constants.d.ts +0 -2
- package/dist/constants.js +0 -3
- package/dist/contracts/agent-session-store.d.ts +1 -1
- package/dist/contracts/agent-settings.d.ts +1 -0
- package/dist/contracts/agent-settings.js +2 -1
- package/dist/contracts/model-call.d.ts +1 -2
- package/dist/contracts/model-call.js +1 -2
- package/dist/contracts/model-stream.d.ts +1 -0
- package/dist/contracts/model-stream.js +1 -0
- package/dist/contracts/wire.d.ts +10 -7
- package/dist/contracts/wire.js +8 -0
- package/dist/core/agent-engine.js +1 -1
- package/dist/core/core-types.d.ts +1 -21
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.js +9 -1
- package/dist/core/prompts/agent-guidelines.d.ts +4 -5
- package/dist/core/prompts/agent-guidelines.js +28 -42
- package/dist/core/session-schema.d.ts +1 -1
- package/dist/embedded-agent/ai-invoke.d.ts +1 -2
- package/dist/embedded-agent/ai-invoke.js +2 -70
- package/dist/embedded-agent/anthropic-messages-transport.d.ts +4 -20
- package/dist/embedded-agent/anthropic-messages-transport.js +23 -786
- package/dist/embedded-agent/bootstrap.js +2 -2
- package/dist/embedded-agent/compose.js +8 -7
- package/dist/embedded-agent/gateway-base-url.d.ts +3 -0
- package/dist/embedded-agent/gateway-base-url.js +35 -0
- package/dist/embedded-agent/google-vertex-transport.d.ts +2 -11
- package/dist/embedded-agent/google-vertex-transport.js +20 -117
- package/dist/embedded-agent/host-runtime-options.d.ts +0 -8
- package/dist/embedded-agent/host-runtime-options.js +10 -2
- package/dist/embedded-agent/host-tools/invoke-llm/contract.d.ts +2 -2
- package/dist/embedded-agent/host-tools/invoke-llm/contract.js +4 -2
- package/dist/embedded-agent/host-tools/sandbox-llm/contract.d.ts +8 -3
- package/dist/embedded-agent/host-tools/sandbox-llm/contract.js +12 -8
- package/dist/embedded-agent/host-tools/sandbox-llm/index.d.ts +1 -1
- package/dist/embedded-agent/host-tools/sandbox-llm/index.js +1 -1
- package/dist/embedded-agent/host-tools/shared/index.d.ts +1 -1
- package/dist/embedded-agent/host-tools/shared/index.js +1 -1
- package/dist/embedded-agent/host-tools/shared/llm-stream-error.d.ts +7 -0
- package/dist/embedded-agent/host-tools/shared/llm-stream-error.js +10 -0
- package/dist/embedded-agent/host-tools/take-screenshot/contract.d.ts +0 -2
- package/dist/embedded-agent/host-tools/take-screenshot/contract.js +1 -3
- package/dist/embedded-agent/host-tools/take-screenshot/index.d.ts +1 -1
- package/dist/embedded-agent/host-tools/take-screenshot/index.js +1 -1
- package/dist/embedded-agent/host-tools/task/agents/clone.js +1 -2
- package/dist/embedded-agent/host-tools/task/contract.js +1 -1
- package/dist/embedded-agent/index.d.ts +3 -4
- package/dist/embedded-agent/index.js +2 -3
- package/dist/embedded-agent/model-selection.d.ts +0 -6
- package/dist/embedded-agent/model-selection.js +15 -8
- package/dist/embedded-agent/openai-completions-transport.d.ts +2 -11
- package/dist/embedded-agent/openai-completions-transport.js +20 -120
- package/dist/embedded-agent/openai-responses-transport.d.ts +2 -11
- package/dist/embedded-agent/openai-responses-transport.js +15 -170
- package/dist/embedded-agent/prompt/build.js +1 -2
- package/dist/embedded-agent/prompt/sections.d.ts +1 -1
- package/dist/embedded-agent/prompt/sections.js +2 -0
- package/dist/embedded-agent/provider-native-request.d.ts +29 -0
- package/dist/embedded-agent/provider-native-request.js +65 -0
- package/dist/embedded-agent/run-stats.d.ts +1 -1
- package/dist/embedded-agent/stream.d.ts +10 -96
- package/dist/embedded-agent/stream.js +31 -556
- package/dist/embedded-agent/suggestions.d.ts +1 -1
- package/dist/embedded-agent/suggestions.js +1 -1
- package/dist/embedded-agent/worker-bridge/host-client.d.ts +7 -0
- package/dist/embedded-agent/worker-bridge/host-client.js +15 -0
- package/dist/embedded-agent/worker-bridge/worker-port.js +17 -1
- package/dist/main.js +18 -14
- package/dist/rpc/index.d.ts +1 -1
- package/dist/rpc/rpc-approval-gates.js +1 -2
- package/dist/rpc/rpc-host.d.ts +4 -0
- package/dist/rpc/rpc-host.js +13 -24
- package/dist/rpc/rpc-types.d.ts +6 -17
- package/dist/shared/platform/open.d.ts +4 -1
- package/dist/shared/platform/open.js +14 -2
- package/dist/shell/approvals/runtime-approval-gates.js +1 -3
- package/dist/shell/components/selectors/model-selector.js +2 -1
- package/dist/shell/components/selectors/session-selector-search.js +1 -1
- package/dist/shell/components/selectors/thinking-selector.js +7 -6
- package/dist/shell/index.d.ts +0 -1
- package/dist/shell/index.js +0 -1
- package/dist/shell/interactive/interactive-mode-options.d.ts +10 -0
- package/dist/shell/interactive/interactive-mode.d.ts +6 -12
- package/dist/shell/interactive/interactive-mode.js +39 -158
- package/dist/shell/interactive/slash-commands.d.ts +0 -34
- package/dist/shell/interactive/slash-commands.js +0 -2
- package/dist/shell/links/local-file-link-input.d.ts +15 -0
- package/dist/shell/links/local-file-link-input.js +38 -0
- package/dist/shell/links/local-file-link.d.ts +7 -0
- package/dist/shell/links/local-file-link.js +35 -0
- package/dist/shell/links/local-file-opener.d.ts +16 -0
- package/dist/shell/links/local-file-opener.js +90 -0
- package/dist/shell/session-client.d.ts +0 -1
- package/dist/shell/session-client.js +0 -6
- package/dist/shell/status/update-check-scheduler.d.ts +30 -0
- package/dist/shell/status/update-check-scheduler.js +71 -0
- package/dist/shell/status/update-reminder-controller.d.ts +22 -0
- package/dist/shell/status/update-reminder-controller.js +40 -0
- package/dist/shell/status/update-reminder.d.ts +6 -0
- package/dist/shell/status/update-reminder.js +4 -0
- package/dist/shell/theme/dark.json +1 -2
- package/dist/shell/theme/light.json +1 -2
- package/dist/shell/theme/runtime.d.ts +2 -3
- package/dist/shell/theme/runtime.js +2 -6
- package/dist/shell/theme/theme-schema.json +1 -6
- package/dist/shortcut-model-catalog.d.ts +7 -2
- package/dist/shortcut-model-catalog.js +134 -10
- package/dist/startup/update-manager.d.ts +6 -6
- package/dist/startup/update-manager.js +23 -38
- package/dist/startup/update-prompt.d.ts +1 -0
- package/dist/startup/update-prompt.js +2 -2
- package/dist/tui/components/editor.d.ts +1 -1
- package/dist/tui/components/editor.js +1 -1
- package/dist/tui/components/markdown.js +15 -6
- package/dist/tui/components/settings-list.js +1 -1
- package/dist/tui/editor-component.d.ts +1 -1
- package/dist/tui/index.d.ts +7 -8
- package/dist/tui/index.js +7 -6
- package/dist/tui/tui.d.ts +2 -0
- package/dist/tui/tui.js +16 -1
- package/dist/tui/utils.d.ts +7 -0
- package/dist/tui/utils.js +58 -8
- package/native-app/main/index.js +3200 -48
- package/native-app/main/{photon_rs-SoVDgheu.js → photon_rs-XkYyYTVA.js} +2 -2
- package/native-app/package.json +1 -1
- package/native-app/preload/index.cjs +2 -0
- package/native-app/renderer/assets/{index-CFc-oZuS.js → index-B4jz6epR.js} +825 -155
- package/native-app/renderer/assets/{index-OhGE0UY4.css → index-C__g36ft.css} +412 -162
- package/native-app/renderer/assets/shortcutagent-DxFsGSkw.png +0 -0
- package/native-app/renderer/index.html +2 -2
- package/package.json +17 -3
- package/skills/add-custom-model/SKILL.md +52 -0
- package/user-docs/dist/index.html +1 -1
- package/user-docs/dist/shortcutxl-docs.pdf +0 -0
- package/xll/ShortcutXL.xll +0 -0
- package/xll/modules/shortcut_xl/_managed.py +26 -7
- package/xll/modules/shortcut_xl/_tracking.py +141 -251
- package/xll/modules/shortcut_xl/api/__init__.py +60 -0
- package/xll/modules/shortcut_xl/api/workbook.py +9 -1
- package/xll/modules/shortcut_xl/api/worksheet.py +4 -1
- package/xll/python/Lib/site-packages/httpx-0.28.1.dist-info/RECORD +1 -1
- package/xll/python/Lib/site-packages/idna-3.18.dist-info/RECORD +1 -1
- package/xll/python/Lib/site-packages/pip/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/build_env/__init__.py +25 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/base.py +103 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/installer.py +333 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/noop.py +42 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/venv.py +145 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/virtual.py +139 -0
- package/xll/python/Lib/site-packages/pip/_internal/cache.py +4 -1
- package/xll/python/Lib/site-packages/pip/_internal/cli/autocompletion.py +4 -1
- package/xll/python/Lib/site-packages/pip/_internal/cli/base_command.py +11 -14
- package/xll/python/Lib/site-packages/pip/_internal/cli/cmdoptions.py +133 -22
- package/xll/python/Lib/site-packages/pip/_internal/cli/index_command.py +11 -6
- package/xll/python/Lib/site-packages/pip/_internal/cli/main.py +2 -1
- package/xll/python/Lib/site-packages/pip/_internal/cli/main_parser.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/cli/parser.py +10 -2
- package/xll/python/Lib/site-packages/pip/_internal/cli/progress_bars.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/cli/req_command.py +57 -25
- package/xll/python/Lib/site-packages/pip/_internal/cli/status_codes.py +1 -0
- package/xll/python/Lib/site-packages/pip/_internal/commands/cache.py +7 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/configuration.py +2 -1
- package/xll/python/Lib/site-packages/pip/_internal/commands/debug.py +4 -5
- package/xll/python/Lib/site-packages/pip/_internal/commands/download.py +4 -0
- package/xll/python/Lib/site-packages/pip/_internal/commands/freeze.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/commands/index.py +10 -3
- package/xll/python/Lib/site-packages/pip/_internal/commands/inspect.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/commands/install.py +6 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/list.py +11 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/lock.py +4 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/show.py +14 -8
- package/xll/python/Lib/site-packages/pip/_internal/commands/wheel.py +7 -1
- package/xll/python/Lib/site-packages/pip/_internal/configuration.py +2 -3
- package/xll/python/Lib/site-packages/pip/_internal/distributions/base.py +5 -3
- package/xll/python/Lib/site-packages/pip/_internal/distributions/installed.py +3 -2
- package/xll/python/Lib/site-packages/pip/_internal/distributions/sdist.py +45 -20
- package/xll/python/Lib/site-packages/pip/_internal/distributions/wheel.py +3 -2
- package/xll/python/Lib/site-packages/pip/_internal/exceptions.py +174 -0
- package/xll/python/Lib/site-packages/pip/_internal/index/collector.py +70 -48
- package/xll/python/Lib/site-packages/pip/_internal/index/package_finder.py +46 -7
- package/xll/python/Lib/site-packages/pip/_internal/index/sources.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/locations/_sysconfig.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/locations/base.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/metadata/base.py +10 -5
- package/xll/python/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +8 -3
- package/xll/python/Lib/site-packages/pip/_internal/models/candidate.py +5 -1
- package/xll/python/Lib/site-packages/pip/_internal/models/link.py +53 -13
- package/xll/python/Lib/site-packages/pip/_internal/network/auth.py +38 -21
- package/xll/python/Lib/site-packages/pip/_internal/network/cache.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/network/download.py +58 -11
- package/xll/python/Lib/site-packages/pip/_internal/network/session.py +35 -40
- package/xll/python/Lib/site-packages/pip/_internal/network/utils.py +109 -1
- package/xll/python/Lib/site-packages/pip/_internal/operations/check.py +2 -3
- package/xll/python/Lib/site-packages/pip/_internal/operations/install/wheel.py +23 -18
- package/xll/python/Lib/site-packages/pip/_internal/operations/prepare.py +152 -7
- package/xll/python/Lib/site-packages/pip/_internal/req/__init__.py +2 -0
- package/xll/python/Lib/site-packages/pip/_internal/req/constructors.py +54 -69
- package/xll/python/Lib/site-packages/pip/_internal/req/req_file.py +6 -6
- package/xll/python/Lib/site-packages/pip/_internal/req/req_install.py +25 -21
- package/xll/python/Lib/site-packages/pip/_internal/req/req_uninstall.py +13 -8
- package/xll/python/Lib/site-packages/pip/_internal/resolution/base.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -1
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +39 -52
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +3 -3
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +3 -0
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +9 -0
- package/xll/python/Lib/site-packages/pip/_internal/utils/compat.py +15 -9
- package/xll/python/Lib/site-packages/pip/_internal/utils/deprecation.py +6 -1
- package/xll/python/Lib/site-packages/pip/_internal/utils/filesystem.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/logging.py +11 -3
- package/xll/python/Lib/site-packages/pip/_internal/utils/misc.py +48 -4
- package/xll/python/Lib/site-packages/pip/_internal/utils/pylock.py +18 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/retry.py +2 -1
- package/xll/python/Lib/site-packages/pip/_internal/utils/subprocess.py +4 -3
- package/xll/python/Lib/site-packages/pip/_internal/utils/temp_dir.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/unpacking.py +30 -4
- package/xll/python/Lib/site-packages/pip/_internal/utils/urls.py +5 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/virtualenv.py +2 -36
- package/xll/python/Lib/site-packages/pip/_internal/vcs/git.py +8 -5
- package/xll/python/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/wheel_builder.py +5 -1
- package/xll/python/Lib/site-packages/pip/_vendor/bom.cdx.json +231 -0
- package/xll/python/Lib/site-packages/pip/_vendor/certifi/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/certifi/cacert.pem +0 -631
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/compat.py +34 -64
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/resources.py +28 -14
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/scripts.py +7 -3
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/util.py +48 -11
- package/xll/python/Lib/site-packages/pip/_vendor/idna/LICENSE.md +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/idna/__main__.py +6 -0
- package/xll/python/Lib/site-packages/pip/_vendor/idna/cli.py +128 -0
- package/xll/python/Lib/site-packages/pip/_vendor/idna/codec.py +50 -13
- package/xll/python/Lib/site-packages/pip/_vendor/idna/compat.py +26 -0
- package/xll/python/Lib/site-packages/pip/_vendor/idna/core.py +352 -141
- package/xll/python/Lib/site-packages/pip/_vendor/idna/idnadata.py +571 -2983
- package/xll/python/Lib/site-packages/pip/_vendor/idna/intranges.py +5 -7
- package/xll/python/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/idna/uts46data.py +16887 -8832
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +352 -66
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +11 -0
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/_xdg.py +171 -0
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/android.py +92 -41
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/api.py +213 -49
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/macos.py +128 -51
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/unix.py +176 -127
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/version.py +8 -18
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/windows.py +185 -68
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/__init__.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/__main__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/console.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/filter.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +10 -8
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/formatter.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexer.py +7 -5
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +9 -8
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +35 -32
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/modeline.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/plugin.py +3 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/regexopt.py +13 -2
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/scanner.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/style.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/token.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/unistring.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/util.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/__init__.py +52 -16
- package/xll/python/Lib/site-packages/pip/_vendor/requests/__version__.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/_types.py +183 -0
- package/xll/python/Lib/site-packages/pip/_vendor/requests/adapters.py +101 -50
- package/xll/python/Lib/site-packages/pip/_vendor/requests/api.py +31 -8
- package/xll/python/Lib/site-packages/pip/_vendor/requests/auth.py +80 -40
- package/xll/python/Lib/site-packages/pip/_vendor/requests/compat.py +9 -3
- package/xll/python/Lib/site-packages/pip/_vendor/requests/cookies.py +143 -79
- package/xll/python/Lib/site-packages/pip/_vendor/requests/exceptions.py +15 -5
- package/xll/python/Lib/site-packages/pip/_vendor/requests/help.py +13 -10
- package/xll/python/Lib/site-packages/pip/_vendor/requests/hooks.py +23 -9
- package/xll/python/Lib/site-packages/pip/_vendor/requests/models.py +265 -126
- package/xll/python/Lib/site-packages/pip/_vendor/requests/py.typed +0 -0
- package/xll/python/Lib/site-packages/pip/_vendor/requests/sessions.py +164 -78
- package/xll/python/Lib/site-packages/pip/_vendor/requests/status_codes.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/structures.py +51 -20
- package/xll/python/Lib/site-packages/pip/_vendor/requests/utils.py +161 -89
- package/xll/python/Lib/site-packages/pip/_vendor/tomli/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/tomli/_parser.py +9 -4
- package/xll/python/Lib/site-packages/pip/_vendor/tomli/_re.py +13 -9
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_base_connection.py +3 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_collections.py +0 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_version.py +8 -18
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/connection.py +4 -4
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +23 -10
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/emscripten/response.py +5 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +7 -8
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/fields.py +14 -14
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +8 -6
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/response.py +35 -22
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +8 -0
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +11 -61
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +5 -11
- package/xll/python/Lib/site-packages/pip/_vendor/vendor.txt +8 -8
- package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/METADATA +3 -2
- package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/RECORD +208 -188
- package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/AUTHORS.txt +20 -0
- package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/idna/LICENSE.md +1 -1
- package/xll/python/Lib/site-packages/pywin32-311.dist-info/RECORD +2 -2
- package/xll/python/Scripts/httpx.exe +0 -0
- package/xll/python/Scripts/idna.exe +0 -0
- package/xll/python/Scripts/pip.exe +0 -0
- package/xll/python/Scripts/pip3.13.exe +0 -0
- package/xll/python/Scripts/pip3.exe +0 -0
- package/xll/python/Scripts/pywin32_postinstall.exe +0 -0
- package/xll/python/Scripts/pywin32_testall.exe +0 -0
- package/dist/app/collab/awareness.d.ts +0 -32
- package/dist/app/collab/awareness.js +0 -52
- package/dist/app/collab/collab-client.d.ts +0 -37
- package/dist/app/collab/collab-client.js +0 -208
- package/dist/app/collab/collab-manager.d.ts +0 -91
- package/dist/app/collab/collab-manager.js +0 -218
- package/dist/app/collab/collab-sync.d.ts +0 -62
- package/dist/app/collab/collab-sync.js +0 -215
- package/dist/app/collab/index.d.ts +0 -9
- package/dist/app/collab/index.js +0 -6
- package/dist/app/collab/super-fight.d.ts +0 -90
- package/dist/app/collab/super-fight.js +0 -310
- package/dist/app/collab/sync-bridge.d.ts +0 -35
- package/dist/app/collab/sync-bridge.js +0 -109
- package/dist/app/collab/types.d.ts +0 -75
- package/dist/app/collab/types.js +0 -5
- package/dist/embedded-agent/ai-content.d.ts +0 -52
- package/dist/embedded-agent/ai-content.js +0 -101
- package/dist/embedded-agent/host-tools/shared/llm-stream.d.ts +0 -31
- package/dist/embedded-agent/host-tools/shared/llm-stream.js +0 -136
- package/dist/embedded-agent/model-call-orchestrator.d.ts +0 -22
- package/dist/embedded-agent/model-call-orchestrator.js +0 -22
- package/dist/embedded-agent/stream-errors.d.ts +0 -10
- package/dist/embedded-agent/stream-errors.js +0 -73
- package/dist/embedded-agent/stream-message-state.d.ts +0 -14
- package/dist/embedded-agent/stream-message-state.js +0 -271
- package/dist/embedded-agent/stream-sse.d.ts +0 -78
- package/dist/embedded-agent/stream-sse.js +0 -73
- package/dist/shell/approvals/task-spawn-approval.d.ts +0 -20
- package/dist/shell/approvals/task-spawn-approval.js +0 -93
- package/dist/shell/interactive/collab-command.d.ts +0 -9
- package/dist/shell/interactive/collab-command.js +0 -115
- package/dist/shell/interactive/super-fight-ui.d.ts +0 -80
- package/dist/shell/interactive/super-fight-ui.js +0 -484
- package/dist/shell/status/collab-status.d.ts +0 -18
- package/dist/shell/status/collab-status.js +0 -46
- package/xll/python/Lib/site-packages/pip/_internal/build_env.py +0 -606
- /package/dist/{tui → autocomplete}/skill-autocomplete.js +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/INSTALLER +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/REQUESTED +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/WHEEL +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/entry_points.txt +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/LICENSE.txt +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/certifi/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/distlib/LICENSE.txt +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/distro/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/msgpack/COPYING +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/packaging/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/packaging/LICENSE.BSD +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/pkg_resources/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/platformdirs/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/pygments/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/requests/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/resolvelib/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/rich/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/tomli/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/tomli_w/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/truststore/LICENSE +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/urllib3/LICENSE.txt +0 -0
package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py
CHANGED
|
@@ -11,8 +11,8 @@ something.
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
13
|
import logging
|
|
14
|
-
from collections.abc import Iterator, Sequence
|
|
15
|
-
from typing import Any
|
|
14
|
+
from collections.abc import Callable, Iterator, Sequence
|
|
15
|
+
from typing import Any
|
|
16
16
|
|
|
17
17
|
from pip._vendor.packaging.version import _BaseVersion
|
|
18
18
|
|
|
@@ -22,7 +22,7 @@ from .base import Candidate
|
|
|
22
22
|
|
|
23
23
|
logger = logging.getLogger(__name__)
|
|
24
24
|
|
|
25
|
-
IndexCandidateInfo = tuple[_BaseVersion, Callable[[],
|
|
25
|
+
IndexCandidateInfo = tuple[_BaseVersion, Callable[[], Candidate | None]]
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]:
|
|
@@ -84,6 +84,7 @@ class PipProvider(_ProviderBase):
|
|
|
84
84
|
:params constraints: A mapping of constraints specified by the user. Keys
|
|
85
85
|
are canonicalized project names.
|
|
86
86
|
:params ignore_dependencies: Whether the user specified ``--no-deps``.
|
|
87
|
+
:params only_dependencies: Whether the user specified ``--only-deps``.
|
|
87
88
|
:params upgrade_strategy: The user-specified upgrade strategy.
|
|
88
89
|
:params user_requested: A set of canonicalized package names that the user
|
|
89
90
|
supplied for pip to install/upgrade.
|
|
@@ -94,12 +95,14 @@ class PipProvider(_ProviderBase):
|
|
|
94
95
|
factory: Factory,
|
|
95
96
|
constraints: dict[str, Constraint],
|
|
96
97
|
ignore_dependencies: bool,
|
|
98
|
+
only_dependencies: bool,
|
|
97
99
|
upgrade_strategy: str,
|
|
98
100
|
user_requested: dict[str, int],
|
|
99
101
|
) -> None:
|
|
100
102
|
self._factory = factory
|
|
101
103
|
self._constraints = constraints
|
|
102
104
|
self._ignore_dependencies = ignore_dependencies
|
|
105
|
+
self._only_dependencies = only_dependencies
|
|
103
106
|
self._upgrade_strategy = upgrade_strategy
|
|
104
107
|
self._user_requested = user_requested
|
|
105
108
|
self._conflict_counts: defaultdict[str, int] = defaultdict(int)
|
|
@@ -49,6 +49,7 @@ class Resolver(BaseResolver):
|
|
|
49
49
|
make_install_req: InstallRequirementProvider,
|
|
50
50
|
use_user_site: bool,
|
|
51
51
|
ignore_dependencies: bool,
|
|
52
|
+
only_dependencies: bool,
|
|
52
53
|
ignore_installed: bool,
|
|
53
54
|
ignore_requires_python: bool,
|
|
54
55
|
force_reinstall: bool,
|
|
@@ -57,6 +58,7 @@ class Resolver(BaseResolver):
|
|
|
57
58
|
):
|
|
58
59
|
super().__init__()
|
|
59
60
|
assert upgrade_strategy in self._allowed_strategies
|
|
61
|
+
assert not (ignore_dependencies and only_dependencies)
|
|
60
62
|
|
|
61
63
|
self.factory = Factory(
|
|
62
64
|
finder=finder,
|
|
@@ -70,6 +72,7 @@ class Resolver(BaseResolver):
|
|
|
70
72
|
py_version_info=py_version_info,
|
|
71
73
|
)
|
|
72
74
|
self.ignore_dependencies = ignore_dependencies
|
|
75
|
+
self.only_dependencies = only_dependencies
|
|
73
76
|
self.upgrade_strategy = upgrade_strategy
|
|
74
77
|
self._result: Result | None = None
|
|
75
78
|
|
|
@@ -81,6 +84,7 @@ class Resolver(BaseResolver):
|
|
|
81
84
|
factory=self.factory,
|
|
82
85
|
constraints=collected.constraints,
|
|
83
86
|
ignore_dependencies=self.ignore_dependencies,
|
|
87
|
+
only_dependencies=self.only_dependencies,
|
|
84
88
|
upgrade_strategy=self.upgrade_strategy,
|
|
85
89
|
user_requested=collected.user_requested,
|
|
86
90
|
)
|
|
@@ -181,6 +185,11 @@ class Resolver(BaseResolver):
|
|
|
181
185
|
|
|
182
186
|
req_set.add_named_requirement(ireq)
|
|
183
187
|
|
|
188
|
+
if self.only_dependencies:
|
|
189
|
+
for requested in collected.user_requested:
|
|
190
|
+
project_name = requested.partition("[")[0]
|
|
191
|
+
req_set.requirements.pop(project_name, None)
|
|
192
|
+
|
|
184
193
|
return req_set
|
|
185
194
|
|
|
186
195
|
def get_installation_order(
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
distributions."""
|
|
3
3
|
|
|
4
4
|
import importlib.resources
|
|
5
|
+
import locale
|
|
5
6
|
import logging
|
|
6
7
|
import os
|
|
7
8
|
import sys
|
|
8
9
|
from typing import IO
|
|
9
10
|
|
|
10
|
-
__all__ = ["
|
|
11
|
+
__all__ = ["get_locale_encoding", "get_path_uid", "tomllib", "WINDOWS"]
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
@@ -26,6 +27,19 @@ def has_tls() -> bool:
|
|
|
26
27
|
return IS_PYOPENSSL
|
|
27
28
|
|
|
28
29
|
|
|
30
|
+
def get_locale_encoding() -> str:
|
|
31
|
+
"""Return the locale encoding.
|
|
32
|
+
|
|
33
|
+
Uses ``locale.getencoding()`` when available (Python 3.11+) to avoid the
|
|
34
|
+
``EncodingWarning`` that ``locale.getpreferredencoding(False)`` raises
|
|
35
|
+
under UTF-8 Mode.
|
|
36
|
+
"""
|
|
37
|
+
# TODO: Remove the 3.10 fallback once pip drops Python 3.10 support.
|
|
38
|
+
if sys.version_info >= (3, 11):
|
|
39
|
+
return locale.getencoding()
|
|
40
|
+
return locale.getpreferredencoding(False)
|
|
41
|
+
|
|
42
|
+
|
|
29
43
|
def get_path_uid(path: str) -> int:
|
|
30
44
|
"""
|
|
31
45
|
Return path's uid.
|
|
@@ -73,13 +87,5 @@ else:
|
|
|
73
87
|
from pip._vendor import tomli as tomllib
|
|
74
88
|
|
|
75
89
|
|
|
76
|
-
# packages in the stdlib that may have installation metadata, but should not be
|
|
77
|
-
# considered 'installed'. this theoretically could be determined based on
|
|
78
|
-
# dist.location (py27:`sysconfig.get_paths()['stdlib']`,
|
|
79
|
-
# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may
|
|
80
|
-
# make this ineffective, so hard-coding
|
|
81
|
-
stdlib_pkgs = {"python", "wsgiref", "argparse"}
|
|
82
|
-
|
|
83
|
-
|
|
84
90
|
# windows detection, covers cpython and ironpython
|
|
85
91
|
WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt")
|
|
@@ -5,6 +5,7 @@ A module that implements tooling to enable easy warnings about deprecations.
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
import logging
|
|
8
|
+
import os
|
|
8
9
|
import warnings
|
|
9
10
|
from typing import Any, TextIO
|
|
10
11
|
|
|
@@ -48,7 +49,11 @@ def _showwarning(
|
|
|
48
49
|
|
|
49
50
|
def install_warning_logger() -> None:
|
|
50
51
|
# Enable our Deprecation Warnings
|
|
51
|
-
|
|
52
|
+
# If we're running pip test suite, promote the PipDeprecationWarning into errors.
|
|
53
|
+
if os.environ.get("_PIP_TEST_ENV", None):
|
|
54
|
+
warnings.simplefilter("error", PipDeprecationWarning)
|
|
55
|
+
else:
|
|
56
|
+
warnings.simplefilter("default", PipDeprecationWarning, append=True)
|
|
52
57
|
|
|
53
58
|
global _original_showwarning
|
|
54
59
|
|
|
@@ -5,11 +5,11 @@ import os
|
|
|
5
5
|
import os.path
|
|
6
6
|
import random
|
|
7
7
|
import sys
|
|
8
|
-
from collections.abc import Generator
|
|
8
|
+
from collections.abc import Callable, Generator
|
|
9
9
|
from contextlib import contextmanager
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from tempfile import NamedTemporaryFile
|
|
12
|
-
from typing import Any, BinaryIO,
|
|
12
|
+
from typing import Any, BinaryIO, cast
|
|
13
13
|
|
|
14
14
|
from pip._internal.utils.compat import get_path_uid
|
|
15
15
|
from pip._internal.utils.misc import format_size
|
|
@@ -29,7 +29,7 @@ from pip._vendor.rich.style import Style
|
|
|
29
29
|
from pip._internal.utils._log import VERBOSE, getLogger
|
|
30
30
|
from pip._internal.utils.compat import WINDOWS
|
|
31
31
|
from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX
|
|
32
|
-
from pip._internal.utils.misc import StreamWrapper, ensure_dir
|
|
32
|
+
from pip._internal.utils.misc import StreamWrapper, ensure_dir, looks_like_ci
|
|
33
33
|
|
|
34
34
|
_log_state = threading.local()
|
|
35
35
|
_stdout_console = None
|
|
@@ -320,8 +320,16 @@ def setup_logging(verbosity: int, no_color: bool, user_log_file: str | None) ->
|
|
|
320
320
|
["user_log"] if include_user_log else []
|
|
321
321
|
)
|
|
322
322
|
global _stdout_console, stderr_console
|
|
323
|
-
|
|
324
|
-
|
|
323
|
+
console_options: dict[str, Any] = {"no_color": no_color, "soft_wrap": True}
|
|
324
|
+
if looks_like_ci():
|
|
325
|
+
# Don't animate progress bars and status spinners when running
|
|
326
|
+
# in CI. A lot of CI workflows use FORCE_COLOR and similar envvars
|
|
327
|
+
# so their CI output remains colorized, but this causes rich to
|
|
328
|
+
# assume a fully interactive terminal, resulting in any animated
|
|
329
|
+
# output to span many lines which is distracting (and unhelpful).
|
|
330
|
+
console_options["force_interactive"] = False
|
|
331
|
+
_stdout_console = PipConsole(file=sys.stdout, **console_options)
|
|
332
|
+
_stderr_console = PipConsole(file=sys.stderr, **console_options)
|
|
325
333
|
|
|
326
334
|
logging.config.dictConfig(
|
|
327
335
|
{
|
|
@@ -5,13 +5,14 @@ import getpass
|
|
|
5
5
|
import hashlib
|
|
6
6
|
import logging
|
|
7
7
|
import os
|
|
8
|
+
import pathlib
|
|
8
9
|
import posixpath
|
|
9
10
|
import shutil
|
|
10
11
|
import stat
|
|
11
12
|
import sys
|
|
12
13
|
import sysconfig
|
|
13
14
|
import urllib.parse
|
|
14
|
-
from collections.abc import Generator, Iterable, Iterator, Mapping, Sequence
|
|
15
|
+
from collections.abc import Callable, Generator, Iterable, Iterator, Mapping, Sequence
|
|
15
16
|
from dataclasses import dataclass
|
|
16
17
|
from functools import partial
|
|
17
18
|
from io import StringIO
|
|
@@ -21,8 +22,6 @@ from types import FunctionType, TracebackType
|
|
|
21
22
|
from typing import (
|
|
22
23
|
Any,
|
|
23
24
|
BinaryIO,
|
|
24
|
-
Callable,
|
|
25
|
-
Optional,
|
|
26
25
|
TextIO,
|
|
27
26
|
TypeVar,
|
|
28
27
|
cast,
|
|
@@ -31,6 +30,7 @@ from typing import (
|
|
|
31
30
|
from pip._vendor.packaging.requirements import Requirement
|
|
32
31
|
from pip._vendor.pyproject_hooks import BuildBackendHookCaller
|
|
33
32
|
|
|
33
|
+
from pip import __file__ as pip_location
|
|
34
34
|
from pip import __version__
|
|
35
35
|
from pip._internal.exceptions import CommandError, ExternallyManagedEnvironment
|
|
36
36
|
from pip._internal.locations import get_major_minor_version
|
|
@@ -52,6 +52,7 @@ __all__ = [
|
|
|
52
52
|
"ensure_dir",
|
|
53
53
|
"remove_auth_from_url",
|
|
54
54
|
"check_externally_managed",
|
|
55
|
+
"looks_like_ci",
|
|
55
56
|
"ConfiguredBuildBackendHookCaller",
|
|
56
57
|
]
|
|
57
58
|
|
|
@@ -60,11 +61,28 @@ logger = logging.getLogger(__name__)
|
|
|
60
61
|
T = TypeVar("T")
|
|
61
62
|
ExcInfo = tuple[type[BaseException], BaseException, TracebackType]
|
|
62
63
|
VersionInfo = tuple[int, int, int]
|
|
63
|
-
NetlocTuple = tuple[str, tuple[
|
|
64
|
+
NetlocTuple = tuple[str, tuple[str | None, str | None]]
|
|
64
65
|
OnExc = Callable[[FunctionType, Path, BaseException], Any]
|
|
65
66
|
OnErr = Callable[[FunctionType, Path, ExcInfo], Any]
|
|
66
67
|
|
|
67
68
|
FILE_CHUNK_SIZE = 1024 * 1024
|
|
69
|
+
# These are environment variables present when running under various
|
|
70
|
+
# CI systems. For each variable, some CI systems that use the variable
|
|
71
|
+
# are indicated. The collection was chosen so that for each of a number
|
|
72
|
+
# of popular systems, at least one of the environment variables is used.
|
|
73
|
+
# This list is used to provide some indication of and lower bound for
|
|
74
|
+
# CI traffic to PyPI. Thus, it is okay if the list is not comprehensive.
|
|
75
|
+
# For more background, see: https://github.com/pypa/pip/issues/5499
|
|
76
|
+
CI_ENVIRONMENT_VARIABLES = (
|
|
77
|
+
# Azure Pipelines
|
|
78
|
+
"BUILD_BUILDID",
|
|
79
|
+
# Jenkins
|
|
80
|
+
"BUILD_ID",
|
|
81
|
+
# AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI
|
|
82
|
+
"CI",
|
|
83
|
+
# Explicit environment variable.
|
|
84
|
+
"PIP_IS_CI",
|
|
85
|
+
)
|
|
68
86
|
|
|
69
87
|
|
|
70
88
|
def get_pip_version() -> str:
|
|
@@ -74,6 +92,22 @@ def get_pip_version() -> str:
|
|
|
74
92
|
return f"pip {__version__} from {pip_pkg_dir} (python {get_major_minor_version()})"
|
|
75
93
|
|
|
76
94
|
|
|
95
|
+
def get_runnable_pip() -> str:
|
|
96
|
+
"""Get a file to pass to a Python executable, to run the currently-running pip.
|
|
97
|
+
|
|
98
|
+
This is used to run a pip subprocess, for installing requirements into the build
|
|
99
|
+
environment.
|
|
100
|
+
"""
|
|
101
|
+
source = pathlib.Path(pip_location).resolve().parent
|
|
102
|
+
|
|
103
|
+
if not source.is_dir():
|
|
104
|
+
# This would happen if someone is using pip from inside a zip file. In that
|
|
105
|
+
# case, we can use that directly.
|
|
106
|
+
return str(source)
|
|
107
|
+
|
|
108
|
+
return os.fsdecode(source / "__pip-runner__.py")
|
|
109
|
+
|
|
110
|
+
|
|
77
111
|
def normalize_version_info(py_version_info: tuple[int, ...]) -> tuple[int, int, int]:
|
|
78
112
|
"""
|
|
79
113
|
Convert a tuple of ints representing a Python version to one of length
|
|
@@ -769,3 +803,13 @@ def warn_if_run_as_root() -> None:
|
|
|
769
803
|
"Use the --root-user-action option if you know what you are doing and "
|
|
770
804
|
"want to suppress this warning."
|
|
771
805
|
)
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
def looks_like_ci() -> bool:
|
|
809
|
+
"""
|
|
810
|
+
Return whether it looks like pip is running under CI.
|
|
811
|
+
"""
|
|
812
|
+
# We don't use the method of checking for a tty (e.g. using isatty())
|
|
813
|
+
# because some CI systems mimic a tty (e.g. Travis CI). Thus that
|
|
814
|
+
# method doesn't provide definitive information in either direction.
|
|
815
|
+
return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES)
|
|
@@ -19,7 +19,7 @@ from pip._vendor.packaging.pylock import (
|
|
|
19
19
|
)
|
|
20
20
|
from pip._vendor.packaging.version import Version
|
|
21
21
|
|
|
22
|
-
from pip._internal.exceptions import InstallationError
|
|
22
|
+
from pip._internal.exceptions import DiagnosticPipError, InstallationError
|
|
23
23
|
from pip._internal.models.link import Link
|
|
24
24
|
from pip._internal.utils.compat import tomllib
|
|
25
25
|
from pip._internal.utils.urls import path_to_url, url_to_path
|
|
@@ -156,7 +156,19 @@ def _package_dist_url(
|
|
|
156
156
|
if not os.path.isabs(path):
|
|
157
157
|
# relative path, join to pylock location
|
|
158
158
|
if _is_url(pylock_path_or_url):
|
|
159
|
-
|
|
159
|
+
dist_url = urljoin(pylock_path_or_url, path)
|
|
160
|
+
# os.path.isabs does not treat a scheme-carrying value like
|
|
161
|
+
# "file:..." as absolute, so it reaches here and urljoin honors
|
|
162
|
+
# its scheme, discarding the pylock base. Only keep the result
|
|
163
|
+
# if its scheme and host still match the lock's own.
|
|
164
|
+
base = urlsplit(pylock_path_or_url)
|
|
165
|
+
target = urlsplit(dist_url)
|
|
166
|
+
if (target.scheme, target.netloc) != (base.scheme, base.netloc):
|
|
167
|
+
raise InstallationError(
|
|
168
|
+
f"Path {path!r} in pylock file obtained from a URL "
|
|
169
|
+
f"resolves outside its location: {pylock_path_or_url!r}"
|
|
170
|
+
)
|
|
171
|
+
return dist_url
|
|
160
172
|
else:
|
|
161
173
|
return path_to_url(
|
|
162
174
|
os.path.join(os.path.dirname(pylock_path_or_url), path)
|
|
@@ -263,6 +275,8 @@ def select_from_pylock_path_or_url(
|
|
|
263
275
|
]:
|
|
264
276
|
try:
|
|
265
277
|
pylock_content = _get_pylock_path_or_url_content(pylock_path_or_url, session)
|
|
278
|
+
except DiagnosticPipError:
|
|
279
|
+
raise
|
|
266
280
|
except Exception as exc:
|
|
267
281
|
raise InstallationError(
|
|
268
282
|
f"Error reading pylock file {pylock_path_or_url!r}: {exc}"
|
|
@@ -276,6 +290,8 @@ def select_from_pylock_path_or_url(
|
|
|
276
290
|
) from exc
|
|
277
291
|
|
|
278
292
|
try:
|
|
293
|
+
# TODO: for completeness, pylock.select should support preferring sdist
|
|
294
|
+
# over wheels to support --no-binary
|
|
279
295
|
yield from lock.select()
|
|
280
296
|
except Exception as exc:
|
|
281
297
|
raise InstallationError(
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import functools
|
|
4
|
+
from collections.abc import Callable
|
|
4
5
|
from time import perf_counter, sleep
|
|
5
|
-
from typing import TYPE_CHECKING,
|
|
6
|
+
from typing import TYPE_CHECKING, TypeVar
|
|
6
7
|
|
|
7
8
|
if TYPE_CHECKING:
|
|
8
9
|
from typing_extensions import ParamSpec
|
|
@@ -4,8 +4,8 @@ import logging
|
|
|
4
4
|
import os
|
|
5
5
|
import shlex
|
|
6
6
|
import subprocess
|
|
7
|
-
from collections.abc import Iterable, Mapping
|
|
8
|
-
from typing import Any,
|
|
7
|
+
from collections.abc import Callable, Iterable, Mapping
|
|
8
|
+
from typing import Any, Literal
|
|
9
9
|
|
|
10
10
|
from pip._vendor.rich.markup import escape
|
|
11
11
|
|
|
@@ -14,7 +14,7 @@ from pip._internal.exceptions import InstallationSubprocessError
|
|
|
14
14
|
from pip._internal.utils.logging import VERBOSE, subprocess_logger
|
|
15
15
|
from pip._internal.utils.misc import HiddenText
|
|
16
16
|
|
|
17
|
-
CommandArgs = list[
|
|
17
|
+
CommandArgs = list[str | HiddenText]
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def make_command(*args: str | HiddenText | CommandArgs) -> CommandArgs:
|
|
@@ -134,6 +134,7 @@ def call_subprocess(
|
|
|
134
134
|
stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE,
|
|
135
135
|
cwd=cwd,
|
|
136
136
|
env=env,
|
|
137
|
+
encoding="locale",
|
|
137
138
|
errors="backslashreplace",
|
|
138
139
|
)
|
|
139
140
|
except Exception as exc:
|
|
@@ -6,12 +6,11 @@ import logging
|
|
|
6
6
|
import os.path
|
|
7
7
|
import tempfile
|
|
8
8
|
import traceback
|
|
9
|
-
from collections.abc import Generator
|
|
9
|
+
from collections.abc import Callable, Generator
|
|
10
10
|
from contextlib import ExitStack, contextmanager
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
from typing import (
|
|
13
13
|
Any,
|
|
14
|
-
Callable,
|
|
15
14
|
TypeVar,
|
|
16
15
|
)
|
|
17
16
|
|
|
@@ -76,13 +76,22 @@ def has_leading_dir(paths: Iterable[str]) -> bool:
|
|
|
76
76
|
return True
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
def is_within_directory(
|
|
79
|
+
def is_within_directory(
|
|
80
|
+
directory: str, target: str, *, resolve_symlinks: bool = False
|
|
81
|
+
) -> bool:
|
|
80
82
|
"""
|
|
81
83
|
Return true if the absolute path of target is within the directory
|
|
82
84
|
(including when target is equal to the directory).
|
|
85
|
+
|
|
86
|
+
When ``resolve_symlinks`` is true, resolve symlinks before comparing so
|
|
87
|
+
traversal through a symlink (e.g. "link/../file") is also caught.
|
|
83
88
|
"""
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
if resolve_symlinks:
|
|
90
|
+
abs_directory = os.path.realpath(directory)
|
|
91
|
+
abs_target = os.path.realpath(target)
|
|
92
|
+
else:
|
|
93
|
+
abs_directory = os.path.abspath(directory)
|
|
94
|
+
abs_target = os.path.abspath(target)
|
|
86
95
|
|
|
87
96
|
return abs_target == abs_directory or abs_target.startswith(abs_directory + os.sep)
|
|
88
97
|
|
|
@@ -277,7 +286,13 @@ def _untar_without_filter(
|
|
|
277
286
|
if leading:
|
|
278
287
|
fn = split_leading_dir(fn)[1]
|
|
279
288
|
path = os.path.join(location, fn)
|
|
280
|
-
|
|
289
|
+
|
|
290
|
+
# The plain check rejects textual ".." escapes; resolving symlinks also
|
|
291
|
+
# catches a later member redirected outside by an earlier member's
|
|
292
|
+
# symlink (e.g. "link/../file").
|
|
293
|
+
if not is_within_directory(location, path) or not is_within_directory(
|
|
294
|
+
location, path, resolve_symlinks=True
|
|
295
|
+
):
|
|
281
296
|
message = (
|
|
282
297
|
"The tar file ({}) has a file ({}) trying to install "
|
|
283
298
|
"outside target directory ({})"
|
|
@@ -286,6 +301,17 @@ def _untar_without_filter(
|
|
|
286
301
|
if member.isdir():
|
|
287
302
|
ensure_dir(path)
|
|
288
303
|
elif member.issym():
|
|
304
|
+
# Reject symlinks resolving outside the destination, so a later
|
|
305
|
+
# member cannot be written through them.
|
|
306
|
+
target = os.path.join(os.path.dirname(path), member.linkname)
|
|
307
|
+
if not is_within_directory(location, target, resolve_symlinks=True):
|
|
308
|
+
message = (
|
|
309
|
+
"The tar file ({}) has a file ({}) trying to install "
|
|
310
|
+
"outside target directory ({})"
|
|
311
|
+
)
|
|
312
|
+
raise InstallationError(
|
|
313
|
+
message.format(filename, member.name, member.linkname)
|
|
314
|
+
)
|
|
289
315
|
if not is_symlink_target_in_tar(tar, member):
|
|
290
316
|
message = (
|
|
291
317
|
"The tar file ({}) has a file ({}) trying to install "
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import string
|
|
3
|
-
import urllib.parse
|
|
4
|
-
import urllib.request
|
|
3
|
+
import urllib.parse # noqa: F401
|
|
5
4
|
|
|
6
5
|
from .compat import WINDOWS
|
|
7
6
|
|
|
@@ -11,6 +10,8 @@ def path_to_url(path: str) -> str:
|
|
|
11
10
|
Convert a path to a file: URL. The path will be made absolute and have
|
|
12
11
|
quoted path parts.
|
|
13
12
|
"""
|
|
13
|
+
import urllib.request
|
|
14
|
+
|
|
14
15
|
path = os.path.normpath(os.path.abspath(path))
|
|
15
16
|
url = urllib.parse.urljoin("file://", urllib.request.pathname2url(path))
|
|
16
17
|
return url
|
|
@@ -20,6 +21,8 @@ def url_to_path(url: str) -> str:
|
|
|
20
21
|
"""
|
|
21
22
|
Convert a file: URL to a path.
|
|
22
23
|
"""
|
|
24
|
+
import urllib.request
|
|
25
|
+
|
|
23
26
|
assert url.startswith(
|
|
24
27
|
"file:"
|
|
25
28
|
), f"You can only turn file: urls into filenames (not {url!r})"
|
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
import re
|
|
6
|
-
import site
|
|
7
6
|
import sys
|
|
8
7
|
|
|
9
8
|
logger = logging.getLogger(__name__)
|
|
@@ -12,7 +11,7 @@ _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile(
|
|
|
12
11
|
)
|
|
13
12
|
|
|
14
13
|
|
|
15
|
-
def
|
|
14
|
+
def running_under_virtualenv() -> bool:
|
|
16
15
|
"""Checks if sys.base_prefix and sys.prefix match.
|
|
17
16
|
|
|
18
17
|
This handles PEP 405 compliant virtual environments.
|
|
@@ -20,20 +19,6 @@ def _running_under_venv() -> bool:
|
|
|
20
19
|
return sys.prefix != getattr(sys, "base_prefix", sys.prefix)
|
|
21
20
|
|
|
22
21
|
|
|
23
|
-
def _running_under_legacy_virtualenv() -> bool:
|
|
24
|
-
"""Checks if sys.real_prefix is set.
|
|
25
|
-
|
|
26
|
-
This handles virtual environments created with pypa's virtualenv.
|
|
27
|
-
"""
|
|
28
|
-
# pypa/virtualenv case
|
|
29
|
-
return hasattr(sys, "real_prefix")
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def running_under_virtualenv() -> bool:
|
|
33
|
-
"""True if we're running inside a virtual environment, False otherwise."""
|
|
34
|
-
return _running_under_venv() or _running_under_legacy_virtualenv()
|
|
35
|
-
|
|
36
|
-
|
|
37
22
|
def _get_pyvenv_cfg_lines() -> list[str] | None:
|
|
38
23
|
"""Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines
|
|
39
24
|
|
|
@@ -78,28 +63,9 @@ def _no_global_under_venv() -> bool:
|
|
|
78
63
|
return False
|
|
79
64
|
|
|
80
65
|
|
|
81
|
-
def _no_global_under_legacy_virtualenv() -> bool:
|
|
82
|
-
"""Check if "no-global-site-packages.txt" exists beside site.py
|
|
83
|
-
|
|
84
|
-
This mirrors logic in pypa/virtualenv for determining whether system
|
|
85
|
-
site-packages are visible in the virtual environment.
|
|
86
|
-
"""
|
|
87
|
-
site_mod_dir = os.path.dirname(os.path.abspath(site.__file__))
|
|
88
|
-
no_global_site_packages_file = os.path.join(
|
|
89
|
-
site_mod_dir,
|
|
90
|
-
"no-global-site-packages.txt",
|
|
91
|
-
)
|
|
92
|
-
return os.path.exists(no_global_site_packages_file)
|
|
93
|
-
|
|
94
|
-
|
|
95
66
|
def virtualenv_no_global() -> bool:
|
|
96
67
|
"""Returns a boolean, whether running in venv with no system site-packages."""
|
|
97
|
-
|
|
98
|
-
# return True for both checks, but is only able to use the PEP 405 config.
|
|
99
|
-
if _running_under_venv():
|
|
68
|
+
if running_under_virtualenv():
|
|
100
69
|
return _no_global_under_venv()
|
|
101
70
|
|
|
102
|
-
if _running_under_legacy_virtualenv():
|
|
103
|
-
return _no_global_under_legacy_virtualenv()
|
|
104
|
-
|
|
105
71
|
return False
|
|
@@ -5,12 +5,11 @@ import os.path
|
|
|
5
5
|
import pathlib
|
|
6
6
|
import re
|
|
7
7
|
import urllib.parse
|
|
8
|
-
import urllib.request
|
|
9
8
|
from dataclasses import replace
|
|
10
9
|
from typing import Any
|
|
11
10
|
|
|
12
11
|
from pip._internal.exceptions import BadCommand, InstallationError
|
|
13
|
-
from pip._internal.utils.misc import HiddenText, display_path, hide_url
|
|
12
|
+
from pip._internal.utils.misc import HiddenText, display_path, hide_url, strtobool
|
|
14
13
|
from pip._internal.utils.subprocess import make_command
|
|
15
14
|
from pip._internal.vcs.versioncontrol import (
|
|
16
15
|
AuthInfo,
|
|
@@ -281,7 +280,9 @@ class Git(VersionControl):
|
|
|
281
280
|
flags = ()
|
|
282
281
|
else:
|
|
283
282
|
flags = ("--verbose", "--progress")
|
|
284
|
-
if self.get_git_version() >= (2, 17)
|
|
283
|
+
if self.get_git_version() >= (2, 17) and not strtobool(
|
|
284
|
+
os.environ.get("PIP_NO_PARTIAL_CLONE_FOR_BROKEN_GIT_SERVER", "no")
|
|
285
|
+
):
|
|
285
286
|
# Git added support for partial clone in 2.17
|
|
286
287
|
# https://git-scm.com/docs/partial-clone
|
|
287
288
|
# Speeds up cloning by functioning without a complete copy of repository
|
|
@@ -438,7 +439,7 @@ class Git(VersionControl):
|
|
|
438
439
|
if os.path.exists(url):
|
|
439
440
|
# A local bare remote (git clone --mirror).
|
|
440
441
|
# Needs a file:// prefix.
|
|
441
|
-
return pathlib.
|
|
442
|
+
return pathlib.Path(url).as_uri()
|
|
442
443
|
scp_match = SCP_REGEX.match(url)
|
|
443
444
|
if scp_match:
|
|
444
445
|
# Add an ssh:// prefix and replace the ':' with a '/'.
|
|
@@ -453,7 +454,7 @@ class Git(VersionControl):
|
|
|
453
454
|
"""
|
|
454
455
|
try:
|
|
455
456
|
cls.run_command(
|
|
456
|
-
["rev-parse", "-q", "--verify", "
|
|
457
|
+
["rev-parse", "-q", "--verify", rev + "^{commit}"],
|
|
457
458
|
cwd=location,
|
|
458
459
|
log_failed_cmd=False,
|
|
459
460
|
)
|
|
@@ -500,6 +501,8 @@ class Git(VersionControl):
|
|
|
500
501
|
work with a ssh:// scheme (e.g. GitHub). But we need a scheme for
|
|
501
502
|
parsing. Hence we remove it again afterwards and return it as a stub.
|
|
502
503
|
"""
|
|
504
|
+
import urllib.request
|
|
505
|
+
|
|
503
506
|
# Works around an apparent Git bug
|
|
504
507
|
# (see https://article.gmane.org/gmane.comp.version-control.git/146500)
|
|
505
508
|
scheme, netloc, path, query, fragment = urlsplit(url)
|
|
@@ -12,7 +12,6 @@ from dataclasses import dataclass, field
|
|
|
12
12
|
from typing import (
|
|
13
13
|
Any,
|
|
14
14
|
Literal,
|
|
15
|
-
Optional,
|
|
16
15
|
)
|
|
17
16
|
|
|
18
17
|
from pip._internal.cli.spinners import SpinnerInterface
|
|
@@ -39,7 +38,7 @@ __all__ = ["vcs"]
|
|
|
39
38
|
|
|
40
39
|
logger = logging.getLogger(__name__)
|
|
41
40
|
|
|
42
|
-
AuthInfo = tuple[
|
|
41
|
+
AuthInfo = tuple[str | None, str | None]
|
|
43
42
|
|
|
44
43
|
|
|
45
44
|
def is_url(name: str) -> bool:
|
|
@@ -49,6 +49,9 @@ def _should_cache(
|
|
|
49
49
|
if req.editable or not req.source_dir:
|
|
50
50
|
# never cache editable requirements
|
|
51
51
|
return False
|
|
52
|
+
if req.link and req.link.is_existing_dir():
|
|
53
|
+
# never cache local directory requirements
|
|
54
|
+
return False
|
|
52
55
|
|
|
53
56
|
if req.link and req.link.is_vcs:
|
|
54
57
|
# VCS checkout. Do not cache
|
|
@@ -205,6 +208,7 @@ def build(
|
|
|
205
208
|
requirements: Iterable[InstallRequirement],
|
|
206
209
|
wheel_cache: WheelCache,
|
|
207
210
|
verify: bool,
|
|
211
|
+
allow_editables: bool,
|
|
208
212
|
) -> BuildResult:
|
|
209
213
|
"""Build wheels.
|
|
210
214
|
|
|
@@ -229,7 +233,7 @@ def build(
|
|
|
229
233
|
req,
|
|
230
234
|
cache_dir,
|
|
231
235
|
verify,
|
|
232
|
-
req.editable and
|
|
236
|
+
req.editable and allow_editables,
|
|
233
237
|
)
|
|
234
238
|
if wheel_file:
|
|
235
239
|
# Record the download origin in the cache
|