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
@@ -11,8 +11,8 @@ something.
11
11
  from __future__ import annotations
12
12
 
13
13
  import logging
14
- from collections.abc import Iterator, Sequence
15
- from typing import Any, Callable, Optional
14
+ from collections.abc import Callable, Iterator, Sequence
15
+ from typing import Any
16
16
 
17
17
  from pip._vendor.packaging.version import _BaseVersion
18
18
 
@@ -22,7 +22,7 @@ from .base import Candidate
22
22
 
23
23
  logger = logging.getLogger(__name__)
24
24
 
25
- IndexCandidateInfo = tuple[_BaseVersion, Callable[[], Optional[Candidate]]]
25
+ IndexCandidateInfo = tuple[_BaseVersion, Callable[[], Candidate | None]]
26
26
 
27
27
 
28
28
  def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]:
@@ -84,6 +84,7 @@ class PipProvider(_ProviderBase):
84
84
  :params constraints: A mapping of constraints specified by the user. Keys
85
85
  are canonicalized project names.
86
86
  :params ignore_dependencies: Whether the user specified ``--no-deps``.
87
+ :params only_dependencies: Whether the user specified ``--only-deps``.
87
88
  :params upgrade_strategy: The user-specified upgrade strategy.
88
89
  :params user_requested: A set of canonicalized package names that the user
89
90
  supplied for pip to install/upgrade.
@@ -94,12 +95,14 @@ class PipProvider(_ProviderBase):
94
95
  factory: Factory,
95
96
  constraints: dict[str, Constraint],
96
97
  ignore_dependencies: bool,
98
+ only_dependencies: bool,
97
99
  upgrade_strategy: str,
98
100
  user_requested: dict[str, int],
99
101
  ) -> None:
100
102
  self._factory = factory
101
103
  self._constraints = constraints
102
104
  self._ignore_dependencies = ignore_dependencies
105
+ self._only_dependencies = only_dependencies
103
106
  self._upgrade_strategy = upgrade_strategy
104
107
  self._user_requested = user_requested
105
108
  self._conflict_counts: defaultdict[str, int] = defaultdict(int)
@@ -49,6 +49,7 @@ class Resolver(BaseResolver):
49
49
  make_install_req: InstallRequirementProvider,
50
50
  use_user_site: bool,
51
51
  ignore_dependencies: bool,
52
+ only_dependencies: bool,
52
53
  ignore_installed: bool,
53
54
  ignore_requires_python: bool,
54
55
  force_reinstall: bool,
@@ -57,6 +58,7 @@ class Resolver(BaseResolver):
57
58
  ):
58
59
  super().__init__()
59
60
  assert upgrade_strategy in self._allowed_strategies
61
+ assert not (ignore_dependencies and only_dependencies)
60
62
 
61
63
  self.factory = Factory(
62
64
  finder=finder,
@@ -70,6 +72,7 @@ class Resolver(BaseResolver):
70
72
  py_version_info=py_version_info,
71
73
  )
72
74
  self.ignore_dependencies = ignore_dependencies
75
+ self.only_dependencies = only_dependencies
73
76
  self.upgrade_strategy = upgrade_strategy
74
77
  self._result: Result | None = None
75
78
 
@@ -81,6 +84,7 @@ class Resolver(BaseResolver):
81
84
  factory=self.factory,
82
85
  constraints=collected.constraints,
83
86
  ignore_dependencies=self.ignore_dependencies,
87
+ only_dependencies=self.only_dependencies,
84
88
  upgrade_strategy=self.upgrade_strategy,
85
89
  user_requested=collected.user_requested,
86
90
  )
@@ -181,6 +185,11 @@ class Resolver(BaseResolver):
181
185
 
182
186
  req_set.add_named_requirement(ireq)
183
187
 
188
+ if self.only_dependencies:
189
+ for requested in collected.user_requested:
190
+ project_name = requested.partition("[")[0]
191
+ req_set.requirements.pop(project_name, None)
192
+
184
193
  return req_set
185
194
 
