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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.78]
4
+
5
+ - **More performant spreadsheet operations** - Read/write operations should be much faster and less buggy.
6
+ - **Linked local files** - Open local file links from agent responses in both the CLI and native app.
7
+ - **Safer read-only modes** - Ask and Plan modes no longer expose shell execution, and mode switching avoids unnecessary skill scans.
8
+ - **Native app polish** - Refreshed the native app design and improved chat autoscrolling during active sessions.
9
+ - **Auto-update reminders** - Update reminders will be surfaced in open terminal windows.
10
+
11
+ ## [0.3.77]
12
+
13
+ - **Native app file mentions** - Type `@` in the native app to search and attach workspace files with the same completion behavior as the CLI.
14
+ - **Custom model setup** - A bundled skill now guides configuration of compatible custom model providers.
15
+ - **Subagent permissions** - CLI subagents inherit the active permission policy and surface nested approval requests more clearly.
16
+
3
17
  ## [0.3.76]
4
18
 
5
19
  - **Claude Opus 5** - Claude Opus 5 is now available as ShortcutXL's high-accuracy Opus option.
@@ -1,5 +1,5 @@
1
1
  import { MODELS } from './models.generated.js';
2
- import type { Api, KnownProvider, Model, Usage } from './types.js';
2
+ import type { Api, KnownProvider, Model, ModelCapabilities, ReasoningLevel, Usage } from './types.js';
3
3
  type ModelApi<TProvider extends KnownProvider, TModelId extends keyof (typeof MODELS)[TProvider]> = (typeof MODELS)[TProvider][TModelId] extends {
4
4
  api: infer TApi;
5
5
  } ? TApi extends Api ? TApi : never : never;
@@ -8,13 +8,17 @@ export declare function getProviders(): KnownProvider[];
8
8
  export declare function getModels<TProvider extends KnownProvider>(provider: TProvider): Model<ModelApi<TProvider, keyof (typeof MODELS)[TProvider]>>[];
9
9
  export declare function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage['cost'];
10
10
  /**
11
- * Check if a model supports xhigh thinking level.
11
+ * Return the model's declared reasoning contract.
12
12
  *
13
- * Supported today:
14
- * - Shortcut's current and legacy OpenAI reasoning models
15
- * - Anthropic Messages API Opus models (xhigh maps to adaptive effort "max")
13
+ * Models that only declare `reasoning: true` expose no configurable wire
14
+ * control: the provider default is represented as a fixed `high` product state.
15
+ * Shortcut-served models always provide an explicit contract in the catalog.
16
16
  */
