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
@@ -18,12 +18,11 @@ from collections.abc import Collection, Mapping
18
18
  from dataclasses import dataclass
19
19
 
20
20
  from pip._vendor.packaging import pylock
21
- from pip._vendor.packaging.markers import Marker
21
+ from pip._vendor.packaging.markers import InvalidMarker, Marker
22
22
  from pip._vendor.packaging.requirements import InvalidRequirement, Requirement
23
23
  from pip._vendor.packaging.utils import parse_sdist_filename, parse_wheel_filename
24
24
 
25
25
  from pip._internal.exceptions import InstallationError
26
- from pip._internal.models.format_control import FormatControl
27
26
  from pip._internal.models.index import PyPI, TestPyPI
28
27
  from pip._internal.models.link import Link
29
28
  from pip._internal.models.wheel import Wheel
@@ -55,7 +54,7 @@ logger = logging.getLogger(__name__)
55
54
  operators = ("~=", "==", "!=", "<=", ">=", "<", ">", "===")
56
55
 
57
56
 
58
- def _strip_extras(path: str) -> tuple[str, str | None]:
57
+ def strip_extras(path: str) -> tuple[str, set[str]]:
59
58
  m = re.match(r"^(.+)(\[[^\]]+\])$", path)
60
59
  extras = None
61
60
  if m:
@@ -64,10 +63,10 @@ def _strip_extras(path: str) -> tuple[str, str | None]:
64
63
  else:
65
64
  path_no_extras = path
66
65
 
67
- return path_no_extras, extras
66
+ return path_no_extras, _convert_extras(extras)
68
67
 
69
68
 
70
- def convert_extras(extras: str | None) -> set[str]:
69
+ def _convert_extras(extras: str | None) -> set[str]:
71
70
  if not extras:
72
71
  return set()
73
72
  return get_requirement("placeholder" + extras.lower()).extras
