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
@@ -15,10 +15,21 @@ PROPS = (
15
15
  "user_pictures_dir",
16
16
  "user_videos_dir",
17
17
  "user_music_dir",
18
+ "user_projects_dir",
19
+ "user_publicshare_dir",
20
+ "user_templates_dir",
21
+ "user_fonts_dir",
22
+ "user_preference_dir",
23
+ "user_bin_dir",
24
+ "site_bin_dir",
25
+ "user_applications_dir",
18
26
  "user_runtime_dir",
19
27
  "site_data_dir",
20
28
  "site_config_dir",
21
29
  "site_cache_dir",
30
+ "site_state_dir",
31
+ "site_log_dir",
32
+ "site_applications_dir",
22
33
  "site_runtime_dir",
23
34
  )
24
35
 
@@ -0,0 +1,171 @@
1
+ """XDG environment variable mixin for Unix and macOS."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ from .api import PlatformDirsABC
8
+
9
+
10
+ class XDGMixin(PlatformDirsABC):
11
+ """Mixin that checks XDG environment variables, falling back to platform-specific defaults via ``super()``."""
12
+
13
+ @property
14
+ def user_data_dir(self) -> str:
15
+ """:returns: data directory tied to the user, from ``$XDG_DATA_HOME`` if set, else platform default"""
16
+ if path := os.environ.get("XDG_DATA_HOME", "").strip():
17
+ return self._append_app_name_and_version(path)
18
+ return super().user_data_dir
19
+
20
+ @property
21
+ def _site_data_dirs(self) -> list[str]:
22
+ if xdg_dirs := os.environ.get("XDG_DATA_DIRS", "").strip():
23
+ return [self._append_app_name_and_version(p) for p in xdg_dirs.split(os.pathsep) if p.strip()]
24
+ return super()._site_data_dirs
25
+
26
+ @property
27
+ def site_data_dir(self) -> str:
28
+ """:returns: data directories shared by users, from ``$XDG_DATA_DIRS`` if set, else platform default"""
29
+ dirs = self._site_data_dirs
30
+ return os.pathsep.join(dirs) if self.multipath else dirs[0]
31
+
32
+ @property
33
+ def user_config_dir(self) -> str:
34
+ """:returns: config directory tied to the user, from ``$XDG_CONFIG_HOME`` if set, else platform default"""
35
+ if path := os.environ.get("XDG_CONFIG_HOME", "").strip():
36
+ return self._append_app_name_and_version(path)
37
+ return super().user_config_dir
38
+
39
+ @property
40
+ def _site_config_dirs(self) -> list[str]:
41
+ if xdg_dirs := os.environ.get("XDG_CONFIG_DIRS", "").strip():
42
+ return [self._append_app_name_and_version(p) for p in xdg_dirs.split(os.pathsep) if p.strip()]
43
+ return super()._site_config_dirs
44
+
45
+ @property
46
+ def site_config_dir(self) -> str:
47
+ """:returns: config directories shared by users, from ``$XDG_CONFIG_DIRS`` if set, else platform default"""
48
+ dirs = self._site_config_dirs
49
+ return os.pathsep.join(dirs) if self.multipath else dirs[0]
50
+
51
+ @property
52
+ def user_cache_dir(self) -> str:
53
+ """:returns: cache directory tied to the user, from ``$XDG_CACHE_HOME`` if set, else platform default"""
54
+ if path := os.environ.get("XDG_CACHE_HOME", "").strip():
55
+ return self._append_app_name_and_version(path)
56
+ return super().user_cache_dir
57
+
58
+ @property
59
+ def user_state_dir(self) -> str:
60
+ """:returns: state directory tied to the user, from ``$XDG_STATE_HOME`` if set, else platform default"""
61
+ if path := os.environ.get("XDG_STATE_HOME", "").strip():
62
+ return self._append_app_name_and_version(path)
63
+ return super().user_state_dir
64
+
65
+ @property
66
+ def user_runtime_dir(self) -> str:
67
+ """:returns: runtime directory tied to the user, from ``$XDG_RUNTIME_DIR`` if set, else platform default"""
68
+ if path := os.environ.get("XDG_RUNTIME_DIR", "").strip():
69
+ return self._append_app_name_and_version(path)
70
+ return super().user_runtime_dir
71
+
72
+ @property
73
+ def site_runtime_dir(self) -> str:
74
+ """:returns: runtime directory shared by users, from ``$XDG_RUNTIME_DIR`` if set, else platform default"""
75
+ if path := os.environ.get("XDG_RUNTIME_DIR", "").strip():
76
+ return self._append_app_name_and_version(path)
77
+ return super().site_runtime_dir
78
+
79
+ @property
80
+ def user_documents_dir(self) -> str:
81
+ """:returns: documents directory tied to the user, from ``$XDG_DOCUMENTS_DIR`` if set, else platform default"""
82
+ if path := os.environ.get("XDG_DOCUMENTS_DIR", "").strip():
83
+ return os.path.expanduser(path) # noqa: PTH111
84
+ return super().user_documents_dir
85
+
86
+ @property
87
+ def user_downloads_dir(self) -> str:
88
+ """:returns: downloads directory tied to the user, from ``$XDG_DOWNLOAD_DIR`` if set, else platform default"""
89
+ if path := os.environ.get("XDG_DOWNLOAD_DIR", "").strip():
90
+ return os.path.expanduser(path) # noqa: PTH111
91
+ return super().user_downloads_dir
92
+
93
+ @property
94
+ def user_pictures_dir(self) -> str:
95
+ """:returns: pictures directory tied to the user, from ``$XDG_PICTURES_DIR`` if set, else platform default"""
96
+ if path := os.environ.get("XDG_PICTURES_DIR", "").strip():
97
+ return os.path.expanduser(path) # noqa: PTH111
98
+ return super().user_pictures_dir
99
+
100
+ @property
101
+ def user_videos_dir(self) -> str:
102
+ """:returns: videos directory tied to the user, from ``$XDG_VIDEOS_DIR`` if set, else platform default"""
103
+ if path := os.environ.get("XDG_VIDEOS_DIR", "").strip():
104
+ return os.path.expanduser(path) # noqa: PTH111
105
+ return super().user_videos_dir
106
+
107
+ @property
108
+ def user_music_dir(self) -> str:
109
+ """:returns: music directory tied to the user, from ``$XDG_MUSIC_DIR`` if set, else platform default"""
110
+ if path := os.environ.get("XDG_MUSIC_DIR", "").strip():
111
+ return os.path.expanduser(path) # noqa: PTH111
112
+ return super().user_music_dir
113
+
114
+ @property
115
+ def user_desktop_dir(self) -> str:
116
+ """:returns: desktop directory tied to the user, from ``$XDG_DESKTOP_DIR`` if set, else platform default"""
117
+ if path := os.environ.get("XDG_DESKTOP_DIR", "").strip():
118
+ return os.path.expanduser(path) # noqa: PTH111
119
+ return super().user_desktop_dir
120
+
121
+ @property
122
+ def user_projects_dir(self) -> str:
123
+ """:returns: projects directory tied to the user, from ``$XDG_PROJECTS_DIR`` if set, else platform default"""
124
+ if path := os.environ.get("XDG_PROJECTS_DIR", "").strip():
125
+ return os.path.expanduser(path) # noqa: PTH111 # API returns str, not Path
126
+ return super().user_projects_dir
127
+
128
+ @property
129
+ def user_publicshare_dir(self) -> str:
130
+ """:returns: public share directory tied to the user, from ``$XDG_PUBLICSHARE_DIR`` if set, else platform default"""
131
+ if path := os.environ.get("XDG_PUBLICSHARE_DIR", "").strip():
132
+ return os.path.expanduser(path) # noqa: PTH111 # API returns str, not Path
133
+ return super().user_publicshare_dir
134
+
135
+ @property
136
+ def user_templates_dir(self) -> str:
137
+ """:returns: templates directory tied to the user, from ``$XDG_TEMPLATES_DIR`` if set, else platform default"""
138
+ if path := os.environ.get("XDG_TEMPLATES_DIR", "").strip():
139
+ return os.path.expanduser(path) # noqa: PTH111 # API returns str, not Path
140
+ return super().user_templates_dir
141
+
142
+ @property
143
+ def user_fonts_dir(self) -> str:
144
+ """:returns: fonts directory tied to the user, from ``$XDG_DATA_HOME/fonts`` if set, else platform default"""
145
+ if path := os.environ.get("XDG_DATA_HOME", "").strip():
146
+ return f"{os.path.expanduser(path)}/fonts" # noqa: PTH111 # API returns str, not Path
147
+ return super().user_fonts_dir
148
+
149
+ @property
150
+ def user_applications_dir(self) -> str:
151
+ """:returns: applications directory tied to the user, from ``$XDG_DATA_HOME`` if set, else platform default"""
152
+ if path := os.environ.get("XDG_DATA_HOME", "").strip():
153
+ return os.path.join(os.path.expanduser(path), "applications") # noqa: PTH111, PTH118
154
+ return super().user_applications_dir
155
+
156
+ @property
157
+ def _site_applications_dirs(self) -> list[str]:
158
+ if xdg_dirs := os.environ.get("XDG_DATA_DIRS", "").strip():
159
+ return [os.path.join(p, "applications") for p in xdg_dirs.split(os.pathsep) if p.strip()] # noqa: PTH118
160
+ return super()._site_applications_dirs
161
+
162
+ @property
163
+ def site_applications_dir(self) -> str:
164
+ """:returns: applications directories shared by users, from ``$XDG_DATA_DIRS`` if set, else platform default"""
165
+ dirs = self._site_applications_dirs
166
+ return os.pathsep.join(dirs) if self.multipath else dirs[0]
167
+
168
+
169
+ __all__ = [
170
+ "XDGMixin",
171
+ ]
@@ -11,114 +11,165 @@ from typing import TYPE_CHECKING, cast
11
11
  from .api import PlatformDirsABC
12
12
 
13
13
 
14
- class Android(PlatformDirsABC):
15
- """
16
- Follows the guidance `from here <https://android.stackexchange.com/a/216132>`_.
14
+ class Android(PlatformDirsABC): # noqa: PLR0904
15
+ """Platform directories for Android.
16
+
17
+ Follows the guidance `from here <https://android.stackexchange.com/a/216132>`_. Directories are typically located
18
+ under the app's private storage (``/data/user/<userid>/<packagename>/``).
17
19
 
18
20
  Makes use of the `appname <platformdirs.api.PlatformDirsABC.appname>`, `version
19
- <platformdirs.api.PlatformDirsABC.version>`, `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`.
21
+ <platformdirs.api.PlatformDirsABC.version>`, `opinion <platformdirs.api.PlatformDirsABC.opinion>`, `ensure_exists
22
+ <platformdirs.api.PlatformDirsABC.ensure_exists>`.
20
23
 
21
24
  """
