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.
Files changed (480) hide show
  1. package/BINARY-INVENTORY.json +813 -813
  2. package/CHANGELOG.md +14 -0
  3. package/dist/ai/models.d.ts +10 -6
  4. package/dist/ai/models.generated.d.ts +72 -0
  5. package/dist/ai/models.generated.js +33 -0
  6. package/dist/ai/models.js +36 -13
  7. package/dist/ai/providers/anthropic.d.ts +4 -2
  8. package/dist/ai/providers/anthropic.js +59 -29
  9. package/dist/ai/providers/azure-openai-responses.d.ts +2 -1
  10. package/dist/ai/providers/azure-openai-responses.js +4 -20
  11. package/dist/ai/providers/google-vertex.d.ts +8 -2
  12. package/dist/ai/providers/google-vertex.js +66 -54
  13. package/dist/ai/providers/google.js +15 -48
  14. package/dist/ai/providers/openai-completions.d.ts +4 -1
  15. package/dist/ai/providers/openai-completions.js +26 -10
  16. package/dist/ai/providers/openai-reasoning.d.ts +5 -0
  17. package/dist/ai/providers/openai-reasoning.js +13 -0
  18. package/dist/ai/providers/openai-responses-shared.js +1 -1
  19. package/dist/ai/providers/openai-responses.d.ts +6 -2
  20. package/dist/ai/providers/openai-responses.js +28 -23
  21. package/dist/ai/providers/simple-options.d.ts +2 -3
  22. package/dist/ai/providers/simple-options.js +4 -6
  23. package/dist/ai/types.d.ts +19 -2
  24. package/dist/app/agent-session-runtime-adapter.js +7 -6
  25. package/dist/app/agent-session.d.ts +0 -15
  26. package/dist/app/agent-session.js +0 -37
  27. package/dist/app/approvals/approval-errors.d.ts +15 -0
  28. package/dist/app/approvals/approval-errors.js +14 -0
  29. package/dist/app/approvals/runtime-approval-gates.d.ts +1 -2
  30. package/dist/app/approvals/tool-approval.d.ts +1 -0
  31. package/dist/app/approvals/tool-approval.js +11 -23
  32. package/dist/app/approvals/types.d.ts +0 -14
  33. package/dist/app/approvals/types.js +0 -2
  34. package/dist/app/background/tool-summaries.js +0 -2
  35. package/dist/app/extensions/slash-commands.js +1 -3
  36. package/dist/app/local/tools/execute-code/executor.d.ts +1 -1
  37. package/dist/app/local/tools/execute-code/executor.js +20 -10
  38. package/dist/app/local/tools/execute-code/tool.js +21 -2
  39. package/dist/app/modes/action/agent.js +4 -5
  40. package/dist/app/modes/ask/agent.js +4 -6
  41. package/dist/app/modes/index.js +20 -10
  42. package/dist/app/modes/installation/agent.js +4 -5
  43. package/dist/app/modes/manage/agent.js +3 -4
  44. package/dist/app/modes/manage/prompt.js +1 -2
  45. package/dist/app/modes/metadata.d.ts +31 -0
  46. package/dist/app/modes/metadata.js +35 -0
  47. package/dist/app/modes/plan/agent.js +5 -8
  48. package/dist/app/modes/plan/prompt.js +3 -3
  49. package/dist/app/permissions/runtime-approval-flow.d.ts +1 -5
  50. package/dist/app/permissions/runtime-approval-flow.js +0 -28
  51. package/dist/app/permissions/tool-gates.d.ts +2 -3
  52. package/dist/app/permissions/tool-gates.js +3 -81
  53. package/dist/app/prompts/com-api.js +1 -1
  54. package/dist/app/prompts/shared-guidelines.js +7 -3
  55. package/dist/app/providers/google-vertex-gateway.js +4 -51
  56. package/dist/app/providers/model-registry.d.ts +1 -0
  57. package/dist/app/providers/model-registry.js +39 -0
  58. package/dist/app/providers/model-resolver.js +10 -7
  59. package/dist/app/providers/register-shortcut-provider.js +6 -6
  60. package/dist/app/providers/shortcut-api-v2-transport.js +4 -0
  61. package/dist/app/providers/shortcut-llm-proxy-client.d.ts +2 -2
  62. package/dist/app/providers/shortcut-llm-proxy-client.js +1 -0
  63. package/dist/app/resources/package-manager.js +2 -123
  64. package/dist/app/resources/resource-patterns.d.ts +9 -0
  65. package/dist/app/resources/resource-patterns.js +120 -0
  66. package/dist/app/session/forked-agent.d.ts +2 -2
  67. package/dist/app/session/model-manager.js +3 -2
  68. package/dist/app/session/session-lifecycle.js +3 -2
  69. package/dist/app/session/session-models.d.ts +2 -0
  70. package/dist/app/session/session-models.js +14 -6
  71. package/dist/app/settings-manager.d.ts +3 -3
  72. package/dist/app/shared/tools/execute-code/mog.d.ts +3 -1
  73. package/dist/app/shared/tools/execute-code/mog.js +18 -2
  74. package/dist/app/tools/bash.js +3 -3
  75. package/dist/app/tools/execute-code/index.d.ts +1 -0
  76. package/dist/app/tools/execute-code/index.js +3 -1
  77. package/dist/app/tools/find-ignore-files.d.ts +3 -0
  78. package/dist/app/tools/find-ignore-files.js +33 -0
  79. package/dist/app/tools/find.js +2 -21
  80. package/dist/app/tools/llm-analysis.js +0 -2
  81. package/dist/app/tools/refresh-context.d.ts +1 -1
  82. package/dist/app/tools/session-settings/update-session-settings.js +2 -2
  83. package/dist/app/tools/switch-mode.js +2 -2
  84. package/dist/app/tools/take-screenshot.js +0 -2
  85. package/dist/app/tools/task/runner.js +1 -2
  86. package/dist/app/tools/task/task.d.ts +1 -3
  87. package/dist/app/tools/task/task.js +20 -40
  88. package/dist/app/tools/web-search.js +12 -2
  89. package/dist/autocomplete/core.d.ts +33 -0
  90. package/dist/autocomplete/core.js +113 -0
  91. package/dist/{tui → autocomplete}/fuzzy.d.ts +0 -1
  92. package/dist/{tui → autocomplete}/fuzzy.js +0 -1
  93. package/dist/{tui/autocomplete.d.ts → autocomplete/index.d.ts} +0 -1
  94. package/dist/{tui/autocomplete.js → autocomplete/index.js} +62 -158
  95. package/dist/cli/args.js +1 -1
  96. package/dist/cli/list-models.js +1 -1
  97. package/dist/cli.js +26227 -30480
  98. package/dist/constants.d.ts +0 -2
  99. package/dist/constants.js +0 -3
  100. package/dist/contracts/agent-session-store.d.ts +1 -1
  101. package/dist/contracts/agent-settings.d.ts +1 -0
  102. package/dist/contracts/agent-settings.js +2 -1
  103. package/dist/contracts/model-call.d.ts +1 -2
  104. package/dist/contracts/model-call.js +1 -2
  105. package/dist/contracts/model-stream.d.ts +1 -0
  106. package/dist/contracts/model-stream.js +1 -0
  107. package/dist/contracts/wire.d.ts +10 -7
  108. package/dist/contracts/wire.js +8 -0
  109. package/dist/core/agent-engine.js +1 -1
  110. package/dist/core/core-types.d.ts +1 -21
  111. package/dist/core/defaults.d.ts +1 -1
  112. package/dist/core/defaults.js +9 -1
  113. package/dist/core/prompts/agent-guidelines.d.ts +4 -5
  114. package/dist/core/prompts/agent-guidelines.js +28 -42
  115. package/dist/core/session-schema.d.ts +1 -1
  116. package/dist/embedded-agent/ai-invoke.d.ts +1 -2
  117. package/dist/embedded-agent/ai-invoke.js +2 -70
  118. package/dist/embedded-agent/anthropic-messages-transport.d.ts +4 -20
  119. package/dist/embedded-agent/anthropic-messages-transport.js +23 -786
  120. package/dist/embedded-agent/bootstrap.js +2 -2
  121. package/dist/embedded-agent/compose.js +8 -7
  122. package/dist/embedded-agent/gateway-base-url.d.ts +3 -0
  123. package/dist/embedded-agent/gateway-base-url.js +35 -0
  124. package/dist/embedded-agent/google-vertex-transport.d.ts +2 -11
  125. package/dist/embedded-agent/google-vertex-transport.js +20 -117
  126. package/dist/embedded-agent/host-runtime-options.d.ts +0 -8
  127. package/dist/embedded-agent/host-runtime-options.js +10 -2
  128. package/dist/embedded-agent/host-tools/invoke-llm/contract.d.ts +2 -2
  129. package/dist/embedded-agent/host-tools/invoke-llm/contract.js +4 -2
  130. package/dist/embedded-agent/host-tools/sandbox-llm/contract.d.ts +8 -3
  131. package/dist/embedded-agent/host-tools/sandbox-llm/contract.js +12 -8
  132. package/dist/embedded-agent/host-tools/sandbox-llm/index.d.ts +1 -1
  133. package/dist/embedded-agent/host-tools/sandbox-llm/index.js +1 -1
  134. package/dist/embedded-agent/host-tools/shared/index.d.ts +1 -1
  135. package/dist/embedded-agent/host-tools/shared/index.js +1 -1
  136. package/dist/embedded-agent/host-tools/shared/llm-stream-error.d.ts +7 -0
  137. package/dist/embedded-agent/host-tools/shared/llm-stream-error.js +10 -0
  138. package/dist/embedded-agent/host-tools/take-screenshot/contract.d.ts +0 -2
  139. package/dist/embedded-agent/host-tools/take-screenshot/contract.js +1 -3
  140. package/dist/embedded-agent/host-tools/take-screenshot/index.d.ts +1 -1
  141. package/dist/embedded-agent/host-tools/take-screenshot/index.js +1 -1
  142. package/dist/embedded-agent/host-tools/task/agents/clone.js +1 -2
  143. package/dist/embedded-agent/host-tools/task/contract.js +1 -1
  144. package/dist/embedded-agent/index.d.ts +3 -4
  145. package/dist/embedded-agent/index.js +2 -3
  146. package/dist/embedded-agent/model-selection.d.ts +0 -6
  147. package/dist/embedded-agent/model-selection.js +15 -8
  148. package/dist/embedded-agent/openai-completions-transport.d.ts +2 -11
  149. package/dist/embedded-agent/openai-completions-transport.js +20 -120
  150. package/dist/embedded-agent/openai-responses-transport.d.ts +2 -11
  151. package/dist/embedded-agent/openai-responses-transport.js +15 -170
  152. package/dist/embedded-agent/prompt/build.js +1 -2
  153. package/dist/embedded-agent/prompt/sections.d.ts +1 -1
  154. package/dist/embedded-agent/prompt/sections.js +2 -0
  155. package/dist/embedded-agent/provider-native-request.d.ts +29 -0
  156. package/dist/embedded-agent/provider-native-request.js +65 -0
  157. package/dist/embedded-agent/run-stats.d.ts +1 -1
  158. package/dist/embedded-agent/stream.d.ts +10 -96
  159. package/dist/embedded-agent/stream.js +31 -556
  160. package/dist/embedded-agent/suggestions.d.ts +1 -1
  161. package/dist/embedded-agent/suggestions.js +1 -1
  162. package/dist/embedded-agent/worker-bridge/host-client.d.ts +7 -0
  163. package/dist/embedded-agent/worker-bridge/host-client.js +15 -0
  164. package/dist/embedded-agent/worker-bridge/worker-port.js +17 -1
  165. package/dist/main.js +18 -14
  166. package/dist/rpc/index.d.ts +1 -1
  167. package/dist/rpc/rpc-approval-gates.js +1 -2
  168. package/dist/rpc/rpc-host.d.ts +4 -0
  169. package/dist/rpc/rpc-host.js +13 -24
  170. package/dist/rpc/rpc-types.d.ts +6 -17
  171. package/dist/shared/platform/open.d.ts +4 -1
  172. package/dist/shared/platform/open.js +14 -2
  173. package/dist/shell/approvals/runtime-approval-gates.js +1 -3
  174. package/dist/shell/components/selectors/model-selector.js +2 -1
  175. package/dist/shell/components/selectors/session-selector-search.js +1 -1
  176. package/dist/shell/components/selectors/thinking-selector.js +7 -6
  177. package/dist/shell/index.d.ts +0 -1
  178. package/dist/shell/index.js +0 -1
  179. package/dist/shell/interactive/interactive-mode-options.d.ts +10 -0
  180. package/dist/shell/interactive/interactive-mode.d.ts +6 -12
  181. package/dist/shell/interactive/interactive-mode.js +39 -158
  182. package/dist/shell/interactive/slash-commands.d.ts +0 -34
  183. package/dist/shell/interactive/slash-commands.js +0 -2
  184. package/dist/shell/links/local-file-link-input.d.ts +15 -0
  185. package/dist/shell/links/local-file-link-input.js +38 -0
  186. package/dist/shell/links/local-file-link.d.ts +7 -0
  187. package/dist/shell/links/local-file-link.js +35 -0
  188. package/dist/shell/links/local-file-opener.d.ts +16 -0
  189. package/dist/shell/links/local-file-opener.js +90 -0
  190. package/dist/shell/session-client.d.ts +0 -1
  191. package/dist/shell/session-client.js +0 -6
  192. package/dist/shell/status/update-check-scheduler.d.ts +30 -0
  193. package/dist/shell/status/update-check-scheduler.js +71 -0
  194. package/dist/shell/status/update-reminder-controller.d.ts +22 -0
  195. package/dist/shell/status/update-reminder-controller.js +40 -0
  196. package/dist/shell/status/update-reminder.d.ts +6 -0
  197. package/dist/shell/status/update-reminder.js +4 -0
  198. package/dist/shell/theme/dark.json +1 -2
  199. package/dist/shell/theme/light.json +1 -2
  200. package/dist/shell/theme/runtime.d.ts +2 -3
  201. package/dist/shell/theme/runtime.js +2 -6
  202. package/dist/shell/theme/theme-schema.json +1 -6
  203. package/dist/shortcut-model-catalog.d.ts +7 -2
  204. package/dist/shortcut-model-catalog.js +134 -10
  205. package/dist/startup/update-manager.d.ts +6 -6
  206. package/dist/startup/update-manager.js +23 -38
  207. package/dist/startup/update-prompt.d.ts +1 -0
  208. package/dist/startup/update-prompt.js +2 -2
  209. package/dist/tui/components/editor.d.ts +1 -1
  210. package/dist/tui/components/editor.js +1 -1
  211. package/dist/tui/components/markdown.js +15 -6
  212. package/dist/tui/components/settings-list.js +1 -1
  213. package/dist/tui/editor-component.d.ts +1 -1
  214. package/dist/tui/index.d.ts +7 -8
  215. package/dist/tui/index.js +7 -6
  216. package/dist/tui/tui.d.ts +2 -0
  217. package/dist/tui/tui.js +16 -1
  218. package/dist/tui/utils.d.ts +7 -0
  219. package/dist/tui/utils.js +58 -8
  220. package/native-app/main/index.js +3200 -48
  221. package/native-app/main/{photon_rs-SoVDgheu.js → photon_rs-XkYyYTVA.js} +2 -2
  222. package/native-app/package.json +1 -1
  223. package/native-app/preload/index.cjs +2 -0
  224. package/native-app/renderer/assets/{index-CFc-oZuS.js → index-B4jz6epR.js} +825 -155
  225. package/native-app/renderer/assets/{index-OhGE0UY4.css → index-C__g36ft.css} +412 -162
  226. package/native-app/renderer/assets/shortcutagent-DxFsGSkw.png +0 -0
  227. package/native-app/renderer/index.html +2 -2
  228. package/package.json +17 -3
  229. package/skills/add-custom-model/SKILL.md +52 -0
  230. package/user-docs/dist/index.html +1 -1
  231. package/user-docs/dist/shortcutxl-docs.pdf +0 -0
  232. package/xll/ShortcutXL.xll +0 -0
  233. package/xll/modules/shortcut_xl/_managed.py +26 -7
  234. package/xll/modules/shortcut_xl/_tracking.py +141 -251
  235. package/xll/modules/shortcut_xl/api/__init__.py +60 -0
  236. package/xll/modules/shortcut_xl/api/workbook.py +9 -1
  237. package/xll/modules/shortcut_xl/api/worksheet.py +4 -1
  238. package/xll/python/Lib/site-packages/httpx-0.28.1.dist-info/RECORD +1 -1
  239. package/xll/python/Lib/site-packages/idna-3.18.dist-info/RECORD +1 -1
  240. package/xll/python/Lib/site-packages/pip/__init__.py +1 -1
  241. package/xll/python/Lib/site-packages/pip/_internal/build_env/__init__.py +25 -0
  242. package/xll/python/Lib/site-packages/pip/_internal/build_env/base.py +103 -0
  243. package/xll/python/Lib/site-packages/pip/_internal/build_env/installer.py +333 -0
  244. package/xll/python/Lib/site-packages/pip/_internal/build_env/noop.py +42 -0
  245. package/xll/python/Lib/site-packages/pip/_internal/build_env/venv.py +145 -0
  246. package/xll/python/Lib/site-packages/pip/_internal/build_env/virtual.py +139 -0
  247. package/xll/python/Lib/site-packages/pip/_internal/cache.py +4 -1
  248. package/xll/python/Lib/site-packages/pip/_internal/cli/autocompletion.py +4 -1
  249. package/xll/python/Lib/site-packages/pip/_internal/cli/base_command.py +11 -14
  250. package/xll/python/Lib/site-packages/pip/_internal/cli/cmdoptions.py +133 -22
  251. package/xll/python/Lib/site-packages/pip/_internal/cli/index_command.py +11 -6
  252. package/xll/python/Lib/site-packages/pip/_internal/cli/main.py +2 -1
  253. package/xll/python/Lib/site-packages/pip/_internal/cli/main_parser.py +1 -2
  254. package/xll/python/Lib/site-packages/pip/_internal/cli/parser.py +10 -2
  255. package/xll/python/Lib/site-packages/pip/_internal/cli/progress_bars.py +2 -2
  256. package/xll/python/Lib/site-packages/pip/_internal/cli/req_command.py +57 -25
  257. package/xll/python/Lib/site-packages/pip/_internal/cli/status_codes.py +1 -0
  258. package/xll/python/Lib/site-packages/pip/_internal/commands/cache.py +7 -6
  259. package/xll/python/Lib/site-packages/pip/_internal/commands/configuration.py +2 -1
  260. package/xll/python/Lib/site-packages/pip/_internal/commands/debug.py +4 -5
  261. package/xll/python/Lib/site-packages/pip/_internal/commands/download.py +4 -0
  262. package/xll/python/Lib/site-packages/pip/_internal/commands/freeze.py +1 -1
  263. package/xll/python/Lib/site-packages/pip/_internal/commands/index.py +10 -3
  264. package/xll/python/Lib/site-packages/pip/_internal/commands/inspect.py +1 -1
  265. package/xll/python/Lib/site-packages/pip/_internal/commands/install.py +6 -6
  266. package/xll/python/Lib/site-packages/pip/_internal/commands/list.py +11 -6
  267. package/xll/python/Lib/site-packages/pip/_internal/commands/lock.py +4 -6
  268. package/xll/python/Lib/site-packages/pip/_internal/commands/show.py +14 -8
  269. package/xll/python/Lib/site-packages/pip/_internal/commands/wheel.py +7 -1
  270. package/xll/python/Lib/site-packages/pip/_internal/configuration.py +2 -3
  271. package/xll/python/Lib/site-packages/pip/_internal/distributions/base.py +5 -3
  272. package/xll/python/Lib/site-packages/pip/_internal/distributions/installed.py +3 -2
  273. package/xll/python/Lib/site-packages/pip/_internal/distributions/sdist.py +45 -20
  274. package/xll/python/Lib/site-packages/pip/_internal/distributions/wheel.py +3 -2
  275. package/xll/python/Lib/site-packages/pip/_internal/exceptions.py +174 -0
  276. package/xll/python/Lib/site-packages/pip/_internal/index/collector.py +70 -48
  277. package/xll/python/Lib/site-packages/pip/_internal/index/package_finder.py +46 -7
  278. package/xll/python/Lib/site-packages/pip/_internal/index/sources.py +1 -2
  279. package/xll/python/Lib/site-packages/pip/_internal/locations/_sysconfig.py +1 -1
  280. package/xll/python/Lib/site-packages/pip/_internal/locations/base.py +1 -1
  281. package/xll/python/Lib/site-packages/pip/_internal/metadata/base.py +10 -5
  282. package/xll/python/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +1 -1
  283. package/xll/python/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +8 -3
  284. package/xll/python/Lib/site-packages/pip/_internal/models/candidate.py +5 -1
  285. package/xll/python/Lib/site-packages/pip/_internal/models/link.py +53 -13
  286. package/xll/python/Lib/site-packages/pip/_internal/network/auth.py +38 -21
  287. package/xll/python/Lib/site-packages/pip/_internal/network/cache.py +2 -2
  288. package/xll/python/Lib/site-packages/pip/_internal/network/download.py +58 -11
  289. package/xll/python/Lib/site-packages/pip/_internal/network/session.py +35 -40
  290. package/xll/python/Lib/site-packages/pip/_internal/network/utils.py +109 -1
  291. package/xll/python/Lib/site-packages/pip/_internal/operations/check.py +2 -3
  292. package/xll/python/Lib/site-packages/pip/_internal/operations/install/wheel.py +23 -18
  293. package/xll/python/Lib/site-packages/pip/_internal/operations/prepare.py +152 -7
  294. package/xll/python/Lib/site-packages/pip/_internal/req/__init__.py +2 -0
  295. package/xll/python/Lib/site-packages/pip/_internal/req/constructors.py +54 -69
  296. package/xll/python/Lib/site-packages/pip/_internal/req/req_file.py +6 -6
  297. package/xll/python/Lib/site-packages/pip/_internal/req/req_install.py +25 -21
  298. package/xll/python/Lib/site-packages/pip/_internal/req/req_uninstall.py +13 -8
  299. package/xll/python/Lib/site-packages/pip/_internal/resolution/base.py +2 -2
  300. package/xll/python/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +2 -2
  301. package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +1 -1
  302. package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -1
  303. package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +39 -52
  304. package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +3 -3
  305. package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +3 -0
  306. package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +9 -0
  307. package/xll/python/Lib/site-packages/pip/_internal/utils/compat.py +15 -9
  308. package/xll/python/Lib/site-packages/pip/_internal/utils/deprecation.py +6 -1
  309. package/xll/python/Lib/site-packages/pip/_internal/utils/filesystem.py +2 -2
  310. package/xll/python/Lib/site-packages/pip/_internal/utils/logging.py +11 -3
  311. package/xll/python/Lib/site-packages/pip/_internal/utils/misc.py +48 -4
  312. package/xll/python/Lib/site-packages/pip/_internal/utils/pylock.py +18 -2
  313. package/xll/python/Lib/site-packages/pip/_internal/utils/retry.py +2 -1
  314. package/xll/python/Lib/site-packages/pip/_internal/utils/subprocess.py +4 -3
  315. package/xll/python/Lib/site-packages/pip/_internal/utils/temp_dir.py +1 -2
  316. package/xll/python/Lib/site-packages/pip/_internal/utils/unpacking.py +30 -4
  317. package/xll/python/Lib/site-packages/pip/_internal/utils/urls.py +5 -2
  318. package/xll/python/Lib/site-packages/pip/_internal/utils/virtualenv.py +2 -36
  319. package/xll/python/Lib/site-packages/pip/_internal/vcs/git.py +8 -5
  320. package/xll/python/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +1 -2
  321. package/xll/python/Lib/site-packages/pip/_internal/wheel_builder.py +5 -1
  322. package/xll/python/Lib/site-packages/pip/_vendor/bom.cdx.json +231 -0
  323. package/xll/python/Lib/site-packages/pip/_vendor/certifi/__init__.py +1 -1
  324. package/xll/python/Lib/site-packages/pip/_vendor/certifi/cacert.pem +0 -631
  325. package/xll/python/Lib/site-packages/pip/_vendor/distlib/__init__.py +1 -1
  326. package/xll/python/Lib/site-packages/pip/_vendor/distlib/compat.py +34 -64
  327. package/xll/python/Lib/site-packages/pip/_vendor/distlib/resources.py +28 -14
  328. package/xll/python/Lib/site-packages/pip/_vendor/distlib/scripts.py +7 -3
  329. package/xll/python/Lib/site-packages/pip/_vendor/distlib/util.py +48 -11
  330. package/xll/python/Lib/site-packages/pip/_vendor/idna/LICENSE.md +1 -1
  331. package/xll/python/Lib/site-packages/pip/_vendor/idna/__main__.py +6 -0
  332. package/xll/python/Lib/site-packages/pip/_vendor/idna/cli.py +128 -0
  333. package/xll/python/Lib/site-packages/pip/_vendor/idna/codec.py +50 -13
  334. package/xll/python/Lib/site-packages/pip/_vendor/idna/compat.py +26 -0
  335. package/xll/python/Lib/site-packages/pip/_vendor/idna/core.py +352 -141
  336. package/xll/python/Lib/site-packages/pip/_vendor/idna/idnadata.py +571 -2983
  337. package/xll/python/Lib/site-packages/pip/_vendor/idna/intranges.py +5 -7
  338. package/xll/python/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -1
  339. package/xll/python/Lib/site-packages/pip/_vendor/idna/uts46data.py +16887 -8832
  340. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +352 -66
  341. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +11 -0
  342. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/_xdg.py +171 -0
  343. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/android.py +92 -41
  344. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/api.py +213 -49
  345. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/macos.py +128 -51
  346. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/unix.py +176 -127
  347. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/version.py +8 -18
  348. package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/windows.py +185 -68
  349. package/xll/python/Lib/site-packages/pip/_vendor/pygments/__init__.py +2 -2
  350. package/xll/python/Lib/site-packages/pip/_vendor/pygments/__main__.py +1 -1
  351. package/xll/python/Lib/site-packages/pip/_vendor/pygments/console.py +1 -1
  352. package/xll/python/Lib/site-packages/pip/_vendor/pygments/filter.py +1 -1
  353. package/xll/python/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +10 -8
  354. package/xll/python/Lib/site-packages/pip/_vendor/pygments/formatter.py +1 -1
  355. package/xll/python/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +1 -1
  356. package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexer.py +7 -5
  357. package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +1 -1
  358. package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +9 -8
  359. package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +35 -32
  360. package/xll/python/Lib/site-packages/pip/_vendor/pygments/modeline.py +1 -1
  361. package/xll/python/Lib/site-packages/pip/_vendor/pygments/plugin.py +3 -1
  362. package/xll/python/Lib/site-packages/pip/_vendor/pygments/regexopt.py +13 -2
  363. package/xll/python/Lib/site-packages/pip/_vendor/pygments/scanner.py +1 -1
  364. package/xll/python/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +1 -1
  365. package/xll/python/Lib/site-packages/pip/_vendor/pygments/style.py +1 -1
  366. package/xll/python/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +1 -1
  367. package/xll/python/Lib/site-packages/pip/_vendor/pygments/token.py +1 -1
  368. package/xll/python/Lib/site-packages/pip/_vendor/pygments/unistring.py +1 -1
  369. package/xll/python/Lib/site-packages/pip/_vendor/pygments/util.py +2 -2
  370. package/xll/python/Lib/site-packages/pip/_vendor/requests/__init__.py +52 -16
  371. package/xll/python/Lib/site-packages/pip/_vendor/requests/__version__.py +2 -2
  372. package/xll/python/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +2 -2
  373. package/xll/python/Lib/site-packages/pip/_vendor/requests/_types.py +183 -0
  374. package/xll/python/Lib/site-packages/pip/_vendor/requests/adapters.py +101 -50
  375. package/xll/python/Lib/site-packages/pip/_vendor/requests/api.py +31 -8
  376. package/xll/python/Lib/site-packages/pip/_vendor/requests/auth.py +80 -40
  377. package/xll/python/Lib/site-packages/pip/_vendor/requests/compat.py +9 -3
  378. package/xll/python/Lib/site-packages/pip/_vendor/requests/cookies.py +143 -79
  379. package/xll/python/Lib/site-packages/pip/_vendor/requests/exceptions.py +15 -5
  380. package/xll/python/Lib/site-packages/pip/_vendor/requests/help.py +13 -10
  381. package/xll/python/Lib/site-packages/pip/_vendor/requests/hooks.py +23 -9
  382. package/xll/python/Lib/site-packages/pip/_vendor/requests/models.py +265 -126
  383. package/xll/python/Lib/site-packages/pip/_vendor/requests/py.typed +0 -0
  384. package/xll/python/Lib/site-packages/pip/_vendor/requests/sessions.py +164 -78
  385. package/xll/python/Lib/site-packages/pip/_vendor/requests/status_codes.py +2 -2
  386. package/xll/python/Lib/site-packages/pip/_vendor/requests/structures.py +51 -20
  387. package/xll/python/Lib/site-packages/pip/_vendor/requests/utils.py +161 -89
  388. package/xll/python/Lib/site-packages/pip/_vendor/tomli/__init__.py +1 -1
  389. package/xll/python/Lib/site-packages/pip/_vendor/tomli/_parser.py +9 -4
  390. package/xll/python/Lib/site-packages/pip/_vendor/tomli/_re.py +13 -9
  391. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_base_connection.py +3 -1
  392. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_collections.py +0 -1
  393. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_version.py +8 -18
  394. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/connection.py +4 -4
  395. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +23 -10
  396. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/emscripten/response.py +5 -1
  397. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +7 -8
  398. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +1 -1
  399. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +2 -2
  400. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/fields.py +14 -14
  401. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +8 -6
  402. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/response.py +35 -22
  403. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +8 -0
  404. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +11 -61
  405. package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +5 -11
  406. package/xll/python/Lib/site-packages/pip/_vendor/vendor.txt +8 -8
  407. package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/METADATA +3 -2
  408. package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/RECORD +208 -188
  409. package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/AUTHORS.txt +20 -0
  410. 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
  411. package/xll/python/Lib/site-packages/pywin32-311.dist-info/RECORD +2 -2
  412. package/xll/python/Scripts/httpx.exe +0 -0
  413. package/xll/python/Scripts/idna.exe +0 -0
  414. package/xll/python/Scripts/pip.exe +0 -0
  415. package/xll/python/Scripts/pip3.13.exe +0 -0
  416. package/xll/python/Scripts/pip3.exe +0 -0
  417. package/xll/python/Scripts/pywin32_postinstall.exe +0 -0
  418. package/xll/python/Scripts/pywin32_testall.exe +0 -0
  419. package/dist/app/collab/awareness.d.ts +0 -32
  420. package/dist/app/collab/awareness.js +0 -52
  421. package/dist/app/collab/collab-client.d.ts +0 -37
  422. package/dist/app/collab/collab-client.js +0 -208
  423. package/dist/app/collab/collab-manager.d.ts +0 -91
  424. package/dist/app/collab/collab-manager.js +0 -218
  425. package/dist/app/collab/collab-sync.d.ts +0 -62
  426. package/dist/app/collab/collab-sync.js +0 -215
  427. package/dist/app/collab/index.d.ts +0 -9
  428. package/dist/app/collab/index.js +0 -6
  429. package/dist/app/collab/super-fight.d.ts +0 -90
  430. package/dist/app/collab/super-fight.js +0 -310
  431. package/dist/app/collab/sync-bridge.d.ts +0 -35
  432. package/dist/app/collab/sync-bridge.js +0 -109
  433. package/dist/app/collab/types.d.ts +0 -75
  434. package/dist/app/collab/types.js +0 -5
  435. package/dist/embedded-agent/ai-content.d.ts +0 -52
  436. package/dist/embedded-agent/ai-content.js +0 -101
  437. package/dist/embedded-agent/host-tools/shared/llm-stream.d.ts +0 -31
  438. package/dist/embedded-agent/host-tools/shared/llm-stream.js +0 -136
  439. package/dist/embedded-agent/model-call-orchestrator.d.ts +0 -22
  440. package/dist/embedded-agent/model-call-orchestrator.js +0 -22
  441. package/dist/embedded-agent/stream-errors.d.ts +0 -10
  442. package/dist/embedded-agent/stream-errors.js +0 -73
  443. package/dist/embedded-agent/stream-message-state.d.ts +0 -14
  444. package/dist/embedded-agent/stream-message-state.js +0 -271
  445. package/dist/embedded-agent/stream-sse.d.ts +0 -78
  446. package/dist/embedded-agent/stream-sse.js +0 -73
  447. package/dist/shell/approvals/task-spawn-approval.d.ts +0 -20
  448. package/dist/shell/approvals/task-spawn-approval.js +0 -93
  449. package/dist/shell/interactive/collab-command.d.ts +0 -9
  450. package/dist/shell/interactive/collab-command.js +0 -115
  451. package/dist/shell/interactive/super-fight-ui.d.ts +0 -80
  452. package/dist/shell/interactive/super-fight-ui.js +0 -484
  453. package/dist/shell/status/collab-status.d.ts +0 -18
  454. package/dist/shell/status/collab-status.js +0 -46
  455. package/xll/python/Lib/site-packages/pip/_internal/build_env.py +0 -606
  456. /package/dist/{tui → autocomplete}/skill-autocomplete.js +0 -0
  457. /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/INSTALLER +0 -0
  458. /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/REQUESTED +0 -0
  459. /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/WHEEL +0 -0
  460. /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/entry_points.txt +0 -0
  461. /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/LICENSE.txt +0 -0
  462. /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
  463. /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
  464. /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
  465. /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
  466. /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
  467. /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
  468. /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
  469. /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
  470. /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
  471. /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
  472. /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
  473. /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
  474. /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
  475. /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
  476. /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
  477. /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
  478. /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
  479. /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
  480. /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