186
195
  def get_installation_order(
@@ -2,12 +2,13 @@
2
2
  distributions."""
3
3
 
4
4
  import importlib.resources
5
+ import locale
5
6
  import logging
6
7
  import os
7
8
  import sys
8
9
  from typing import IO
9
10
 
10
- __all__ = ["get_path_uid", "stdlib_pkgs", "tomllib", "WINDOWS"]
11
+ __all__ = ["get_locale_encoding", "get_path_uid", "tomllib", "WINDOWS"]
11
12
 
12
13
 
13
14
  logger = logging.getLogger(__name__)
@@ -26,6 +27,19 @@ def has_tls() -> bool:
26
27
  return IS_PYOPENSSL
27
28
 
28
29
 
30
+ def get_locale_encoding() -> str:
31
+ """Return the locale encoding.
32
+
33
+ Uses ``locale.getencoding()`` when available (Python 3.11+) to avoid the
34
+ ``EncodingWarning`` that ``locale.getpreferredencoding(False)`` raises
35
+ under UTF-8 Mode.
36
+ """
37
+ # TODO: Remove the 3.10 fallback once pip drops Python 3.10 support.
38
+ if sys.version_info >= (3, 11):
39
+ return locale.getencoding()
40
+ return locale.getpreferredencoding(False)
41
+
42
+
29
43
  def get_path_uid(path: str) -> int:
30
44
  """
31
45
  Return path's uid.
@@ -73,13 +87,5 @@ else:
73
87
  from pip._vendor import tomli as tomllib
74
88
 
75
89
 
76
- # packages in the stdlib that may have installation metadata, but should not be
77
- # considered 'installed'. this theoretically could be determined based on
78
- # dist.location (py27:`sysconfig.get_paths()['stdlib']`,
79
- # py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may
80
- # make this ineffective, so hard-coding
81
- stdlib_pkgs = {"python", "wsgiref", "argparse"}
82
-
83
-
84
90
  # windows detection, covers cpython and ironpython
85
91
  WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt")
@@ -5,6 +5,7 @@ A module that implements tooling to enable easy warnings about deprecations.
5
5
  from __future__ import annotations
6
6
 
7
7
  import logging
8
+ import os
8
9
  import warnings
9
10
  from typing import Any, TextIO
10
11
 
@@ -48,7 +49,11 @@ def _showwarning(
48
49
 
49
50
  def install_warning_logger() -> None:
50
51
  # Enable our Deprecation Warnings
51
- warnings.simplefilter("default", PipDeprecationWarning, append=True)
52
+ # If we're running pip test suite, promote the PipDeprecationWarning into errors.
53
+ if os.environ.get("_PIP_TEST_ENV", None):
54
+ warnings.simplefilter("error", PipDeprecationWarning)
55
+ else:
56
+ warnings.simplefilter("default", PipDeprecationWarning, append=True)
52
57
 
53
58
  global _original_showwarning
54
59
 
@@ -5,11 +5,11 @@ import os
5
5
  import os.path
6
6
  import random
7
7
  import sys
8
- from collections.abc import Generator
8
+ from collections.abc import Callable, Generator
9
9
  from contextlib import contextmanager
10
10
  from pathlib import Path
11
11
  from tempfile import NamedTemporaryFile
12
- from typing import Any, BinaryIO, Callable, cast
12
+ from typing import Any, BinaryIO, cast
13
13
 
14
14
  from pip._internal.utils.compat import get_path_uid
15
15
  from pip._internal.utils.misc import format_size
@@ -29,7 +29,7 @@ from pip._vendor.rich.style import Style
29
29
  from pip._internal.utils._log import VERBOSE, getLogger
30
30
  from pip._internal.utils.compat import WINDOWS
31
31
  from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX
32
- from pip._internal.utils.misc import StreamWrapper, ensure_dir
32
+ from pip._internal.utils.misc import StreamWrapper, ensure_dir, looks_like_ci
33
33
 
34
34
  _log_state = threading.local()
35
35
  _stdout_console = None
@@ -320,8 +320,16 @@ def setup_logging(verbosity: int, no_color: bool, user_log_file: str | None) ->
320
320
  ["user_log"] if include_user_log else []
321
321
  )
322
322
  global _stdout_console, stderr_console
323
- _stdout_console = PipConsole(file=sys.stdout, no_color=no_color, soft_wrap=True)
324
- _stderr_console = PipConsole(file=sys.stderr, no_color=no_color, soft_wrap=True)
323
+ console_options: dict[str, Any] = {"no_color": no_color, "soft_wrap": True}
324
+ if looks_like_ci():
325
+ # Don't animate progress bars and status spinners when running
326
+ # in CI. A lot of CI workflows use FORCE_COLOR and similar envvars
327
+ # so their CI output remains colorized, but this causes rich to
328
+ # assume a fully interactive terminal, resulting in any animated
329
+ # output to span many lines which is distracting (and unhelpful).
330
+ console_options["force_interactive"] = False
331
+ _stdout_console = PipConsole(file=sys.stdout, **console_options)
332
+ _stderr_console = PipConsole(file=sys.stderr, **console_options)
325
333
 
326
334
  logging.config.dictConfig(
327
335
  {
@@ -5,13 +5,14 @@ import getpass
5
5
  import hashlib
6
6
  import logging
7
7
  import os
8
+ import pathlib
8
9
  import posixpath
9
10
  import shutil
10
11
  import stat
11
12
  import sys
12
13
  import sysconfig
13
14
  import urllib.parse
14
- from collections.abc import Generator, Iterable, Iterator, Mapping, Sequence
15
+ from collections.abc import Callable, Generator, Iterable, Iterator, Mapping, Sequence
15
16
  from dataclasses import dataclass
16
17
  from functools import partial
17
18
  from io import StringIO
@@ -21,8 +22,6 @@ from types import FunctionType, TracebackType
21
22
  from typing import (
22
23
  Any,
23
24
  BinaryIO,
24
- Callable,
25
- Optional,
26
25
  TextIO,
27
26
  TypeVar,
28
27
  cast,
@@ -31,6 +30,7 @@ from typing import (
31
30
  from pip._vendor.packaging.requirements import Requirement
32
31
  from pip._vendor.pyproject_hooks import BuildBackendHookCaller
33
32
 
33
+ from pip import __file__ as pip_location
34
34
  from pip import __version__
35
35
  from pip._internal.exceptions import CommandError, ExternallyManagedEnvironment
36
36
  from pip._internal.locations import get_major_minor_version
@@ -52,6 +52,7 @@ __all__ = [
52
52
  "ensure_dir",
53
53
  "remove_auth_from_url",
54
54
  "check_externally_managed",
55
+ "looks_like_ci",
55
56
  "ConfiguredBuildBackendHookCaller",
56
57
  ]
57
58
 
@@ -60,11 +61,28 @@ logger = logging.getLogger(__name__)
60
61
  T = TypeVar("T")
61
62
  ExcInfo = tuple[type[BaseException], BaseException, TracebackType]
62
63
  VersionInfo = tuple[int, int, int]
63
- NetlocTuple = tuple[str, tuple[Optional[str], Optional[str]]]
64
+ NetlocTuple = tuple[str, tuple[str | None, str | None]]
64
65
  OnExc = Callable[[FunctionType, Path, BaseException], Any]
65
66
  OnErr = Callable[[FunctionType, Path, ExcInfo], Any]
66
67
 
67
68
  FILE_CHUNK_SIZE = 1024 * 1024
69
+ # These are environment variables present when running under various
70
+ # CI systems. For each variable, some CI systems that use the variable
71
+ # are indicated. The collection was chosen so that for each of a number
72
+ # of popular systems, at least one of the environment variables is used.
73
+ # This list is used to provide some indication of and lower bound for
74
+ # CI traffic to PyPI. Thus, it is okay if the list is not comprehensive.
75
+ # For more background, see: https://github.com/pypa/pip/issues/5499
76
+ CI_ENVIRONMENT_VARIABLES = (
77
+ # Azure Pipelines
78
+ "BUILD_BUILDID",
79
+ # Jenkins
80
+ "BUILD_ID",
81
+ # AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI
82
+ "CI",
83
+ # Explicit environment variable.
84
+ "PIP_IS_CI",
85
+ )
68
86
 
69
87
 
70
88
  def get_pip_version() -> str:
@@ -74,6 +92,22 @@ def get_pip_version() -> str:
74
92
  return f"pip {__version__} from {pip_pkg_dir} (python {get_major_minor_version()})"
75
93
 
76
94
 
95
+ def get_runnable_pip() -> str:
96
+ """Get a file to pass to a Python executable, to run the currently-running pip.
97
+
98
+ This is used to run a pip subprocess, for installing requirements into the build
99
+ environment.
100
+ """
101
+ source = pathlib.Path(pip_location).resolve().parent
102
+
103
+ if not source.is_dir():
104
+ # This would happen if someone is using pip from inside a zip file. In that
105
+ # case, we can use that directly.
106
+ return str(source)
107
+
108
+ return os.fsdecode(source / "__pip-runner__.py")
109
+
110
+
77
111
  def normalize_version_info(py_version_info: tuple[int, ...]) -> tuple[int, int, int]:
78
112
  """
79
113
  Convert a tuple of ints representing a Python version to one of length
@@ -769,3 +803,13 @@ def warn_if_run_as_root() -> None:
769
803
  "Use the --root-user-action option if you know what you are doing and "
770
804
  "want to suppress this warning."
771
805
  )
806
+
807
+
808
+ def looks_like_ci() -> bool:
809
+ """
810
+ Return whether it looks like pip is running under CI.
811
+ """
812
+ # We don't use the method of checking for a tty (e.g. using isatty())
813
+ # because some CI systems mimic a tty (e.g. Travis CI). Thus that
814
+ # method doesn't provide definitive information in either direction.
815
+ return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES)
@@ -19,7 +19,7 @@ from pip._vendor.packaging.pylock import (
19
19
  )
20
20
  from pip._vendor.packaging.version import Version
21
21
 
22
- from pip._internal.exceptions import InstallationError
22
+ from pip._internal.exceptions import DiagnosticPipError, InstallationError
23
23
  from pip._internal.models.link import Link
24
24
  from pip._internal.utils.compat import tomllib
25
25
  from pip._internal.utils.urls import path_to_url, url_to_path
@@ -156,7 +156,19 @@ def _package_dist_url(
156
156
  if not os.path.isabs(path):
157
157
  # relative path, join to pylock location
158
158
  if _is_url(pylock_path_or_url):
159
- return urljoin(pylock_path_or_url, path)
159
+ dist_url = urljoin(pylock_path_or_url, path)
160
+ # os.path.isabs does not treat a scheme-carrying value like
161
+ # "file:..." as absolute, so it reaches here and urljoin honors
162
+ # its scheme, discarding the pylock base. Only keep the result
163
+ # if its scheme and host still match the lock's own.
164
+ base = urlsplit(pylock_path_or_url)
165
+ target = urlsplit(dist_url)
166
+ if (target.scheme, target.netloc) != (base.scheme, base.netloc):
167
+ raise InstallationError(
168
+ f"Path {path!r} in pylock file obtained from a URL "
169
+ f"resolves outside its location: {pylock_path_or_url!r}"
170
+ )
171
+ return dist_url
160
172
  else:
161
173
  return path_to_url(
162
174
  os.path.join(os.path.dirname(pylock_path_or_url), path)
@@ -263,6 +275,8 @@ def select_from_pylock_path_or_url(
263
275
  ]:
264
276
  try:
265
277
  pylock_content = _get_pylock_path_or_url_content(pylock_path_or_url, session)
278
+ except DiagnosticPipError:
279
+ raise
266
280
  except Exception as exc:
267
281
  raise InstallationError(
268
282
  f"Error reading pylock file {pylock_path_or_url!r}: {exc}"
@@ -276,6 +290,8 @@ def select_from_pylock_path_or_url(
276
290
  ) from exc
277
291
 
278
292
  try:
293
+ # TODO: for completeness, pylock.select should support preferring sdist
294
+ # over wheels to support --no-binary
279
295
  yield from lock.select()
280
296
  except Exception as exc:
281
297
  raise InstallationError(
@@ -1,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import functools
4
+ from collections.abc import Callable
4
5
  from time import perf_counter, sleep
5
- from typing import TYPE_CHECKING, Callable, TypeVar
6
+ from typing import TYPE_CHECKING, TypeVar
6
7
 
7
8
  if TYPE_CHECKING:
8
9
  from typing_extensions import ParamSpec
@@ -4,8 +4,8 @@ import logging
4
4
  import os
5
5
  import shlex
6
6
  import subprocess
7
- from collections.abc import Iterable, Mapping
8
- from typing import Any, Callable, Literal, Union
7
+ from collections.abc import Callable, Iterable, Mapping
8
+ from typing import Any, Literal
9
9
 
10
10
  from pip._vendor.rich.markup import escape
11
11
 
@@ -14,7 +14,7 @@ from pip._internal.exceptions import InstallationSubprocessError
14
14
  from pip._internal.utils.logging import VERBOSE, subprocess_logger
15
15
  from pip._internal.utils.misc import HiddenText
16
16
 
17
- CommandArgs = list[Union[str, HiddenText]]
17
+ CommandArgs = list[str | HiddenText]
18
18
 
19
19
 
20
20
  def make_command(*args: str | HiddenText | CommandArgs) -> CommandArgs:
@@ -134,6 +134,7 @@ def call_subprocess(
134
134
  stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE,
135
135
  cwd=cwd,
136
136
  env=env,
137
+ encoding="locale",
137
138
  errors="backslashreplace",
138
139
  )
139
140
  except Exception as exc:
@@ -6,12 +6,11 @@ import logging
6
6
  import os.path
7
7
  import tempfile
8
8
  import traceback
9
- from collections.abc import Generator
9
+ from collections.abc import Callable, Generator
10
10
  from contextlib import ExitStack, contextmanager
11
11
  from pathlib import Path
12
12
  from typing import (
13
13
  Any,
14
- Callable,
15
14
  TypeVar,
16
15
  )
17
16
 
@@ -76,13 +76,22 @@ def has_leading_dir(paths: Iterable[str]) -> bool:
76
76
  return True
77
77
 
78
78
 
79
- def is_within_directory(directory: str, target: str) -> bool:
79
+ def is_within_directory(
80
+ directory: str, target: str, *, resolve_symlinks: bool = False
81
+ ) -> bool:
80
82
  """
81
83
  Return true if the absolute path of target is within the directory
82
84
  (including when target is equal to the directory).
85
+
86
+ When ``resolve_symlinks`` is true, resolve symlinks before comparing so
87
+ traversal through a symlink (e.g. "link/../file") is also caught.
83
88
  """
84
- abs_directory = os.path.abspath(directory)
85
- abs_target = os.path.abspath(target)
89
+ if resolve_symlinks:
90
+ abs_directory = os.path.realpath(directory)
91
+ abs_target = os.path.realpath(target)
92
+ else:
93
+ abs_directory = os.path.abspath(directory)
94
+ abs_target = os.path.abspath(target)
86
95
 
87
96
  return abs_target == abs_directory or abs_target.startswith(abs_directory + os.sep)
88
97
 
@@ -277,7 +286,13 @@ def _untar_without_filter(
277
286
  if leading:
278
287
  fn = split_leading_dir(fn)[1]
279
288
  path = os.path.join(location, fn)
280
- if not is_within_directory(location, path):
289
+
290
+ # The plain check rejects textual ".." escapes; resolving symlinks also
291
+ # catches a later member redirected outside by an earlier member's
292
+ # symlink (e.g. "link/../file").
293
+ if not is_within_directory(location, path) or not is_within_directory(
294
+ location, path, resolve_symlinks=True
295
+ ):
281
296
  message = (
282
297
  "The tar file ({}) has a file ({}) trying to install "
283
298
  "outside target directory ({})"
@@ -286,6 +301,17 @@ def _untar_without_filter(
286
301
  if member.isdir():
287
302
  ensure_dir(path)
288
303
  elif member.issym():
304
+ # Reject symlinks resolving outside the destination, so a later
305
+ # member cannot be written through them.
306
+ target = os.path.join(os.path.dirname(path), member.linkname)
307
+ if not is_within_directory(location, target, resolve_symlinks=True):
308
+ message = (
309
+ "The tar file ({}) has a file ({}) trying to install "
310
+ "outside target directory ({})"
311
+ )
312
+ raise InstallationError(
313
+ message.format(filename, member.name, member.linkname)
314
+ )
289
315
  if not is_symlink_target_in_tar(tar, member):
290
316
  message = (
291
317
  "The tar file ({}) has a file ({}) trying to install "
@@ -1,7 +1,6 @@
1
1
  import os
2
2
  import string
3
- import urllib.parse
4
- import urllib.request
3
+ import urllib.parse # noqa: F401
5
4
 
6
5
  from .compat import WINDOWS
7
6
 
@@ -11,6 +10,8 @@ def path_to_url(path: str) -> str:
11
10
  Convert a path to a file: URL. The path will be made absolute and have
12
11
  quoted path parts.
13
12
  """
13
+ import urllib.request
14
+
14
15
  path = os.path.normpath(os.path.abspath(path))
15
16
  url = urllib.parse.urljoin("file://", urllib.request.pathname2url(path))
16
17
  return url
@@ -20,6 +21,8 @@ def url_to_path(url: str) -> str:
20
21
  """
21
22
  Convert a file: URL to a path.
22
23
  """
24
+ import urllib.request
25
+
23
26
  assert url.startswith(
24
27
  "file:"
25
28
  ), f"You can only turn file: urls into filenames (not {url!r})"
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import logging
4
4
  import os
5
5
  import re
6
- import site
7
6
  import sys
8
7
 
9
8
  logger = logging.getLogger(__name__)
@@ -12,7 +11,7 @@ _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile(
12
11
  )
13
12
 
14
13
 
15
- def _running_under_venv() -> bool:
14
+ def running_under_virtualenv() -> bool:
16
15
  """Checks if sys.base_prefix and sys.prefix match.
17
16
 
18
17
  This handles PEP 405 compliant virtual environments.
@@ -20,20 +19,6 @@ def _running_under_venv() -> bool:
20
19
  return sys.prefix != getattr(sys, "base_prefix", sys.prefix)
21
20
 
22
21
 
23
- def _running_under_legacy_virtualenv() -> bool:
24
- """Checks if sys.real_prefix is set.
25
-
26
- This handles virtual environments created with pypa's virtualenv.
27
- """
28
- # pypa/virtualenv case
29
- return hasattr(sys, "real_prefix")
30
-
31
-
32
- def running_under_virtualenv() -> bool:
33
- """True if we're running inside a virtual environment, False otherwise."""
34
- return _running_under_venv() or _running_under_legacy_virtualenv()
35
-
36
-
37
22
  def _get_pyvenv_cfg_lines() -> list[str] | None:
38
23
  """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines
39
24
 
@@ -78,28 +63,9 @@ def _no_global_under_venv() -> bool:
78
63
  return False
79
64
 
80
65
 
81
- def _no_global_under_legacy_virtualenv() -> bool:
82
- """Check if "no-global-site-packages.txt" exists beside site.py
83
-
84
- This mirrors logic in pypa/virtualenv for determining whether system
85
- site-packages are visible in the virtual environment.
86
- """
87
- site_mod_dir = os.path.dirname(os.path.abspath(site.__file__))
88
- no_global_site_packages_file = os.path.join(
89
- site_mod_dir,
90
- "no-global-site-packages.txt",
91
- )
92
- return os.path.exists(no_global_site_packages_file)
93
-
94
-
95
66
  def virtualenv_no_global() -> bool:
96
67
  """Returns a boolean, whether running in venv with no system site-packages."""
97
- # PEP 405 compliance needs to be checked first since virtualenv >=20 would
98
- # return True for both checks, but is only able to use the PEP 405 config.
99
- if _running_under_venv():
68
+ if running_under_virtualenv():
100
69
  return _no_global_under_venv()
101
70
 
102
- if _running_under_legacy_virtualenv():
103
- return _no_global_under_legacy_virtualenv()
104
-
105
71
  return False
@@ -5,12 +5,11 @@ import os.path
5
5
  import pathlib
6
6
  import re
7
7
  import urllib.parse
8
- import urllib.request
9
8
  from dataclasses import replace
10
9
  from typing import Any
11
10
 
12
11
  from pip._internal.exceptions import BadCommand, InstallationError
13
- from pip._internal.utils.misc import HiddenText, display_path, hide_url
12
+ from pip._internal.utils.misc import HiddenText, display_path, hide_url, strtobool
14
13
  from pip._internal.utils.subprocess import make_command
15
14
  from pip._internal.vcs.versioncontrol import (
16
15
  AuthInfo,
@@ -281,7 +280,9 @@ class Git(VersionControl):
281
280
  flags = ()
282
281
  else:
283
282
  flags = ("--verbose", "--progress")
284
- if self.get_git_version() >= (2, 17):
283
+ if self.get_git_version() >= (2, 17) and not strtobool(
284
+ os.environ.get("PIP_NO_PARTIAL_CLONE_FOR_BROKEN_GIT_SERVER", "no")
285
+ ):
285
286
  # Git added support for partial clone in 2.17
286
287
  # https://git-scm.com/docs/partial-clone
287
288
  # Speeds up cloning by functioning without a complete copy of repository
@@ -438,7 +439,7 @@ class Git(VersionControl):
438
439
  if os.path.exists(url):
439
440
  # A local bare remote (git clone --mirror).
440
441
  # Needs a file:// prefix.
441
- return pathlib.PurePath(url).as_uri()
442
+ return pathlib.Path(url).as_uri()
442
443
  scp_match = SCP_REGEX.match(url)
443
444
  if scp_match:
444
445
  # Add an ssh:// prefix and replace the ':' with a '/'.
@@ -453,7 +454,7 @@ class Git(VersionControl):
453
454
  """
454
455
  try:
455
456
  cls.run_command(
456
- ["rev-parse", "-q", "--verify", "sha^" + rev],
457
+ ["rev-parse", "-q", "--verify", rev + "^{commit}"],
457
458
  cwd=location,
458
459
  log_failed_cmd=False,
459
460
  )
@@ -500,6 +501,8 @@ class Git(VersionControl):
500
501
  work with a ssh:// scheme (e.g. GitHub). But we need a scheme for
501
502
  parsing. Hence we remove it again afterwards and return it as a stub.
502
503
  """
504
+ import urllib.request
505
+
503
506
  # Works around an apparent Git bug
504
507
  # (see https://article.gmane.org/gmane.comp.version-control.git/146500)
505
508
  scheme, netloc, path, query, fragment = urlsplit(url)
@@ -12,7 +12,6 @@ from dataclasses import dataclass, field
12
12
  from typing import (
13
13
  Any,
14
14
  Literal,
15
- Optional,
16
15
  )
17
16
 
18
17
  from pip._internal.cli.spinners import SpinnerInterface
@@ -39,7 +38,7 @@ __all__ = ["vcs"]
39
38
 
40
39
  logger = logging.getLogger(__name__)
41
40
 
42
- AuthInfo = tuple[Optional[str], Optional[str]]
41
+ AuthInfo = tuple[str | None, str | None]
43
42
 
44
43
 
45
44
  def is_url(name: str) -> bool:
@@ -49,6 +49,9 @@ def _should_cache(
49
49
  if req.editable or not req.source_dir:
50
50
  # never cache editable requirements
51
51
  return False
52
+ if req.link and req.link.is_existing_dir():
53
+ # never cache local directory requirements
54
+ return False
52
55
 
53
56
  if req.link and req.link.is_vcs:
54
57
  # VCS checkout. Do not cache
@@ -205,6 +208,7 @@ def build(
205
208
  requirements: Iterable[InstallRequirement],
206
209
  wheel_cache: WheelCache,
207
210
  verify: bool,
211
+ allow_editables: bool,
208
212
  ) -> BuildResult:
209
213
  """Build wheels.
210
214
 
@@ -229,7 +233,7 @@ def build(
229
233
  req,
230
234
  cache_dir,
231
235
  verify,
232
- req.editable and req.permit_editable_wheels,
236
+ req.editable and allow_editables,
233
237
  )
234
238
  if wheel_file:
235
239
  # Record the download origin in the cache