17
- export declare function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean;
17
+ export declare function getModelReasoningCapabilities<TApi extends Api>(model: Model<TApi>): ModelCapabilities['reasoning'] | undefined;
18
+ export declare function getModelReasoningLevels<TApi extends Api>(model: Model<TApi>): ReasoningLevel[];
19
+ export declare function assertModelSupportsReasoningLevel<TApi extends Api>(model: Model<TApi>, level: ReasoningLevel): void;
20
+ /** Resolve a stale/cross-model selection to the target model's declared default. */
21
+ export declare function resolveModelReasoningLevel<TApi extends Api>(model: Model<TApi>, requested: ReasoningLevel | undefined): ReasoningLevel;
18
22
  /**
19
23
  * Check if two models are equal by comparing both their id and provider.
20
24
  * Returns false if either model is null or undefined.
@@ -7,6 +7,14 @@ export declare const MODELS: {
7
7
  provider: string;
8
8
  baseUrl: string;
9
9
  reasoning: true;
10
+ capabilities: {
11
+ reasoning: {
12
+ readonly control: "budget";
13
+ readonly defaultLevel: "minimal";
14
+ readonly levels: readonly ["minimal", "low", "medium", "high"];
15
+ readonly supportsOff: true;
16
+ };
17
+ };
10
18
  input: ("text" | "image")[];
11
19
  cost: {
12
20
  input: number;
@@ -24,6 +32,14 @@ export declare const MODELS: {
24
32
  provider: string;
25
33
  baseUrl: string;
26
34
  reasoning: true;
35
+ capabilities: {
36
+ reasoning: {
37
+ readonly control: "budget";
38
+ readonly defaultLevel: "minimal";
39
+ readonly levels: readonly ["minimal", "low", "medium", "high"];
40
+ readonly supportsOff: true;
41
+ };
42
+ };
27
43
  input: ("text" | "image")[];
28
44
  cost: {
29
45
  input: number;
@@ -130,6 +146,14 @@ export declare const MODELS: {
130
146
  provider: string;
131
147
  baseUrl: string;
132
148
  reasoning: true;
149
+ capabilities: {
150
+ reasoning: {
151
+ readonly control: "thinking-level";
152
+ readonly defaultLevel: "minimal";
153
+ readonly levels: readonly ["minimal", "low", "medium", "high"];
154
+ readonly supportsOff: false;
155
+ };
156
+ };
133
157
  input: ("text" | "image")[];
134
158
  cost: {
135
159
  input: number;
@@ -147,6 +171,14 @@ export declare const MODELS: {
147
171
  provider: string;
148
172
  baseUrl: string;
149
173
  reasoning: true;
174
+ capabilities: {
175
+ reasoning: {
176
+ readonly control: "thinking-level";
177
+ readonly defaultLevel: "low";
178
+ readonly levels: readonly ["low", "high"];
179
+ readonly supportsOff: false;
180
+ };
181
+ };
150
182
  input: ("text" | "image")[];
151
183
  cost: {
152
184
  input: number;
@@ -164,6 +196,14 @@ export declare const MODELS: {
164
196
  provider: string;
165
197
  baseUrl: string;
166
198
  reasoning: true;
199
+ capabilities: {
200
+ reasoning: {
201
+ readonly control: "thinking-level";
202
+ readonly defaultLevel: "low";
203
+ readonly levels: readonly ["low", "medium", "high"];
204
+ readonly supportsOff: false;
205
+ };
206
+ };
167
207
  input: ("text" | "image")[];
168
208
  cost: {
169
209
  input: number;
@@ -181,6 +221,14 @@ export declare const MODELS: {
181
221
  provider: string;
182
222
  baseUrl: string;
183
223
  reasoning: true;
224
+ capabilities: {
225
+ reasoning: {
226
+ readonly control: "thinking-level";
227
+ readonly defaultLevel: "low";
228
+ readonly levels: readonly ["low", "medium", "high"];
229
+ readonly supportsOff: false;
230
+ };
231
+ };
184
232
  input: ("text" | "image")[];
185
233
  cost: {
186
234
  input: number;
@@ -319,6 +367,14 @@ export declare const MODELS: {
319
367
  provider: string;
320
368
  baseUrl: string;
321
369
  reasoning: true;
370
+ capabilities: {
371
+ reasoning: {
372
+ readonly control: "thinking-level";
373
+ readonly defaultLevel: "minimal";
374
+ readonly levels: readonly ["minimal", "low", "medium", "high"];
375
+ readonly supportsOff: false;
376
+ };
377
+ };
322
378
  input: ("text" | "image")[];
323
379
  cost: {
324
380
  input: number;
@@ -336,6 +392,14 @@ export declare const MODELS: {
336
392
  provider: string;
337
393
  baseUrl: string;
338
394
  reasoning: true;
395
+ capabilities: {
396
+ reasoning: {
397
+ readonly control: "thinking-level";
398
+ readonly defaultLevel: "low";
399
+ readonly levels: readonly ["low", "high"];
400
+ readonly supportsOff: false;
401
+ };
402
+ };
339
403
  input: ("text" | "image")[];
340
404
  cost: {
341
405
  input: number;
@@ -353,6 +417,14 @@ export declare const MODELS: {
353
417
  provider: string;
354
418
  baseUrl: string;
355
419
  reasoning: true;
420
+ capabilities: {
421
+ reasoning: {
422
+ readonly control: "thinking-level";
423
+ readonly defaultLevel: "low";
424
+ readonly levels: readonly ["low", "medium", "high"];
425
+ readonly supportsOff: false;
426
+ };
427
+ };
356
428
  input: ("text" | "image")[];
357
429
  cost: {
358
430
  input: number;
@@ -1,5 +1,29 @@
1
1
  // This file is auto-generated by scripts/generate-models.ts.
2
2
  // Do not edit manually - run 'pnpm run generate-models' to update.
3
+ const HAIKU_45_REASONING = {
4
+ control: 'budget',
5
+ defaultLevel: 'minimal',
6
+ levels: ['minimal', 'low', 'medium', 'high'],
7
+ supportsOff: true
8
+ };
9
+ const GEMINI_3_FLASH_REASONING = {
10
+ control: 'thinking-level',
11
+ defaultLevel: 'minimal',
12
+ levels: ['minimal', 'low', 'medium', 'high'],
13
+ supportsOff: false
14
+ };
15
+ const GEMINI_3_PRO_REASONING = {
16
+ control: 'thinking-level',
17
+ defaultLevel: 'low',
18
+ levels: ['low', 'high'],
19
+ supportsOff: false
20
+ };
21
+ const GEMINI_31_PRO_REASONING = {
22
+ control: 'thinking-level',
23
+ defaultLevel: 'low',
24
+ levels: ['low', 'medium', 'high'],
25
+ supportsOff: false
26
+ };
3
27
  export const MODELS = {
4
28
  anthropic: {
5
29
  'claude-haiku-4-5': {
@@ -9,6 +33,7 @@ export const MODELS = {
9
33
  provider: 'anthropic',
10
34
  baseUrl: 'https://api.anthropic.com',
11
35
  reasoning: true,
36
+ capabilities: { reasoning: HAIKU_45_REASONING },
12
37
  input: ['text', 'image'],
13
38
  cost: {
14
39
  input: 1,
@@ -26,6 +51,7 @@ export const MODELS = {
26
51
  provider: 'anthropic',
27
52
  baseUrl: 'https://api.anthropic.com',
28
53
  reasoning: true,
54
+ capabilities: { reasoning: HAIKU_45_REASONING },
29
55
  input: ['text', 'image'],
30
56
  cost: {
31
57
  input: 1,
@@ -132,6 +158,7 @@ export const MODELS = {
132
158
  provider: 'google',
133
159
  baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
134
160
  reasoning: true,
161
+ capabilities: { reasoning: GEMINI_3_FLASH_REASONING },
135
162
  input: ['text', 'image'],
136
163
  cost: {
137
164
  input: 0.5,
@@ -149,6 +176,7 @@ export const MODELS = {
149
176
  provider: 'google',
150
177
  baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
151
178
  reasoning: true,
179
+ capabilities: { reasoning: GEMINI_3_PRO_REASONING },
152
180
  input: ['text', 'image'],
153
181
  cost: {
154
182
  input: 2,
@@ -166,6 +194,7 @@ export const MODELS = {
166
194
  provider: 'google',
167
195
  baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
168
196
  reasoning: true,
197
+ capabilities: { reasoning: GEMINI_31_PRO_REASONING },
169
198
  input: ['text', 'image'],
170
199
  cost: {
171
200
  input: 2,
@@ -183,6 +212,7 @@ export const MODELS = {
183
212
  provider: 'google',
184
213
  baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
185
214
  reasoning: true,
215
+ capabilities: { reasoning: GEMINI_31_PRO_REASONING },
186
216
  input: ['text', 'image'],
187
217
  cost: {
188
218
  input: 2,
@@ -321,6 +351,7 @@ export const MODELS = {
321
351
  provider: 'google-vertex',
322
352
  baseUrl: 'https://{location}-aiplatform.googleapis.com',
323
353
  reasoning: true,
354
+ capabilities: { reasoning: GEMINI_3_FLASH_REASONING },
324
355
  input: ['text', 'image'],
325
356
  cost: {
326
357
  input: 0.5,
@@ -338,6 +369,7 @@ export const MODELS = {
338
369
  provider: 'google-vertex',
339
370
  baseUrl: 'https://{location}-aiplatform.googleapis.com',
340
371
  reasoning: true,
372
+ capabilities: { reasoning: GEMINI_3_PRO_REASONING },
341
373
  input: ['text', 'image'],
342
374
  cost: {
343
375
  input: 2,
@@ -355,6 +387,7 @@ export const MODELS = {
355
387
  provider: 'google-vertex',
356
388
  baseUrl: 'https://{location}-aiplatform.googleapis.com',
357
389
  reasoning: true,
390
+ capabilities: { reasoning: GEMINI_31_PRO_REASONING },
358
391
  input: ['text', 'image'],
359
392
  cost: {
360
393
  input: 2,
package/dist/ai/models.js CHANGED
@@ -1,4 +1,3 @@
1
- import { SHORTCUT_OPENAI_MODEL_ID } from '../model-ids.js';
2
1
  import { MODELS } from './models.generated.js';
3
2
  const modelRegistry = new Map();
4
3
  // Initialize registry from MODELS on module load
@@ -32,22 +31,46 @@ export function calculateCost(model, usage) {
32
31
  usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
33
32
  return usage.cost;
34
33
  }
34
+ const PROVIDER_DEFAULT_REASONING = {
35
+ control: 'fixed',
36
+ defaultLevel: 'high',
37
+ levels: ['high'],
38
+ supportsOff: false
39
+ };
35
40
  /**
36
- * Check if a model supports xhigh thinking level.
41
+ * Return the model's declared reasoning contract.
37
42
  *
38
- * Supported today:
39
- * - Shortcut's current and legacy OpenAI reasoning models
40
- * - Anthropic Messages API Opus models (xhigh maps to adaptive effort "max")
43
+ * Models that only declare `reasoning: true` expose no configurable wire
44
+ * control: the provider default is represented as a fixed `high` product state.
45
+ * Shortcut-served models always provide an explicit contract in the catalog.
41
46
  */