22
25
 
23
26
  @property
24
27
  def user_data_dir(self) -> str:
25
- """:return: data directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/<AppName>``"""
28
+ """:returns: data directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/<AppName>``"""
26
29
  return self._append_app_name_and_version(cast("str", _android_folder()), "files")
27
30
 
28
31
  @property
29
32
  def site_data_dir(self) -> str:
30
- """:return: data directory shared by users, same as `user_data_dir`"""
33
+ """:returns: data directory shared by users, same as `user_data_dir`"""
31
34
  return self.user_data_dir
32
35
 
33
36
  @property
34
37
  def user_config_dir(self) -> str:
35
- """
36
- :return: config directory tied to the user, e.g. \
37
- ``/data/user/<userid>/<packagename>/shared_prefs/<AppName>``
38
- """
38
+ """:returns: config directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/shared_prefs/<AppName>``"""
39
39
  return self._append_app_name_and_version(cast("str", _android_folder()), "shared_prefs")
40
40
 
41
41
  @property
42
42
  def site_config_dir(self) -> str:
43
- """:return: config directory shared by the users, same as `user_config_dir`"""
43
+ """:returns: config directory shared by users, same as `user_config_dir`"""
44
44
  return self.user_config_dir
45
45
 
46
46
  @property
47
47
  def user_cache_dir(self) -> str:
48
- """:return: cache directory tied to the user, e.g.,``/data/user/<userid>/<packagename>/cache/<AppName>``"""
48
+ """:returns: cache directory tied to the user, e.g.,``/data/user/<userid>/<packagename>/cache/<AppName>``"""
49
49
  return self._append_app_name_and_version(cast("str", _android_folder()), "cache")
50
50
 
51
51
  @property
52
52
  def site_cache_dir(self) -> str:
53
- """:return: cache directory shared by users, same as `user_cache_dir`"""
53
+ """:returns: cache directory shared by users, same as `user_cache_dir`"""
54
54
  return self.user_cache_dir
55
55
 
56
56
  @property
57
57
  def user_state_dir(self) -> str:
58
- """:return: state directory tied to the user, same as `user_data_dir`"""
58
+ """:returns: state directory tied to the user, same as `user_data_dir`"""
59
59
  return self.user_data_dir
60
60
 
61
+ @property
62
+ def site_state_dir(self) -> str:
63
+ """:returns: state directory shared by users, same as `user_state_dir`"""
64
+ return self.user_state_dir
65
+
61
66
  @property
62
67
  def user_log_dir(self) -> str:
63
- """
64
- :return: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it,
65
- e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/log``
66
- """
68
+ """:returns: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it, e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/log``"""
67
69
  path = self.user_cache_dir