@@ -120,7 +119,7 @@ def _parse_pip_syntax_editable(editable_req: str) -> tuple[str | None, str, set[
120
119
  url = editable_req
121
120
 
122
121
  # If a file path is specified with extras, strip off the extras.
123
- url_no_extras, extras = _strip_extras(url)
122
+ url_no_extras, extras = strip_extras(url)
124
123
 
125
124
  if os.path.isdir(url_no_extras):
126
125
  # Treating it as code that has already been checked out
@@ -128,14 +127,7 @@ def _parse_pip_syntax_editable(editable_req: str) -> tuple[str | None, str, set[
128
127
 
129
128
  if url_no_extras.lower().startswith("file:"):
130
129
  package_name = Link(url_no_extras).egg_fragment
131
- if extras:
132
- return (
133
- package_name,
134
- url_no_extras,
135
- get_requirement("placeholder" + extras.lower()).extras,
136
- )
137
- else:
138
- return package_name, url_no_extras, set()
130
+ return (package_name, url_no_extras, extras)
139
131
 
140
132
  for version_control in vcs:
141
133
  if url.lower().startswith(f"{version_control}:"):
@@ -267,7 +259,6 @@ def install_req_from_editable(
267
259
  hash_options: dict[str, list[str]] | None = None,
268
260
  constraint: bool = False,
269
261
  user_supplied: bool = False,
270
- permit_editable_wheels: bool = False,
271
262
  config_settings: dict[str, str | list[str]] | None = None,
272
263
  ) -> InstallRequirement:
273
264
  if constraint:
@@ -279,7 +270,6 @@ def install_req_from_editable(
279
270
  comes_from=comes_from,
280
271
  user_supplied=user_supplied,
281
272
  editable=True,
282
- permit_editable_wheels=permit_editable_wheels,
283
273
  link=parts.link,
284
274
  constraint=constraint,
285
275
  isolated=isolated,
@@ -353,19 +343,22 @@ def parse_req_from_line(name: str, line_source: str | None) -> RequirementParts:
353
343
  if not markers_as_string:
354
344
  markers = None
355
345
  else:
356
- markers = Marker(markers_as_string)
346
+ try:
347
+ markers = Marker(markers_as_string)
348
+ except InvalidMarker as exc:
349
+ raise InstallationError(f"Invalid requirement: {name.strip()!r}: {exc}")
357
350
  else:
358
351
  markers = None
359
352
  name = name.strip()
360
353
  req_as_string = None
361
354
  path = os.path.normpath(os.path.abspath(name))
362
355
  link = None
363
- extras_as_string = None
364
356
 
365
357
  if is_url(name):
366
358
  link = Link(name)
359
+ extras: set[str] = set()
367
360
  else:
368
- p, extras_as_string = _strip_extras(path)
361
+ p, extras = strip_extras(path)
369
362
  url = _get_url_from_path(p, name)
370
363
  if url is not None:
371
364
  link = Link(url)
@@ -388,8 +381,6 @@ def parse_req_from_line(name: str, line_source: str | None) -> RequirementParts:
388
381
  else:
389
382
  req_as_string = name
390
383
 
391
- extras = convert_extras(extras_as_string)
392
-
393
384
  def with_source(text: str) -> str:
394
385
  if not line_source:
395
386
  return text
@@ -558,7 +549,6 @@ def install_req_drop_extras(ireq: InstallRequirement) -> InstallRequirement:
558
549
  extras=[],
559
550
  config_settings=ireq.config_settings,
560
551
  user_supplied=ireq.user_supplied,
561
- permit_editable_wheels=ireq.permit_editable_wheels,
562
552
  )
563
553
 
564
554
 
@@ -594,65 +584,57 @@ def install_req_from_pylock_package(
594
584
  | pylock.PackageWheel
595
585
  ),
596
586
  pylock_path_or_url: str,
597
- format_control: FormatControl,
598
587
  user_supplied: bool,
599
- ) -> InstallRequirement:
600
- pass
588
+ ) -> tuple[InstallRequirement, Link | None]:
589
+ """Construct an InstallRequirement from a pylock package and artifact.
590
+
591
+ If the artifact is a Sdist or Wheel, also return a locked Link which
592
+ is meant to override candidates from indexes or --find-links.
593
+ """
601
594
  # TODO: validate file size
602
595
  if isinstance(package_dist, pylock.PackageVcs):
603
- return InstallRequirement(
604
- req=Requirement(
605
- f"{package.name} @ "
606
- f"{package_vcs_requirement_url(pylock_path_or_url, package_dist)}"
596
+ req_url = package_vcs_requirement_url(pylock_path_or_url, package_dist)
597
+ return (
598
+ InstallRequirement(
599
+ req=Requirement(f"{package.name} @ {req_url}"),
600
+ comes_from=pylock_path_or_url,
601
+ user_supplied=user_supplied,
607
602
  ),
608
- comes_from=pylock_path_or_url,
609
- user_supplied=user_supplied,
603
+ None,
610
604
  )
611
605
  elif isinstance(package_dist, pylock.PackageArchive):
612
- return InstallRequirement(
613
- req=Requirement(
614
- f"{package.name} @ "
615
- f"{package_archive_requirement_url(pylock_path_or_url, package_dist)}"
606
+ req_url = package_archive_requirement_url(pylock_path_or_url, package_dist)
607
+ return (
608
+ InstallRequirement(
609
+ req=Requirement(f"{package.name} @ {req_url}"),
610
+ comes_from=pylock_path_or_url,
611
+ hash_options=_pylock_hashes_to_hash_options(package_dist.hashes),
612
+ user_supplied=user_supplied,
616
613
  ),
617
- comes_from=pylock_path_or_url,
618
- hash_options=_pylock_hashes_to_hash_options(package_dist.hashes),
619
- user_supplied=user_supplied,
614
+ None,
620
615
  )
621
616
  elif isinstance(package_dist, pylock.PackageDirectory):
622
- req = package_directory_requirement_url(pylock_path_or_url, package_dist)
617
+ req_url = package_directory_requirement_url(pylock_path_or_url, package_dist)
623
618
  if package_dist.editable:
624
- return install_req_from_editable(
625
- req,
626
- comes_from=pylock_path_or_url,
627
- user_supplied=user_supplied,
619
+ return (
620
+ install_req_from_editable(
621
+ req_url,
622
+ comes_from=pylock_path_or_url,
623
+ user_supplied=user_supplied,
624
+ ),
625
+ None,
628
626
  )
629
627
  else:
630
- return install_req_from_line(
631
- req,
632
- comes_from=pylock_path_or_url,
633
- user_supplied=user_supplied,
628
+ return (
629
+ install_req_from_line(
630
+ req_url,
631
+ comes_from=pylock_path_or_url,
632
+ user_supplied=user_supplied,
633
+ ),
634
+ None,
634
635
  )
635
636
  else:
636
637
  # wheel or sdist
637
- allowed_formats = format_control.get_allowed_formats(package.name)
638
- if (
639
- isinstance(package_dist, pylock.PackageSdist)
640
- and "source" not in allowed_formats
641
- ):
642
- raise InstallationError(
643
- f"source distributions are not permitted for package {package.name!r} "
644
- f"and there is no compatible wheel for it in {pylock_path_or_url!r}"
645
- )
646
- if (
647
- isinstance(package_dist, pylock.PackageWheel)
648
- and "binary" not in allowed_formats
649
- ):
650
- if not package.sdist:
651
- raise InstallationError(
652
- f"binaries are not permitted for package {package.name!r} and "
653
- f"there is no source distribution for it in {pylock_path_or_url!r}"
654
- )
655
- package_dist = package.sdist
656
638
  version = package.version
657
639
  if isinstance(package_dist, pylock.PackageWheel):
658
640
  if not version:
@@ -669,9 +651,12 @@ def install_req_from_pylock_package(
669
651
  ireq = InstallRequirement(
670
652
  req=Requirement(f"{package.name}=={version}"),
671
653
  comes_from=pylock_path_or_url,
672
- locked_link=Link(requirement_url),
673
- locked_version=version,
674
654
  hash_options=_pylock_hashes_to_hash_options(package_dist.hashes),
675
655
  user_supplied=user_supplied,
676
656
  )
677
- return ireq
657
+ locked_link = Link(
658
+ requirement_url,
659
+ comes_from=pylock_path_or_url,
660
+ upload_time=package_dist.upload_time,
661
+ )
662
+ return ireq, locked_link
@@ -5,7 +5,6 @@ Requirements file parsing
5
5
  from __future__ import annotations
6
6
 
7
7
  import codecs
8
- import locale
9
8
  import logging
10
9
  import optparse
11
10
  import os
@@ -13,13 +12,12 @@ import re
13
12
  import shlex
14
13
  import sys
15
14
  import urllib.parse
16
- from collections.abc import Generator, Iterable
15
+ from collections.abc import Callable, Generator, Iterable
17
16
  from dataclasses import dataclass
18
17
  from optparse import Values
19
18
  from typing import (
20
19
  TYPE_CHECKING,
21
20
  Any,
22
- Callable,
23
21
  NoReturn,
24
22
  )
25
23
 
@@ -27,6 +25,7 @@ from pip._internal.cli import cmdoptions
27
25
  from pip._internal.exceptions import InstallationError, RequirementsFileParseError
28
26
  from pip._internal.models.release_control import ReleaseControl
29
27
  from pip._internal.models.search_scope import SearchScope
28
+ from pip._internal.utils.compat import get_locale_encoding
30
29
 
31
30
  if TYPE_CHECKING:
32
31
  from pip._internal.index.package_finder import PackageFinder
@@ -59,6 +58,7 @@ SUPPORTED_OPTIONS: list[Callable[..., optparse.Option]] = [
59
58
  cmdoptions.only_binary,
60
59
  cmdoptions.prefer_binary,
61
60
  cmdoptions.require_hashes,
61
+ cmdoptions.no_require_hashes,
62
62
  cmdoptions.pre,
63
63
  cmdoptions.all_releases,
64
64
  cmdoptions.only_final,
@@ -225,6 +225,8 @@ def handle_option_line(
225
225
  # percolate options upward
226
226
  if opts.require_hashes:
227
227
  options.require_hashes = opts.require_hashes
228
+ if opts.no_require_hashes:
229
+ options.no_require_hashes = opts.no_require_hashes
228
230
  if opts.features_enabled:
229
231
  options.features_enabled.extend(
230
232
  f for f in opts.features_enabled if f not in options.features_enabled
@@ -519,8 +521,6 @@ def join_lines(lines_enum: ReqFileLines) -> ReqFileLines:
519
521
  assert primary_line_number is not None
520
522
  yield primary_line_number, "".join(new_line)
521
523
 
522
- # TODO: handle space after '\'.
523
-
524
524
 
525
525
  def ignore_comments(lines_enum: ReqFileLines) -> ReqFileLines:
526
526
  """
@@ -608,7 +608,7 @@ def _decode_req_file(data: bytes, url: str) -> str:
608
608
  try:
609
609
  return data.decode(DEFAULT_ENCODING)
610
610
  except UnicodeDecodeError:
611
- locale_encoding = locale.getpreferredencoding(False) or sys.getdefaultencoding()
611
+ locale_encoding = get_locale_encoding() or sys.getdefaultencoding()
612
612
  logging.warning(
613
613
  "unable to decode data from %s with default encoding %s, "
614
614
  "falling back to encoding from locale: %s. "
@@ -34,7 +34,6 @@ from pip._internal.models.direct_url import DirectUrl
34
34
  from pip._internal.models.link import Link
35
35
  from pip._internal.operations.build.metadata import generate_metadata
36
36
  from pip._internal.operations.build.metadata_editable import generate_editable_metadata
37
- from pip._internal.operations.install.wheel import install_wheel
38
37
  from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path
39
38
  from pip._internal.req.req_uninstall import UninstallPathSet
40
39
  from pip._internal.utils.deprecation import deprecated
@@ -80,16 +79,12 @@ class InstallRequirement:
80
79
  constraint: bool = False,
81
80
  extras: Collection[str] = (),
82
81
  user_supplied: bool = False,
83
- permit_editable_wheels: bool = False,
84
- locked_link: Link | None = None,
85
- locked_version: Version | None = None,
86
82
  ) -> None:
87
83
  assert req is None or isinstance(req, Requirement), req
88
84
  self.req = req
89
85
  self.comes_from = comes_from
90
86
  self.constraint = constraint
91
87
  self.editable = editable
92
- self.permit_editable_wheels = permit_editable_wheels
93
88
 
94
89
  # source_dir is the local directory where the linked requirement is
95
90
  # located, or unpacked. In case unpacking is needed, creating and
@@ -109,14 +104,6 @@ class InstallRequirement:
109
104
  link = Link(req.url)
110
105
  self.link = self.original_link = link
111
106
 
112
- # locked_link is the link from the lock file that must be used.
113
- # A locked link InstallRequirement behaves similarly as a regular requirement
114
- # that would be searched in indexes, except its artifact URL is known
115
- # in advance. Notably, and contrarily to direct URL requirements and direct URL
116
- # constraints, they do not cause the recording of direct_url.json.
117
- self.locked_link = locked_link
118
- self.locked_version = locked_version
119
-
120
107
  # When this InstallRequirement is a wheel obtained from the cache of locally
121
108
  # built wheels, this is the source link corresponding to the cache entry, which
122
109
  # was used to download and build the cached wheel.
@@ -180,6 +167,8 @@ class InstallRequirement:
180
167
  self.requirements_to_check: list[str] = []
181
168
 
182
169
  # The PEP 517 backend we should use to build the project
170
+ self._pep517_backend_spec: str
171
+ self._pep517_backend_path: str | None
183
172
  self.pep517_backend: BuildBackendHookCaller | None = None
184
173
 
185
174
  # This requirement needs more preparation before it can be built
@@ -496,11 +485,21 @@ class InstallRequirement:
496
485
  requires, backend, check, backend_path = pyproject_toml_data
497
486
  self.requirements_to_check = check
498
487
  self.pyproject_requires = requires
488
+ self._pep517_backend_spec = backend
489
+ self._pep517_backend_path = backend_path
490
+
491
+ def configure_backend(self, python_executable: str) -> None:
492
+ """Set up the build backend hook caller.
493
+
494
+ This is done separately after pyproject.toml loading as the backend
495
+ need to be called with the build environment's Python executable,
496
+ which can vary."""
499
497
  self.pep517_backend = ConfiguredBuildBackendHookCaller(
500
498
  self,
501
499
  self.unpacked_source_directory,
502
- backend,
503
- backend_path=backend_path,
500
+ self._pep517_backend_spec,
501
+ backend_path=self._pep517_backend_path,
502
+ python_executable=python_executable,
504
503
  )
505
504
 
506
505
  def editable_sanity_check(self) -> None:
@@ -516,7 +515,7 @@ class InstallRequirement:
516
515
  f"Consider using a build backend that supports PEP 660."
517
516
  )
518
517
 
519
- def prepare_metadata(self) -> None:
518
+ def prepare_metadata(self, allow_editables: bool) -> None:
520
519
  """Ensure that project metadata is available.
521
520
 
522
521
  Under PEP 517 and PEP 660, call the backend hook to prepare the metadata.
@@ -526,11 +525,7 @@ class InstallRequirement:
526
525
  details = self.name or f"from {self.link}"
527
526
 
528
527
  assert self.pep517_backend is not None
529
- if (
530
- self.editable
531
- and self.permit_editable_wheels
532
- and self.supports_pyproject_editable
533
- ):
528
+ if self.editable and allow_editables and self.supports_pyproject_editable:
534
529
  self.metadata_directory = generate_editable_metadata(
535
530
  build_env=self.build_env,
536
531
  backend=self.pep517_backend,
@@ -774,7 +769,15 @@ class InstallRequirement:
774
769
  warn_script_location: bool = True,
775
770
  use_user_site: bool = False,
776
771
  pycompile: bool = True,
772
+ script_executable: str | None = None,
777
773
  ) -> None:
774
+ # Lazy import to avoid transitively importing `_vendor.distlib.compat`
775
+ # which in turn imports `urllib.request` which is slow.
776
+ # During an actual installation, `urllib.request` will end up imported anyway,
777
+ # but `req.req_install` (this module) is also imported from commands that
778
+ # don't actually install anything (e.g. `pip freeze` or `pip show`).
779
+ from pip._internal.operations.install.wheel import install_wheel
780
+
778
781
  assert self.req is not None
779
782
  scheme = get_scheme(
780
783
  self.req.name,
@@ -797,6 +800,7 @@ class InstallRequirement:
797
800
  warn_script_location=warn_script_location,
798
801
  direct_url=self.download_info if self.is_direct else None,
799
802
  requested=self.user_supplied,
803
+ script_executable=script_executable,
800
804
  )
801
805
  self.install_succeeded = True
802
806
 
@@ -4,9 +4,9 @@ import functools
4
4
  import os
5
5
  import sys
6
6
  import sysconfig
7
- from collections.abc import Generator, Iterable
7
+ from collections.abc import Callable, Generator, Iterable
8
8
  from importlib.util import cache_from_source
9
- from typing import Any, Callable
9
+ from typing import Any
10
10
 
11
11
  from pip._internal.exceptions import LegacyDistutilsInstall, UninstallMissingRecord
12
12
  from pip._internal.locations import get_bin_prefix, get_bin_user
@@ -96,14 +96,19 @@ def compact(paths: Iterable[str]) -> set[str]:
96
96
 
97
97
  sep = os.path.sep
98
98
  short_paths: set[str] = set()
99
+ prefixes: set[str] = set()
100
+
99
101
  for path in sorted(paths, key=len):
100
- should_skip = any(
101
- path.startswith(shortpath.rstrip("*"))
102
- and path[len(shortpath.rstrip("*").rstrip(sep))] == sep
103
- for shortpath in short_paths
104
- )
105
- if not should_skip:
102
+ current = path[:-1] if path.endswith(sep + "*") else path
103
+ parent = current.rstrip(sep)
104
+ while parent:
105
+ if parent in prefixes:
106
+ break
107
+ next_parent = os.path.dirname(parent).rstrip(sep)
108
+ parent = "" if next_parent == parent else next_parent
109
+ else:
106
110
  short_paths.add(path)
111
+ prefixes.add(current.rstrip(sep))
107
112
  return short_paths
108
113
 
109
114
 
@@ -1,10 +1,10 @@
1
- from typing import Callable, Optional
1
+ from collections.abc import Callable
2
2
 
3
3
  from pip._internal.req.req_install import InstallRequirement
4
4
  from pip._internal.req.req_set import RequirementSet
5
5
 
6
6
  InstallRequirementProvider = Callable[
7
- [str, Optional[InstallRequirement]], InstallRequirement
7
+ [str, InstallRequirement | None], InstallRequirement
8
8
  ]
9
9
 
10
10
 
@@ -17,7 +17,6 @@ import sys
17
17
  from collections import defaultdict
18
18
  from collections.abc import Iterable
19
19
  from itertools import chain
20
- from typing import Optional
21
20
 
22
21
  from pip._vendor.packaging import specifiers
23
22
  from pip._vendor.packaging.requirements import Requirement
@@ -52,7 +51,7 @@ from pip._internal.utils.packaging import check_requires_python
52
51
 
53
52
  logger = logging.getLogger(__name__)
54
53
 
55
- DiscoveredDependencies = defaultdict[Optional[str], list[InstallRequirement]]
54
+ DiscoveredDependencies = defaultdict[str | None, list[InstallRequirement]]
56
55
 
57
56
 
58
57
  def _check_dist_requires_python(
@@ -124,6 +123,7 @@ class Resolver(BaseResolver):
124
123
  make_install_req: InstallRequirementProvider,
125
124
  use_user_site: bool,
126
125
  ignore_dependencies: bool,
126
+ only_dependencies: bool, # unused, for compatibility with new resolver
127
127
  ignore_installed: bool,
128
128
  ignore_requires_python: bool,
129
129
  force_reinstall: bool,
@@ -12,7 +12,7 @@ from pip._internal.models.link import Link, links_equivalent
12
12
  from pip._internal.req.req_install import InstallRequirement
13
13
  from pip._internal.utils.hashes import Hashes
14
14
 
15
- CandidateLookup = tuple[Optional["Candidate"], Optional[InstallRequirement]]
15
+ CandidateLookup = tuple[Optional["Candidate"], InstallRequirement | None]
16
16
 
17
17
 
18
18
  def format_name(project: NormalizedName, extras: frozenset[NormalizedName]) -> str:
@@ -101,7 +101,6 @@ def make_install_req_from_editable(
101
101
  comes_from=template.comes_from,
102
102
  isolated=template.isolated,
103
103
  constraint=template.constraint,
104
- permit_editable_wheels=template.permit_editable_wheels,
105
104
  hash_options=template.hash_options,
106
105
  config_settings=template.config_settings,
107
106
  )
@@ -4,10 +4,9 @@ import contextlib
4
4
  import copy
5
5
  import functools
6
6
  import logging
7
- from collections.abc import Iterable, Iterator, Mapping, Sequence
7
+ from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
8
8
  from typing import (
9
9
  TYPE_CHECKING,
10
- Callable,
11
10
  NamedTuple,
12
11
  Protocol,
13
12
  TypeVar,
@@ -19,6 +18,7 @@ from pip._vendor.packaging.specifiers import SpecifierSet
19
18
  from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
20
19
  from pip._vendor.packaging.version import InvalidVersion, Version
21
20
  from pip._vendor.resolvelib import ResolutionImpossible
21
+ from pip._vendor.rich.markup import escape
22
22
 
23
23
  from pip._internal.cache import CacheEntry, WheelCache
24
24
  from pip._internal.exceptions import (
@@ -32,7 +32,6 @@ from pip._internal.exceptions import (
32
32
  )
33
33
  from pip._internal.index.package_finder import PackageFinder
34
34
  from pip._internal.metadata import BaseDistribution, get_default_environment
35
- from pip._internal.models.candidate import InstallationCandidate
36
35
  from pip._internal.models.link import Link
37
36
  from pip._internal.models.wheel import Wheel
38
37
  from pip._internal.operations.prepare import RequirementPreparer
@@ -214,8 +213,8 @@ class Factory:
214
213
  except (MetadataInconsistent, MetadataInvalid) as e:
215
214
  logger.info(
216
215
  "Discarding [blue underline]%s[/]: [yellow]%s[reset]",
217
- link,
218
- e,
216
+ escape(str(link)),
217
+ escape(str(e)),
219
218
  extra={"markup": True},
220
219
  )
221
220
  self._build_failures[link] = e
@@ -235,39 +234,14 @@ class Factory:
235
234
  except MetadataInconsistent as e:
236
235
  logger.info(
237
236
  "Discarding [blue underline]%s[/]: [yellow]%s[reset]",
238
- link,
239
- e,
237
+ escape(str(link)),
238
+ escape(str(e)),
240
239
  extra={"markup": True},
241
240
  )
242
241
  self._build_failures[link] = e
243
242
  return None
244
243
  return self._link_candidate_cache[link]
245
244
 
246
- def _get_locked_installation_candidate(
247
- self, ireqs: Sequence[InstallRequirement], name: str, specifier: SpecifierSet
248
- ) -> InstallationCandidate | None:
249
- locked_ireqs = [ireq for ireq in ireqs if ireq.locked_link]
250
- if not locked_ireqs:
251
- return None
252
- if len(locked_ireqs) > 1:
253
- raise InstallationError(
254
- f"Multiple locks provided for package {name!r} in "
255
- f"{', '.join(str(lir.comes_from) for lir in locked_ireqs)}"
256
- )
257
- locked_ireq = locked_ireqs[0]
258
- assert locked_ireq.locked_link
259
- assert locked_ireq.locked_version
260
- if not specifier.contains(locked_ireq.locked_version):
261
- raise InstallationError(
262
- f"Locked version {locked_ireq.locked_version!s} "
263
- f"for package {name!r} from {locked_ireq.comes_from!r} "
264
- f"is not compatible with other requirements "
265
- f"for the same package ({specifier!s})"
266
- )
267
- return InstallationCandidate(
268
- name, str(locked_ireq.locked_version), locked_ireq.locked_link
269
- )
270
-
271
245
  def _iter_found_candidates(
272
246
  self,
273
247
  ireqs: Sequence[InstallRequirement],
@@ -335,20 +309,12 @@ class Factory:
335
309
  return candidate
336
310
 
337
311
  def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]:
338
- if locked_ican := self._get_locked_installation_candidate(
339
- ireqs, name, specifier
340
- ):
341
- # Locked InstallRequirements must behave as if they would have
342
- # been found on an index, except the link is already known, so we don't
343
- # ask the finder for the best candidate in that case.
344
- icans = [locked_ican]
345
- else:
346
- result = self._finder.find_best_candidate(
347
- project_name=name,
348
- specifier=specifier,
349
- hashes=hashes,
350
- )
351
- icans = result.applicable_candidates
312
+ result = self._finder.find_best_candidate(
313
+ project_name=name,
314
+ specifier=specifier,
315
+ hashes=hashes,
316
+ )
317
+ icans = result.applicable_candidates
352
318
 
353
319
  # PEP 592: Yanked releases are ignored unless the specifier
354
320
  # explicitly pins a version (via '==' or '===') that can be
@@ -757,6 +723,7 @@ class Factory:
757
723
 
758
724
  # Check if only final releases are allowed for this package
759
725
  version_type = "version"
726
+ allows_pre = None
760
727
  if self._finder.release_control is not None:
761
728
  allows_pre = self._finder.release_control.allows_prereleases(
762
729
  canonicalize_name(req.project_name)
@@ -764,12 +731,32 @@ class Factory:
764
731
  if allows_pre is False:
765
732
  version_type = "final version"
766
733
 
767
- logger.critical(
768
- "Could not find a %s that satisfies the requirement %s (from versions: %s)",
769
- version_type,
770
- req_disp,
771
- ", ".join(versions) or "none",
772
- )
734
+ if len(cands) == 1 and cands[0].locked:
735
+ # The package finder ensures that requirements from pylock files
736
+ # have exactly one candidate. So we can provide a specific error
737
+ # message in this case.
738
+ if cands[0].version.is_prerelease and allows_pre is False:
739
+ logger.critical(
740
+ "A pre-release version %s is specified in a provided lock file "
741
+ "for %s but only final versions are allowed",
742
+ cands[0].version,
743
+ cands[0].name,
744
+ )
745
+ else:
746
+ logger.critical(
747
+ "The requirement %s is not compatible with "
748
+ "version %s specified in a provided lock file",
749
+ req_disp,
750
+ ", ".join(versions),
751
+ )
752
+ else:
753
+ logger.critical(
754
+ "Could not find a %s that satisfies the requirement %s "
755
+ "(from versions: %s)",
756
+ version_type,
757
+ req_disp,
758
+ ", ".join(versions) or "none",
759
+ )
773
760
  if str(req) == "requirements.txt":
774
761
  logger.info(
775
762
  "HINT: You are attempting to install a package literally "