42
- export function supportsXhigh(model) {
43
- const modelId = model.id.startsWith('openai/') ? model.id.slice('openai/'.length) : model.id;
44
- if (modelId.includes(SHORTCUT_OPENAI_MODEL_ID) || modelId.includes('gpt-5.5')) {
45
- return true;
46
- }
47
- if (model.api === 'anthropic-messages') {
48
- return model.id.toLowerCase().includes('opus');
47
+ export function getModelReasoningCapabilities(model) {
48
+ if (!model.reasoning)
49
+ return undefined;
50
+ return model.capabilities?.reasoning ?? PROVIDER_DEFAULT_REASONING;
51
+ }
52
+ export function getModelReasoningLevels(model) {
53
+ const capabilities = getModelReasoningCapabilities(model);
54
+ if (!capabilities)
55
+ return ['off'];
56
+ return [...(capabilities.supportsOff ? ['off'] : []), ...capabilities.levels];
57
+ }
58
+ export function assertModelSupportsReasoningLevel(model, level) {
59
+ const available = getModelReasoningLevels(model);
60
+ if (!available.includes(level)) {
61
+ throw new Error(`Reasoning level "${level}" is not supported by ${model.provider}/${model.id}. ` +
62
+ `Supported levels: ${available.join(', ')}.`);
49
63
  }
50
- return false;
64
+ }
65
+ /** Resolve a stale/cross-model selection to the target model's declared default. */
66
+ export function resolveModelReasoningLevel(model, requested) {
67
+ const capabilities = getModelReasoningCapabilities(model);
68
+ if (requested === undefined)
69
+ return capabilities?.defaultLevel ?? 'off';
70
+ const available = getModelReasoningLevels(model);
71
+ if (available.includes(requested))
72
+ return requested;
73
+ return capabilities?.defaultLevel ?? 'off';
51
74
  }
52
75
  /**
53
76
  * Check if two models are equal by comparing both their id and provider.
@@ -1,6 +1,6 @@
1
1
  import { type ShortcutXLModelStreamErrorDetails } from '../../contracts/model-stream.js';
2
- import type { SimpleStreamOptions, StreamFunction, StreamOptions } from '../types.js';
3
- export type AnthropicEffort = 'low' | 'medium' | 'high' | 'max';
2
+ import type { Context, Model, SimpleStreamOptions, StreamFunction, StreamOptions } from '../types.js';
3
+ export type AnthropicEffort = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
4
4
  export interface AnthropicOptions extends StreamOptions {
5
5
  /**
6
6
  * Enable extended thinking.
@@ -31,5 +31,7 @@ export interface AnthropicOptions extends StreamOptions {
31
31
  }
32
32
  export declare const streamAnthropic: StreamFunction<'anthropic-messages', AnthropicOptions>;
33
33
  export declare const streamSimpleAnthropic: StreamFunction<'anthropic-messages', SimpleStreamOptions>;
34
+ /** Serialize one Anthropic request for either the SDK stream or a raw invoke transport. */
35
+ export declare function buildAnthropicMessagesRequest(model: Model<'anthropic-messages'>, context: Context, options: SimpleStreamOptions | undefined, stream: boolean): Record<string, unknown>;
34
36
  export declare function anthropicTerminalStopErrorDetails(reason: string | null | undefined): ShortcutXLModelStreamErrorDetails | undefined;
35
37
  //# sourceMappingURL=anthropic.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import Anthropic from '@anthropic-ai/sdk';
2
2
  import { PROVIDER_REFUSAL_ERROR_CODE, safeModelStreamErrorMessage } from '../../contracts/model-stream.js';
3
3
  import { getEnvApiKey } from '../env-api-keys.js';
4
- import { calculateCost } from '../models.js';
4
+ import { assertModelSupportsReasoningLevel, calculateCost } from '../models.js';
5
5
  import { AssistantMessageEventStream } from '../utils/event-stream.js';
6
6
  import { parseStreamingJson } from '../utils/json-parse.js';
7
7
  import { sanitizeSurrogates } from '../utils/sanitize-unicode.js';
@@ -381,17 +381,19 @@ export const streamAnthropic = (model, context, options) => {
381
381
  */
382
382
  const ADAPTIVE_THINKING_MODELS = ['opus-5', 'opus-4-8', 'sonnet-5', 'fable-5'];
383
383
  /** Check if a model uses adaptive thinking. */
384
- function supportsAdaptiveThinking(modelId) {
385
- const normalized = modelId.toLowerCase();
384
+ function supportsAdaptiveThinking(model) {
385
+ const configuredControl = model.capabilities?.reasoning?.control;
386
+ if (configuredControl)
387
+ return configuredControl === 'adaptive-effort';
388
+ const normalized = model.id.toLowerCase();
386
389
  return ADAPTIVE_THINKING_MODELS.some((id) => normalized.includes(id));
387
390
  }
388
391
  /**
389
- * Map ThinkingLevel to Anthropic effort levels for adaptive thinking.
392
+ * Map provider-neutral reasoning effort to Anthropic adaptive effort.
390
393
  *
391
- * Every Claude model Shortcut serves accepts `max`, so `xhigh` maps to `max`.
392
- * The guard just keeps a hypothetical non-adaptive model from 400ing on `max`.
394
+ * This is only called for adaptive models, where `max` is a native effort.
393
395
  */
394
- function mapThinkingLevelToEffort(level, modelId) {
396
+ function mapReasoningLevel(level) {
395
397
  switch (level) {
396
398
  case 'minimal':
397
399
  return 'low';
@@ -402,39 +404,57 @@ function mapThinkingLevelToEffort(level, modelId) {
402
404
  case 'high':
403
405
  return 'high';
404
406
  case 'xhigh':
405
- return supportsAdaptiveThinking(modelId) ? 'max' : 'high';
407
+ case 'max':
408
+ return level;
406
409
  default:
407
410
  return 'high';
408
411
  }
409
412
  }
410
- export const streamSimpleAnthropic = (model, context, options) => {
411
- const apiKey = options?.apiKey || getEnvApiKey(model.provider);
412
- if (!apiKey) {
413
- throw new Error(`No API key for provider: ${model.provider}`);
413
+ function mapToolChoice(toolChoice) {
414
+ if (!toolChoice)
415
+ return undefined;
416
+ if (typeof toolChoice === 'object')
417
+ return { type: 'tool', name: toolChoice.name };
418
+ return toolChoice === 'required' ? 'any' : toolChoice;
419
+ }
420
+ function resolveSimpleAnthropicOptions(model, options) {
421
+ const base = buildBaseOptions(model, options, options?.apiKey);
422
+ const toolChoice = mapToolChoice(options?.toolChoice);
423
+ if (options?.reasoning === undefined) {
424
+ return { ...base, toolChoice };
414
425
  }
415
- const base = buildBaseOptions(model, options, apiKey);
416
- if (!options?.reasoning) {
417
- return streamAnthropic(model, context, {
418
- ...base,
419
- thinkingEnabled: false
420
- });
426
+ if (!model.capabilities?.reasoning) {
427
+ return { ...base, toolChoice };
421
428
  }
422
- // Current served Claude models use adaptive thinking with an effort level.
423
- // Older models use budget-based thinking.
424
- if (supportsAdaptiveThinking(model.id)) {
425
- const effort = mapThinkingLevelToEffort(options.reasoning, model.id);
426
- return streamAnthropic(model, context, {
429
+ assertModelSupportsReasoningLevel(model, options.reasoning);
430
+ if (options.reasoning === 'off') {
431
+ return { ...base, thinkingEnabled: false, toolChoice };
432
+ }
433
+ if (supportsAdaptiveThinking(model)) {
434
+ return {
427
435
  ...base,
436
+ effort: mapReasoningLevel(options.reasoning),
428
437
  thinkingEnabled: true,
429
- effort
430
- });
438
+ toolChoice
439
+ };
431
440
  }
432
441
  const adjusted = adjustMaxTokensForThinking(base.maxTokens || 0, model.maxTokens, options.reasoning);
433
- return streamAnthropic(model, context, {
442
+ return {
434
443
  ...base,
435
444
  maxTokens: adjusted.maxTokens,
445
+ thinkingBudgetTokens: adjusted.thinkingBudget,
436
446
  thinkingEnabled: true,
437
- thinkingBudgetTokens: adjusted.thinkingBudget
447
+ toolChoice
448
+ };
449
+ }
450
+ export const streamSimpleAnthropic = (model, context, options) => {
451
+ const apiKey = options?.apiKey || getEnvApiKey(model.provider);
452
+ if (!apiKey) {
453
+ throw new Error(`No API key for provider: ${model.provider}`);
454
+ }
455
+ return streamAnthropic(model, context, {
456
+ ...resolveSimpleAnthropicOptions(model, options),
457
+ apiKey
438
458
  });
439
459
  };
440
460
  function isOAuthToken(apiKey) {
@@ -443,7 +463,7 @@ function isOAuthToken(apiKey) {
443
463
  function createClient(model, apiKey, interleavedThinking, optionsHeaders, fetchOptions, fetchImpl) {
444
464
  // Adaptive thinking models (Opus 4.6, Sonnet 4.6) have interleaved thinking built-in.
445
465
  // The beta header is deprecated on Opus 4.6 and redundant on Sonnet 4.6, so skip it.
446
- const needsInterleavedBeta = interleavedThinking && !supportsAdaptiveThinking(model.id);
466
+ const needsInterleavedBeta = interleavedThinking && !supportsAdaptiveThinking(model);
447
467
  const betaFeatures = ['fine-grained-tool-streaming-2025-05-14'];
448
468
  if (needsInterleavedBeta) {
449
469
  betaFeatures.push('interleaved-thinking-2025-05-14');
@@ -490,7 +510,7 @@ function buildParams(model, context, options) {
490
510
  }
491
511
  // Configure adaptive thinking for current models or budget-based thinking for older models.
492
512
  if (options?.thinkingEnabled && model.reasoning) {
493
- if (supportsAdaptiveThinking(model.id)) {
513
+ if (supportsAdaptiveThinking(model)) {
494
514
  // Adaptive thinking: Claude decides when and how much to think
495
515
  params.thinking = { type: 'adaptive', display: 'summarized' };
496
516
  if (options.effort) {
@@ -505,6 +525,9 @@ function buildParams(model, context, options) {
505
525
  };
506
526
  }
507
527
  }
528
+ else if (options?.thinkingEnabled === false && model.reasoning) {
529
+ params.thinking = { type: 'disabled' };
530
+ }
508
531
  if (options?.metadata) {
509
532
  const userId = options.metadata.user_id;
510
533
  if (typeof userId === 'string') {
@@ -521,6 +544,13 @@ function buildParams(model, context, options) {
521
544
  }
522
545
  return params;
523
546
  }
547
+ /** Serialize one Anthropic request for either the SDK stream or a raw invoke transport. */
548
+ export function buildAnthropicMessagesRequest(model, context, options, stream) {
549
+ return {
550
+ ...buildParams(model, context, resolveSimpleAnthropicOptions(model, options)),
551
+ stream
552
+ };
553
+ }
524
554
  // Normalize tool call IDs to match Anthropic's required pattern and length
525
555
  function normalizeToolCallId(id) {
526
556
  return id.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64);
@@ -1,6 +1,7 @@
1
1
  import type { SimpleStreamOptions, StreamFunction, StreamOptions } from '../types.js';
2
+ import { type OpenAIReasoningEffort } from './openai-reasoning.js';
2
3
  export interface AzureOpenAIResponsesOptions extends StreamOptions {
3
- reasoningEffort?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
4
+ reasoningEffort?: OpenAIReasoningEffort;
4
5
  reasoningSummary?: 'auto' | 'detailed' | 'concise' | null;
5
6
  azureApiVersion?: string;
6
7
  azureResourceName?: string;
@@ -1,9 +1,9 @@
1
1
  import { AzureOpenAI } from 'openai';
2
2
  import { getEnvApiKey } from '../env-api-keys.js';
3
- import { supportsXhigh } from '../models.js';
4
3
  import { AssistantMessageEventStream } from '../utils/event-stream.js';
4
+ import { resolveOpenAIReasoningEffort } from './openai-reasoning.js';
5
5
  import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from './openai-responses-shared.js';
6
- import { buildBaseOptions, clampReasoning } from './simple-options.js';
6
+ import { buildBaseOptions } from './simple-options.js';
7
7
  const DEFAULT_AZURE_API_VERSION = 'v1';
8
8
  const AZURE_TOOL_CALL_PROVIDERS = new Set(['openai', 'opencode', 'azure-openai-responses']);
9
9
  function parseDeploymentNameMap(value) {
@@ -88,9 +88,7 @@ export const streamSimpleAzureOpenAIResponses = (model, context, options) => {
88
88
  throw new Error(`No API key for provider: ${model.provider}`);
89
89
  }
90
90
  const base = buildBaseOptions(model, options, apiKey);
91
- const reasoningEffort = supportsXhigh(model)
92
- ? options?.reasoning
93
- : clampReasoning(options?.reasoning);
91
+ const reasoningEffort = resolveOpenAIReasoningEffort(model, options?.reasoning);
94
92
  return streamAzureOpenAIResponses(model, context, {
95
93
  ...base,
96
94
  reasoningEffort
@@ -160,25 +158,11 @@ function buildParams(model, context, options, deploymentName) {
160
158
  if (model.reasoning) {
161
159
  if (options?.reasoningEffort || options?.reasoningSummary) {
162
160
  params.reasoning = {
163
- effort: options?.reasoningEffort || 'medium',
161
+ effort: (options?.reasoningEffort || 'medium'),
164
162
  summary: options?.reasoningSummary || 'auto'
165
163
  };
166
164
  params.include = ['reasoning.encrypted_content'];
167
165
  }
168
- else {
169
- if (model.name.toLowerCase().startsWith('gpt-5')) {
170
- // Jesus Christ, see https://community.openai.com/t/need-reasoning-false-option-for-gpt-5/1351588/7
171
- messages.push({
172
- role: 'developer',
173
- content: [
174
- {
175
- type: 'input_text',
176
- text: '# Juice: 0 !important'
177
- }
178
- ]
179
- });
180
- }
181
- }
182
166
  }
183
167
  return params;
184
168
  }
@@ -1,7 +1,9 @@
1
- import type { SimpleStreamOptions, StreamFunction, StreamOptions } from '../types.js';
1
+ import type { Context, Model, SimpleStreamOptions, StreamFunction, StreamOptions } from '../types.js';
2
2
  import { type GoogleThinkingLevel } from './google-shared.js';
3
3
  export interface GoogleVertexOptions extends StreamOptions {
4
- toolChoice?: 'auto' | 'none' | 'any';
4
+ toolChoice?: 'auto' | 'none' | 'any' | {
5
+ readonly name: string;
6
+ };
5
7
  thinking?: {
6
8
  enabled: boolean;
7
9
  budgetTokens?: number;
@@ -12,4 +14,8 @@ export interface GoogleVertexOptions extends StreamOptions {
12
14
  }
13
15
  export declare const streamGoogleVertex: StreamFunction<'google-vertex', GoogleVertexOptions>;
14
16
  export declare const streamSimpleGoogleVertex: StreamFunction<'google-vertex', SimpleStreamOptions>;
17
+ /** Serialize the provider-neutral request into the Vertex REST wire shape. */
18
+ export declare function buildGoogleVertexRequest(model: Model<'google-vertex'>, context: Context, options: SimpleStreamOptions | undefined): Record<string, unknown>;
19
+ /** Build the api-v2 Vertex-shaped endpoint used by CLI and embedded transports. */
20
+ export declare function googleVertexGatewayEndpoint(baseUrl: string, modelId: string, operation: 'generateContent' | 'streamGenerateContent'): string;
15
21
  //# sourceMappingURL=google-vertex.d.ts.map