@@ -62,6 +62,7 @@ class WheelCommand(RequirementCommand):
62
62
  self.cmd_opts.add_option(cmdoptions.src())
63
63
  self.cmd_opts.add_option(cmdoptions.ignore_requires_python())
64
64
  self.cmd_opts.add_option(cmdoptions.no_deps())
65
+ self.cmd_opts.add_option(cmdoptions.only_deps())
65
66
  self.cmd_opts.add_option(cmdoptions.progress_bar())
66
67
 
67
68
  self.cmd_opts.add_option(
@@ -75,6 +76,7 @@ class WheelCommand(RequirementCommand):
75
76
  self.cmd_opts.add_option(cmdoptions.config_settings())
76
77
 
77
78
  self.cmd_opts.add_option(cmdoptions.require_hashes())
79
+ self.cmd_opts.add_option(cmdoptions.no_require_hashes())
78
80
 
79
81
  index_opts = cmdoptions.make_option_group(
80
82
  cmdoptions.index_group,
@@ -94,6 +96,7 @@ class WheelCommand(RequirementCommand):
94
96
  def run(self, options: Values, args: list[str]) -> int:
95
97
  cmdoptions.check_build_constraints(options)
96
98
  cmdoptions.check_release_control_exclusive(options)
99
+ cmdoptions.check_only_deps_option_does_not_conflict(options)
97
100
 
98
101
  session = self.get_default_session(options)
99
102
 
@@ -123,6 +126,7 @@ class WheelCommand(RequirementCommand):
123
126
  download_dir=options.wheel_dir,
124
127
  use_user_site=False,
125
128
  verbosity=self.verbosity,
129
+ allow_editables=False,
126
130
  )
127
131
 
128
132
  resolver = self.make_resolver(
@@ -151,6 +155,7 @@ class WheelCommand(RequirementCommand):
151
155
  reqs_to_build,
152
156
  wheel_cache=wheel_cache,
153
157
  verify=(not options.no_verify),
158
+ allow_editables=False,
154
159
  )
155
160
  for req in build_successes:
156
161
  assert req.link and req.link.is_wheel
@@ -160,8 +165,9 @@ class WheelCommand(RequirementCommand):
160
165
  shutil.copy(req.local_file_path, options.wheel_dir)
161
166
  except OSError as e:
162
167
  logger.warning(
163
- "Building wheel for %s failed: %s",
168
+ "Failed to copy built wheel %s to %s: %s",
164
169
  req.name,
170
+ options.wheel_dir,
165
171
  e,
166
172
  )
167
173
  build_failures.append(req)
@@ -14,7 +14,6 @@ Some terminology:
14
14
  from __future__ import annotations
15
15
 
16
16
  import configparser
17
- import locale
18
17
  import os
19
18
  import sys
20
19
  from collections.abc import Iterable
@@ -25,7 +24,7 @@ from pip._internal.exceptions import (
25
24
  ConfigurationFileCouldNotBeLoaded,
26
25
  )
27
26
  from pip._internal.utils import appdirs
28
- from pip._internal.utils.compat import WINDOWS
27
+ from pip._internal.utils.compat import WINDOWS, get_locale_encoding
29
28
  from pip._internal.utils.logging import getLogger
30
29
  from pip._internal.utils.misc import ensure_dir, enum
31
30
 
@@ -293,7 +292,7 @@ class Configuration:
293
292
  # Doing this is useful when modifying and saving files, where we don't
294
293
  # need to construct a parser.
295
294
  if os.path.exists(fname):
296
- locale_encoding = locale.getpreferredencoding(False)
295
+ locale_encoding = get_locale_encoding()
297
296
  try:
298
297
  parser.read(fname, encoding=locale_encoding)
299
298
  except UnicodeDecodeError:
@@ -7,7 +7,7 @@ from pip._internal.metadata.base import BaseDistribution
7
7
  from pip._internal.req import InstallRequirement
8
8
 
9
9
  if TYPE_CHECKING:
10
- from pip._internal.build_env import BuildEnvironmentInstaller
10
+ from pip._internal.build_env import BuildEnvironmentInstaller, BuildIsolationMode
11
11
 
12
12
 
13
13
  class AbstractDistribution(metaclass=abc.ABCMeta):
@@ -33,7 +33,8 @@ class AbstractDistribution(metaclass=abc.ABCMeta):
33
33
  super().__init__()
34
34
  self.req = req
35
35
 
36
- @abc.abstractproperty
36
+ @property
37
+ @abc.abstractmethod
37
38
  def build_tracker_id(self) -> str | None:
38
39
  """A string that uniquely identifies this requirement to the build tracker.
39
40
 
@@ -49,7 +50,8 @@ class AbstractDistribution(metaclass=abc.ABCMeta):
49
50
  def prepare_distribution_metadata(
50
51
  self,
51
52
  build_env_installer: BuildEnvironmentInstaller,
52
- build_isolation: bool,
53
+ build_isolation: BuildIsolationMode,
53
54
  check_build_deps: bool,
55
+ allow_editables: bool,
54
56
  ) -> None:
55
57
  raise NotImplementedError()
@@ -6,7 +6,7 @@ from pip._internal.distributions.base import AbstractDistribution
6
6
  from pip._internal.metadata import BaseDistribution
7
7
 
8
8
  if TYPE_CHECKING:
9
- from pip._internal.build_env import BuildEnvironmentInstaller
9
+ from pip._internal.build_env import BuildEnvironmentInstaller, BuildIsolationMode
10
10
 
11
11
 
12
12
  class InstalledDistribution(AbstractDistribution):
@@ -27,7 +27,8 @@ class InstalledDistribution(AbstractDistribution):
27
27
  def prepare_distribution_metadata(
28
28
  self,
29
29
  build_env_installer: BuildEnvironmentInstaller,
30
- build_isolation: bool,
30
+ build_isolation: BuildIsolationMode,
31
31
  check_build_deps: bool,
32
+ allow_editables: bool,
32
33
  ) -> None:
33
34
  pass
@@ -4,7 +4,12 @@ import logging
4
4
  from collections.abc import Iterable
5
5
  from typing import TYPE_CHECKING
6
6
 
7
- from pip._internal.build_env import BuildEnvironment
7
+ from pip._internal.build_env import (
8
+ BuildIsolationMode,
9
+ NoOpBuildEnvironment,
10
+ VenvBuildEnvironment,
11
+ VirtualBuildEnvironment,
12
+ )
8
13
  from pip._internal.distributions.base import AbstractDistribution
9
14
  from pip._internal.exceptions import InstallationError
10
15
  from pip._internal.metadata import BaseDistribution
@@ -35,24 +40,28 @@ class SourceDistribution(AbstractDistribution):
35
40
  def prepare_distribution_metadata(
36
41
  self,
37
42
  build_env_installer: BuildEnvironmentInstaller,
38
- build_isolation: bool,
43
+ build_isolation: BuildIsolationMode,
39
44
  check_build_deps: bool,
45
+ allow_editables: bool,
40
46
  ) -> None:
41
- # Load pyproject.toml
47
+ # Load pyproject.toml and set up backend environment
42
48
  self.req.load_pyproject_toml()
49
+ self._prepare_build_env(build_isolation, build_env_installer)
43
50
 
44
51
  # Set up the build isolation, if this requirement should be isolated
45
- if build_isolation:
52
+ if build_isolation != "off":
46
53
  # Setup an isolated environment and install the build backend static
47
54
  # requirements in it.
48
- self._prepare_build_backend(build_env_installer)
55
+ self._prepare_build_backend()
49
56
  # Check that the build backend supports PEP 660. This cannot be done
50
57
  # earlier because we need to setup the build backend to verify it
51
58
  # supports build_editable, nor can it be done later, because we want
52
59
  # to avoid installing build requirements needlessly.
53
60
  self.req.editable_sanity_check()
54
61
  # Install the dynamic build requirements.
55
- self._install_build_reqs(build_env_installer)
62
+ self._install_build_reqs(
63
+ build_env_installer, allow_editables=allow_editables
64
+ )
56
65
  else:
57
66
  # When not using build isolation, we still need to check that
58
67
  # the build backend supports PEP 660.
@@ -68,20 +77,33 @@ class SourceDistribution(AbstractDistribution):
68
77
  self._raise_conflicts("the backend dependencies", conflicting)
69
78
  if missing:
70
79
  self._raise_missing_reqs(missing)
71
- self.req.prepare_metadata()
80
+ self.req.prepare_metadata(allow_editables)
72
81
 
73
- def _prepare_build_backend(
74
- self, build_env_installer: BuildEnvironmentInstaller
82
+ def _prepare_build_env(
83
+ self,
84
+ build_isolation: BuildIsolationMode,
85
+ build_env_installer: BuildEnvironmentInstaller,
75
86
  ) -> None:
76
- # Isolate in a BuildEnvironment and install the build-time
77
- # requirements.
87
+ if build_isolation == "virtual":
88
+ self.req.build_env = VirtualBuildEnvironment(build_env_installer)
89
+ elif build_isolation == "venv":
90
+ self.req.build_env = VenvBuildEnvironment(build_env_installer)
91
+
92
+ self.req.configure_backend(self.req.build_env.python_executable)
93
+
94
+ def _prepare_build_backend(self) -> None:
95
+ # Install the pyproject.toml declared build-time requirements.
78
96
  pyproject_requires = self.req.pyproject_requires
79
97
  assert pyproject_requires is not None
98
+ assert not isinstance(self.req.build_env, NoOpBuildEnvironment)
80
99
 
81
- self.req.build_env = BuildEnvironment(build_env_installer)
82
- self.req.build_env.install_requirements(
83
- pyproject_requires, "overlay", kind="build dependencies", for_req=self.req
84
- )
100
+ with self.req.build_env:
101
+ self.req.build_env.install_requirements(
102
+ pyproject_requires,
103
+ "overlay",
104
+ kind="build dependencies",
105
+ for_req=self.req,
106
+ )
85
107
  conflicting, missing = self.req.build_env.check_requirements(
86
108
  self.req.requirements_to_check
87
109
  )
@@ -117,14 +139,16 @@ class SourceDistribution(AbstractDistribution):
117
139
  return backend.get_requires_for_build_editable()
118
140
 
119
141
  def _install_build_reqs(
120
- self, build_env_installer: BuildEnvironmentInstaller
142
+ self,
143
+ build_env_installer: BuildEnvironmentInstaller,
144
+ allow_editables: bool,
121
145
  ) -> None:
122
146
  # Install any extra build dependencies that the backend requests.
123
147
  # This must be done in a second pass, as the pyproject.toml
124
148
  # dependencies must be installed before we can call the backend.
125
149
  if (
126
150
  self.req.editable
127
- and self.req.permit_editable_wheels
151
+ and allow_editables
128
152
  and self.req.supports_pyproject_editable
129
153
  ):
130
154
  build_reqs = self._get_build_requires_editable()
@@ -133,9 +157,10 @@ class SourceDistribution(AbstractDistribution):
133
157
  conflicting, missing = self.req.build_env.check_requirements(build_reqs)
134
158
  if conflicting:
135
159
  self._raise_conflicts("the backend dependencies", conflicting)
136
- self.req.build_env.install_requirements(
137
- missing, "normal", kind="backend dependencies", for_req=self.req
138
- )
160
+ with self.req.build_env:
161
+ self.req.build_env.install_requirements(
162
+ missing, "normal", kind="backend dependencies", for_req=self.req
163
+ )
139
164
 
140
165
  def _raise_conflicts(
141
166
  self, conflicting_with: str, conflicting_reqs: set[tuple[str, str]]
@@ -12,7 +12,7 @@ from pip._internal.metadata import (
12
12
  )
13
13
 
14
14
  if TYPE_CHECKING:
15
- from pip._internal.build_env import BuildEnvironmentInstaller
15
+ from pip._internal.build_env import BuildEnvironmentInstaller, BuildIsolationMode
16
16
 
17
17
 
18
18
  class WheelDistribution(AbstractDistribution):
@@ -38,7 +38,8 @@ class WheelDistribution(AbstractDistribution):
38
38
  def prepare_distribution_metadata(
39
39
  self,
40
40
  build_env_installer: BuildEnvironmentInstaller,
41
- build_isolation: bool,
41
+ build_isolation: BuildIsolationMode,
42
42
  check_build_deps: bool,
43
+ allow_editables: bool,
43
44
  ) -> None:
44
45
  pass
@@ -11,6 +11,7 @@ import configparser
11
11
  import contextlib
12
12
  import locale
13
13
  import logging
14
+ import os
14
15
  import pathlib
15
16
  import re
16
17
  import sys
@@ -28,6 +29,7 @@ from pip._vendor.rich.text import Text
28
29
  if TYPE_CHECKING:
29
30
  from hashlib import _Hash
30
31
 
32
+ from pip._vendor import urllib3
31
33
  from pip._vendor.requests.models import PreparedRequest, Request, Response
32
34
 
33
35
  from pip._internal.metadata import BaseDistribution
@@ -337,6 +339,119 @@ class NetworkConnectionError(PipError):
337
339
  return str(self.error_msg)
338
340
 
339
341
 
342
+ class ConnectionFailedError(DiagnosticPipError):
343
+ reference = "connection-failed"
344
+
345
+ def __init__(self, url: str, host: str, error: Exception) -> None:
346
+ from http.client import RemoteDisconnected
347
+
348
+ from pip._vendor.urllib3.exceptions import (
349
+ NameResolutionError,
350
+ NewConnectionError,
351
+ ProtocolError,
352
+ )
353
+
354
+ details = str(error)
355
+ if isinstance(error, NameResolutionError):
356
+ parts = details.split("Failed to resolve ", maxsplit=1)
357
+ if len(parts) == 2:
358
+ details = "Failed to resolve IP address for " + parts[1]
359
+ elif isinstance(error, NewConnectionError):
360
+ parts = details.split("Failed to establish a new connection: ", maxsplit=1)
361
+ if len(parts) == 2:
362
+ _, details = parts
363
+ elif isinstance(error, ProtocolError):
364
+ try:
365
+ reason = error.args[1]
366
+ except IndexError:
367
+ pass
368
+ else:
369
+ if isinstance(reason, (RemoteDisconnected, ConnectionResetError)):
370
+ details = (
371
+ "the connection was closed without a reply from the server."
372
+ )
373
+
374
+ super().__init__(
375
+ message=(
376
+ f"Failed to connect to [magenta]{escape(host)}[/] while fetching "
377
+ f"{escape(url)}"
378
+ ),
379
+ context=Text(details),
380
+ hint_stmt=(
381
+ "Are you connected to the Internet? If so, check whether your system "
382
+ f"can connect to [magenta]{escape(host)}[/] before trying again. "
383
+ "There may be a firewall or proxy that's preventing the connection."
384
+ ),
385
+ )
386
+
387
+
388
+ class ConnectionTimeoutError(DiagnosticPipError):
389
+ reference = "connection-timeout"
390
+
391
+ def __init__(
392
+ self,
393
+ url: str,
394
+ host: str,
395
+ *,
396
+ kind: Literal["connect", "read"],
397
+ timeout: float,
398
+ ) -> None:
399
+ context = Text.assemble(
400
+ (host, "magenta"), f" didn't respond within {timeout} seconds"
401
+ )
402
+ if kind == "connect":
403
+ context.append(" (while establishing a connection)")
404
+ super().__init__(
405
+ message=f"Unable to fetch {escape(url)}",
406
+ context=context,
407
+ hint_stmt=(
408
+ "This is probably a temporary issue with the remote server or the "
409
+ "network connection. If this error persists, check the network "
410
+ "configuration. There may be a firewall or proxy that's preventing "
411
+ "the connection."
412
+ ),
413
+ )
414
+
415
+
416
+ class SSLMissingError(DiagnosticPipError):
417
+ reference = "ssl-missing"
418
+
419
+ def __init__(self, url: str) -> None:
420
+ super().__init__(
421
+ message=f"Failed to establish a secure connection for {escape(url)}",
422
+ context="The 'ssl' module is unavailable but required for HTTPS URLs",
423
+ hint_stmt=None,
424
+ )
425
+
426
+
427
+ class SSLVerificationError(DiagnosticPipError):
428
+ reference = "ssl-verification-failed"
429
+
430
+ def __init__(self, url: str, host: str, error: urllib3.exceptions.SSLError) -> None:
431
+ message = (
432
+ "Failed to establish a secure connection to "
433
+ f"[magenta]{escape(host)}[/] while fetching {escape(url)}"
434
+ )
435
+ hint = "You may need to use --cert or check your proxy/firewall configuration"
436
+ super().__init__(message=message, context=Text(str(error)), hint_stmt=hint)
437
+
438
+
439
+ class ProxyConnectionError(DiagnosticPipError):
440
+ reference = "proxy-connection-failed"
441
+
442
+ def __init__(
443
+ self, url: str, proxy: str, error: urllib3.exceptions.ProxyError
444
+ ) -> None:
445
+ super().__init__(
446
+ message=(
447
+ "Failed to connect to proxy "
448
+ f"[magenta]{escape(proxy)}[/] while fetching {escape(url)}"
449
+ ),
450
+ context=Text(str(error)),
451
+ hint_stmt="This is likely a proxy configuration issue.",
452
+ )
453
+
454
+
340
455
  class InvalidWheelFilename(InstallationError):
341
456
  """Invalid wheel filename."""
342
457
 
@@ -379,6 +494,23 @@ class MetadataInconsistent(InstallationError):
379
494
  )
380
495
 
381
496
 
497
+ class SidecarMetadataInconsistent(MetadataInconsistent):
498
+ """The wheel's METADATA disagrees with its PEP 658 ``.metadata`` file.
499
+
500
+ Raised after the wheel has been downloaded and hash-verified, when a
501
+ resolver-affecting field in the wheel's embedded ``METADATA`` does not
502
+ match the value taken from the remote ``.metadata`` sidecar that drove
503
+ resolution. ``f_val`` is the sidecar value, ``m_val`` is the wheel value.
504
+ """
505
+
506
+ def __str__(self) -> str:
507
+ return (
508
+ f"Requested {self.ireq} has inconsistent {self.field} between "
509
+ f"its PEP 658 .metadata file and the wheel's METADATA: "
510
+ f"sidecar has {self.f_val!r}, wheel has {self.m_val!r}"
511
+ )
512
+
513
+
382
514
  class MetadataInvalid(InstallationError):
383
515
  """Metadata is invalid."""
384
516
 
@@ -969,3 +1101,45 @@ class BuildDependencyInstallError(DiagnosticPipError):
969
1101
  super().__init__(
970
1102
  message=message, context=context, hint_stmt=None, note_stmt=note
971
1103
  )
1104
+
1105
+
1106
+ class VenvImportError(DiagnosticPipError):
1107
+ """Raised when 'venv' can't be imported."""
1108
+
1109
+ reference = "venv-import-error"
1110
+
1111
+ def __init__(self) -> None:
1112
+ if sys.platform != "linux":
1113
+ hint_stmt = None
1114
+ else:
1115
+ hint_stmt = (
1116
+ "If this is an OS-provided Python, it's likely that your OS "
1117
+ "package maintainers have split Python's standard library across "
1118
+ "multiple OS packages."
1119
+ )
1120
+ super().__init__(
1121
+ message="Cannot import the 'venv' module of the Python standard library",
1122
+ context=(
1123
+ "This is a symptom of a broken/modified Python, which cannot be used "
1124
+ "with pip."
1125
+ ),
1126
+ note_stmt="This is an issue with the Python installation itself, not pip.",
1127
+ hint_stmt=hint_stmt,
1128
+ )
1129
+
1130
+
1131
+ class VenvCreationError(DiagnosticPipError):
1132
+ """Raised when a virtual environment can't be created."""
1133
+
1134
+ reference = "venv-creation-error"
1135
+
1136
+ def __init__(self, context: str) -> None:
1137
+ if os.name == "nt":
1138
+ hint = "This may be caused by running antivirus software."
1139
+ else:
1140
+ hint = None
1141
+ super().__init__(
1142
+ message="Cannot create a virtual environment",
1143
+ context=Text(context),
1144
+ hint_stmt=hint,
1145
+ )
@@ -12,21 +12,27 @@ import json
12
12
  import logging
13
13
  import os
14
14
  import urllib.parse
15
- from collections.abc import Iterable, MutableMapping, Sequence
15
+ from collections.abc import Callable, Iterable, MutableMapping, Sequence
16
16
  from dataclasses import dataclass
17
17
  from html.parser import HTMLParser
18
18
  from optparse import Values
19
19
  from typing import (
20
- Callable,
21
20
  NamedTuple,
22
21
  Protocol,
23
22
  )
24
23
 
25
- from pip._vendor import requests
24
+ from pip._vendor.packaging.utils import canonicalize_name
26
25
  from pip._vendor.requests import Response
27
- from pip._vendor.requests.exceptions import RetryError, SSLError
28
-
29
- from pip._internal.exceptions import NetworkConnectionError
26
+ from pip._vendor.requests.exceptions import RetryError
27
+
28
+ from pip._internal.exceptions import (
29
+ ConnectionFailedError,
30
+ ConnectionTimeoutError,
31
+ NetworkConnectionError,
32
+ ProxyConnectionError,
33
+ SSLMissingError,
34
+ SSLVerificationError,
35
+ )
30
36
  from pip._internal.models.link import Link
31
37
  from pip._internal.models.search_scope import SearchScope
32
38
  from pip._internal.network.session import PipSession
@@ -80,7 +86,7 @@ def _ensure_api_header(response: Response) -> None:
80
86
  ):