68
70
  if self.opinion:
69
71
  path = os.path.join(path, "log") # noqa: PTH118
72
+ self._optionally_create_directory(path)
70
73
  return path
71
74
 
75
+ @property
76
+ def site_log_dir(self) -> str:
77
+ """:returns: log directory shared by users, same as `user_log_dir`"""
78
+ return self.user_log_dir
79
+
72
80
  @property
73
81
  def user_documents_dir(self) -> str:
74
- """:return: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``"""
82
+ """:returns: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``"""
75
83
  return _android_documents_folder()
76
84
 
77
85
  @property
78
86
  def user_downloads_dir(self) -> str:
79
- """:return: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``"""
87
+ """:returns: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``"""
80
88
  return _android_downloads_folder()
81
89
 
82
90
  @property
83
91
  def user_pictures_dir(self) -> str:
84
- """:return: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``"""
92
+ """:returns: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``"""
85
93
  return _android_pictures_folder()
86
94
 
87
95
  @property
88
96
  def user_videos_dir(self) -> str:
89
- """:return: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``"""
97
+ """:returns: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``"""
90
98
  return _android_videos_folder()
91
99
 
92
100
  @property
93
101
  def user_music_dir(self) -> str:
94
- """:return: music directory tied to the user e.g. ``/storage/emulated/0/Music``"""
102
+ """:returns: music directory tied to the user e.g. ``/storage/emulated/0/Music``"""
95
103
  return _android_music_folder()
96
104
 
97
105
  @property
98
106
  def user_desktop_dir(self) -> str:
99
- """:return: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``"""
107
+ """:returns: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``"""
100
108
  return "/storage/emulated/0/Desktop"
101
109
 
110
+ @property
111
+ def user_projects_dir(self) -> str:
112
+ """:returns: projects directory tied to the user e.g. ``/storage/emulated/0/Projects``"""
113
+ return "/storage/emulated/0/Projects"
114
+
115
+ @property
116
+ def user_publicshare_dir(self) -> str:
117
+ """:returns: public share directory tied to the user e.g. ``/storage/emulated/0/Public``"""
118
+ return "/storage/emulated/0/Public"
119
+
120
+ @property
121
+ def user_templates_dir(self) -> str:
122
+ """:returns: templates directory tied to the user e.g. ``/storage/emulated/0/Templates``"""
123
+ return "/storage/emulated/0/Templates"
124
+
125
+ @property
126
+ def user_fonts_dir(self) -> str:
127
+ """:returns: fonts directory tied to the user e.g. ``/storage/emulated/0/fonts``"""
128
+ return "/storage/emulated/0/fonts"
129
+
130
+ @property
131
+ def user_preference_dir(self) -> str:
132
+ """:returns: preference directory tied to the user, same as ``user_config_dir``"""
133
+ return self.user_config_dir
134
+
135
+ @property
136
+ def user_bin_dir(self) -> str:
137
+ """:returns: bin directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/bin``"""
138
+ return os.path.join(cast("str", _android_folder()), "files", "bin") # noqa: PTH118
139
+
140
+ @property
141
+ def site_bin_dir(self) -> str:
142
+ """:returns: bin directory shared by users, same as `user_bin_dir`"""
143
+ return self.user_bin_dir
144
+
145
+ @property
146
+ def user_applications_dir(self) -> str:
147
+ """:returns: applications directory tied to the user, same as `user_data_dir`"""
148
+ return self.user_data_dir
149
+
150
+ @property
151
+ def site_applications_dir(self) -> str:
152
+ """:returns: applications directory shared by users, same as `user_applications_dir`"""
153
+ return self.user_applications_dir
154
+
102
155
  @property
103
156
  def user_runtime_dir(self) -> str:
104
- """
105
- :return: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it,
106
- e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/tmp``
107
- """
157
+ """:returns: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it, e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/tmp``"""
108
158
  path = self.user_cache_dir
109
159
  if self.opinion:
110
160
  path = os.path.join(path, "tmp") # noqa: PTH118
161
+ self._optionally_create_directory(path)
111
162
  return path
112
163
 
113
164
  @property
114
165
  def site_runtime_dir(self) -> str:
115
- """:return: runtime directory shared by users, same as `user_runtime_dir`"""
166
+ """:returns: runtime directory shared by users, same as `user_runtime_dir`"""
116
167
  return self.user_runtime_dir
117
168
 
118
169
 
119
170
  @lru_cache(maxsize=1)
120
171
  def _android_folder() -> str | None: # noqa: C901
121
- """:return: base folder for the Android OS or None if it cannot be found"""
172
+ """:returns: base folder for the Android OS or None if it cannot be found"""
122
173
  result: str | None = None
123
174
  # type checker isn't happy with our "import android", just don't do this when type checking see
124
175
  # https://stackoverflow.com/a/61394121
@@ -135,7 +186,7 @@ def _android_folder() -> str | None: # noqa: C901
135
186
  try:
136
187
  # ...and fall back to using plain pyjnius, if python4android isn't available or doesn't deliver any useful
137
188
  # result...
138
- from jnius import autoclass # noqa: PLC0415
189
+ from jnius import autoclass # noqa: PLC0415 # ty: ignore[unresolved-import]
139
190
 
140
191
  context = autoclass("android.content.Context")
141
192
  result = context.getFilesDir().getParentFile().getAbsolutePath()
@@ -166,10 +217,10 @@ def _android_folder() -> str | None: # noqa: C901
166
217
 
167
218
  @lru_cache(maxsize=1)
168
219
  def _android_documents_folder() -> str:
169
- """:return: documents folder for the Android OS"""
220
+ """:returns: documents folder for the Android OS"""
170
221
  # Get directories with pyjnius
171
222
  try:
172
- from jnius import autoclass # noqa: PLC0415
223
+ from jnius import autoclass # noqa: PLC0415 # ty: ignore[unresolved-import]
173
224
 
174
225
  context = autoclass("android.content.Context")
175
226
  environment = autoclass("android.os.Environment")
@@ -182,10 +233,10 @@ def _android_documents_folder() -> str:
182
233
 
183
234
  @lru_cache(maxsize=1)
184
235
  def _android_downloads_folder() -> str:
185
- """:return: downloads folder for the Android OS"""
236
+ """:returns: downloads folder for the Android OS"""
186
237
  # Get directories with pyjnius
187
238
  try:
188
- from jnius import autoclass # noqa: PLC0415
239
+ from jnius import autoclass # noqa: PLC0415 # ty: ignore[unresolved-import]
189
240
 
190
241
  context = autoclass("android.content.Context")
191
242
  environment = autoclass("android.os.Environment")
@@ -198,10 +249,10 @@ def _android_downloads_folder() -> str:
198
249
 
199
250
  @lru_cache(maxsize=1)
200
251
  def _android_pictures_folder() -> str:
201
- """:return: pictures folder for the Android OS"""
252
+ """:returns: pictures folder for the Android OS"""
202
253
  # Get directories with pyjnius
203
254
  try:
204
- from jnius import autoclass # noqa: PLC0415
255
+ from jnius import autoclass # noqa: PLC0415 # ty: ignore[unresolved-import]
205
256
 
206
257
  context = autoclass("android.content.Context")
207
258
  environment = autoclass("android.os.Environment")
@@ -214,10 +265,10 @@ def _android_pictures_folder() -> str:
214
265
 
215
266
  @lru_cache(maxsize=1)
216
267
  def _android_videos_folder() -> str:
217
- """:return: videos folder for the Android OS"""
268
+ """:returns: videos folder for the Android OS"""
218
269
  # Get directories with pyjnius
219
270
  try:
220
- from jnius import autoclass # noqa: PLC0415
271
+ from jnius import autoclass # noqa: PLC0415 # ty: ignore[unresolved-import]
221
272
 
222
273
  context = autoclass("android.content.Context")
223
274
  environment = autoclass("android.os.Environment")
@@ -230,10 +281,10 @@ def _android_videos_folder() -> str:
230
281
 
231
282
  @lru_cache(maxsize=1)
232
283
  def _android_music_folder() -> str:
233
- """:return: music folder for the Android OS"""
284
+ """:returns: music folder for the Android OS"""
234
285
  # Get directories with pyjnius
235
286
  try:
236
- from jnius import autoclass # noqa: PLC0415
287
+ from jnius import autoclass # noqa: PLC0415 # ty: ignore[unresolved-import]
237
288
 
238
289
  context = autoclass("android.content.Context")
239
290
  environment = autoclass("android.os.Environment")