81
87
  return
82
88
 
83
- raise _NotAPIContent(content_type, response.request.method)
89
+ raise _NotAPIContent(content_type, response.request.method) # type: ignore[arg-type]
84
90
 
85
91
 
86
92
  class _NotHTTP(Exception):
@@ -105,7 +111,11 @@ def _ensure_api_response(url: str, session: PipSession) -> None:
105
111
  _ensure_api_header(resp)
106
112
 
107
113
 
108
- def _get_simple_response(url: str, session: PipSession) -> Response:
114
+ def _get_simple_response(
115
+ url: str,
116
+ session: PipSession,
117
+ force_revalidate: bool = False,
118
+ ) -> Response:
109
119
  """Access an Simple API response with GET, and return the response.
110
120
 
111
121
  This consists of three parts:
@@ -123,32 +133,24 @@ def _get_simple_response(url: str, session: PipSession) -> Response:
123
133
 
124
134
  logger.debug("Getting page %s", redact_auth_from_url(url))
125
135
 
126
- resp = session.get(
127
- url,
128
- headers={
129
- "Accept": ", ".join(
130
- [
131
- "application/vnd.pypi.simple.v1+json",
132
- "application/vnd.pypi.simple.v1+html; q=0.1",
133
- "text/html; q=0.01",
134
- ]
135
- ),
136
- # We don't want to blindly returned cached data for
137
- # /simple/, because authors generally expecting that
138
- # twine upload && pip install will function, but if
139
- # they've done a pip install in the last ~10 minutes
140
- # it won't. Thus by setting this to zero we will not
141
- # blindly use any cached data, however the benefit of
142
- # using max-age=0 instead of no-cache, is that we will
143
- # still support conditional requests, so we will still
144
- # minimize traffic sent in cases where the page hasn't
145
- # changed at all, we will just always incur the round
146
- # trip for the conditional GET now instead of only
147
- # once per 10 minutes.
148
- # For more information, please see pypa/pip#5670.
149
- "Cache-Control": "max-age=0",
150
- },
151
- )
136
+ headers = {
137
+ "Accept": ", ".join(
138
+ [
139
+ "application/vnd.pypi.simple.v1+json",
140
+ "application/vnd.pypi.simple.v1+html; q=0.1",
141
+ "text/html; q=0.01",
142
+ ]
143
+ ),
144
+ }
145
+
146
+ if force_revalidate:
147
+ # Using max-age=0 rather than no-cache still supports conditional
148
+ # requests, minimizing traffic when the page hasn't changed.
149
+ # See pypa/pip#5670.
150
+ logger.debug("Refreshing package index response.")
151
+ headers["Cache-Control"] = "max-age=0"
152
+
153
+ resp = session.get(url, headers=headers)
152
154
  raise_for_status(resp)
153
155
 
154
156
  # The check for archives above only works if the url ends with
@@ -316,7 +318,12 @@ def _make_index_content(
316
318
  )
317
319
 
318
320
 
319
- def _get_index_content(link: Link, *, session: PipSession) -> IndexContent | None:
321
+ def _get_index_content(
322
+ link: Link,
323
+ *,
324
+ session: PipSession,
325
+ force_revalidate: bool = False,
326
+ ) -> IndexContent | None:
320
327
  url = link.url.split("#", 1)[0]
321
328
 
322
329
  # Check for VCS schemes that do not support lookup as web pages.
@@ -343,7 +350,9 @@ def _get_index_content(link: Link, *, session: PipSession) -> IndexContent | Non
343
350
  logger.debug(" file: URL is directory, getting %s", url)
344
351
 
345
352
  try:
346
- resp = _get_simple_response(url, session=session)
353
+ resp = _get_simple_response(
354
+ url, session=session, force_revalidate=force_revalidate
355
+ )
347
356
  except _NotHTTP:
348
357
  logger.warning(
349
358
  "Skipping page %s because it looks like an archive, and cannot "
@@ -359,18 +368,17 @@ def _get_index_content(link: Link, *, session: PipSession) -> IndexContent | Non
359
368
  exc.request_desc,
360
369
  exc.content_type,
361
370
  )
362
- except NetworkConnectionError as exc:
363
- _handle_get_simple_fail(link, exc)
364
- except RetryError as exc:
371
+ except (RetryError, NetworkConnectionError) as exc:
365
372
  _handle_get_simple_fail(link, exc)
366
- except SSLError as exc:
367
- reason = "There was a problem confirming the ssl certificate: "
368
- reason += str(exc)
373
+ except (SSLVerificationError, SSLMissingError) as exc:
374
+ reason = f"There was a problem confirming the ssl certificate: {exc.context}"
369
375
  _handle_get_simple_fail(link, reason, meth=logger.info)
370
- except requests.ConnectionError as exc:
371
- _handle_get_simple_fail(link, f"connection error: {exc}")
372
- except requests.Timeout:
373
- _handle_get_simple_fail(link, "timed out")
376
+ except ConnectionFailedError as exc:
377
+ _handle_get_simple_fail(link, f"connection error: {exc.context}")
378
+ except ProxyConnectionError as exc:
379
+ _handle_get_simple_fail(link, f"proxy connection error: {exc.context}")
380
+ except ConnectionTimeoutError as exc:
381
+ _handle_get_simple_fail(link, str(exc.context))
374
382
  else:
375
383
  return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing)
376
384
  return None
@@ -435,11 +443,25 @@ class LinkCollector:
435
443
  def find_links(self) -> list[str]:
436
444
  return self.search_scope.find_links
437
445
 
438
- def fetch_response(self, location: Link) -> IndexContent | None:
446
+ def fetch_response(
447
+ self, location: Link, package_name: str | None = None
448
+ ) -> IndexContent | None:
439
449
  """
440
450
  Fetch an HTML page containing package links.
441
451
  """
442
- return _get_index_content(location, session=self.session)
452
+ # By default we may return cached /simple/ responses. Users can force
453
+ # revalidation to ensure newly uploaded distributions become visible
454
+ # immediately after publication. See pypa/pip#5670.
455
+ force_revalidate = self.session.refresh_package
456
+ should_force_revalidate = ":all:" in force_revalidate or (
457
+ package_name is not None
458
+ and canonicalize_name(package_name) in force_revalidate
459
+ )
460
+ return _get_index_content(
461
+ location,
462
+ session=self.session,
463
+ force_revalidate=should_force_revalidate,
464
+ )
443
465
 
444
466
  def collect_sources(
445
467
  self,