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
@@ -0,0 +1,30 @@
1
+ export declare const UPDATE_CHECK_INTERVAL_MS: number;
2
+ interface UpdateCheckSchedulerOptions<T> {
3
+ check: () => Promise<T>;
4
+ onResult: (result: T) => void;
5
+ intervalMs?: number;
6
+ }
7
+ interface UpdateCheckSchedulerDeps {
8
+ now?: () => number;
9
+ setTimer?: typeof setTimeout;
10
+ clearTimer?: typeof clearTimeout;
11
+ }
12
+ /** Schedules one coalesced asynchronous update check at most once per interval. */
13
+ export declare class UpdateCheckScheduler<T> {
14
+ private readonly options;
15
+ private readonly intervalMs;
16
+ private readonly now;
17
+ private readonly setTimer;
18
+ private readonly clearTimer;
19
+ private timer;
20
+ private inFlight;
21
+ private nextCheckAt;
22
+ private stopped;
23
+ constructor(options: UpdateCheckSchedulerOptions<T>, deps?: UpdateCheckSchedulerDeps);
24
+ start(lastCheckedAt?: string): void;
25
+ stop(): void;
26
+ private schedule;
27
+ private runCheck;
28
+ }
29
+ export {};
30
+ //# sourceMappingURL=update-check-scheduler.d.ts.map
@@ -0,0 +1,71 @@
1
+ export const UPDATE_CHECK_INTERVAL_MS = 12 * 60 * 60 * 1000;
2
+ /** Schedules one coalesced asynchronous update check at most once per interval. */
3
+ export class UpdateCheckScheduler {
4
+ options;
5
+ intervalMs;
6
+ now;
7
+ setTimer;
8
+ clearTimer;
9
+ timer;
10
+ inFlight;
11
+ nextCheckAt = Number.POSITIVE_INFINITY;
12
+ stopped = true;
13
+ constructor(options, deps = {}) {
14
+ this.options = options;
15
+ this.intervalMs = options.intervalMs ?? UPDATE_CHECK_INTERVAL_MS;
16
+ this.now = deps.now ?? Date.now;
17
+ this.setTimer = deps.setTimer ?? setTimeout;
18
+ this.clearTimer = deps.clearTimer ?? clearTimeout;
19
+ }
20
+ start(lastCheckedAt) {
21
+ this.stopped = false;
22
+ const lastCheckedAtMs = lastCheckedAt ? Date.parse(lastCheckedAt) : Number.NaN;
23
+ const delayMs = Number.isFinite(lastCheckedAtMs)
24
+ ? Math.min(this.intervalMs, Math.max(0, lastCheckedAtMs + this.intervalMs - this.now()))
25
+ : 0;
26
+ this.schedule(delayMs);
27
+ }
28
+ stop() {
29
+ this.stopped = true;
30
+ if (this.timer) {
31
+ this.clearTimer(this.timer);
32
+ this.timer = undefined;
33
+ }
34
+ }
35
+ schedule(delayMs) {
36
+ if (this.stopped)
37
+ return;
38
+ if (this.timer)
39
+ this.clearTimer(this.timer);
40
+ this.nextCheckAt = this.now() + delayMs;
41
+ this.timer = this.setTimer(() => {
42
+ this.timer = undefined;
43
+ this.runCheck();
44
+ }, delayMs);
45
+ this.timer.unref?.();
46
+ }
47
+ runCheck() {
48
+ if (this.stopped || this.inFlight)
49
+ return;
50
+ if (this.timer) {
51
+ this.clearTimer(this.timer);
52
+ this.timer = undefined;
53
+ }
54
+ this.nextCheckAt = this.now() + this.intervalMs;
55
+ const task = Promise.resolve()
56
+ .then(() => this.options.check())
57
+ .then((result) => {
58
+ if (!this.stopped)
59
+ this.options.onResult(result);
60
+ })
61
+ .catch(() => { })
62
+ .finally(() => {
63
+ if (this.inFlight !== task)
64
+ return;
65
+ this.inFlight = undefined;
66
+ this.schedule(Math.max(0, this.nextCheckAt - this.now()));
67
+ });
68
+ this.inFlight = task;
69
+ }
70
+ }
71
+ //# sourceMappingURL=update-check-scheduler.js.map
@@ -0,0 +1,22 @@
1
+ import { Container } from '../../tui/index.js';
2
+ import { type InteractiveAvailableUpdate } from './update-reminder.js';
3
+ interface UpdateReminderControllerOptions {
4
+ initialUpdate?: InteractiveAvailableUpdate;
5
+ lastCheckedAt?: string;
6
+ checkForUpdate?: () => Promise<InteractiveAvailableUpdate | undefined>;
7
+ onChange: () => void;
8
+ }
9
+ /** Owns the live update state, reminder component, and non-blocking refresh schedule. */
10
+ export declare class UpdateReminderController {
11
+ private readonly options;
12
+ readonly container: Container;
13
+ private update;
14
+ private readonly scheduler;
15
+ constructor(options: UpdateReminderControllerOptions);
16
+ start(): void;
17
+ stop(): void;
18
+ private setUpdate;
19
+ private render;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=update-reminder-controller.d.ts.map
@@ -0,0 +1,40 @@
1
+ import { Container, Text } from '../../tui/index.js';
2
+ import { theme } from '../theme/runtime.js';
3
+ import { UpdateCheckScheduler } from './update-check-scheduler.js';
4
+ import { formatUpdateReminder } from './update-reminder.js';
5
+ /** Owns the live update state, reminder component, and non-blocking refresh schedule. */
6
+ export class UpdateReminderController {
7
+ options;
8
+ container = new Container();
9
+ update;
10
+ scheduler;
11
+ constructor(options) {
12
+ this.options = options;
13
+ this.update = options.initialUpdate;
14
+ this.render();
15
+ this.scheduler = options.checkForUpdate
16
+ ? new UpdateCheckScheduler({
17
+ check: options.checkForUpdate,
18
+ onResult: (update) => this.setUpdate(update)
19
+ })
20
+ : null;
21
+ }
22
+ start() {
23
+ this.scheduler?.start(this.options.lastCheckedAt);
24
+ }
25
+ stop() {
26
+ this.scheduler?.stop();
27
+ }
28
+ setUpdate(update) {
29
+ this.update = update;
30
+ this.render();
31
+ this.options.onChange();
32
+ }
33
+ render() {
34
+ this.container.clear();
35
+ if (!this.update)
36
+ return;
37
+ this.container.addChild(new Text(theme.fg('accent', formatUpdateReminder(this.update)), 1, 0));
38
+ }
39
+ }
40
+ //# sourceMappingURL=update-reminder-controller.js.map
@@ -0,0 +1,6 @@
1
+ export interface InteractiveAvailableUpdate {
2
+ currentVersion: string;
3
+ latestVersion: string;
4
+ }
5
+ export declare function formatUpdateReminder(update: InteractiveAvailableUpdate): string;
6
+ //# sourceMappingURL=update-reminder.d.ts.map
@@ -0,0 +1,4 @@
1
+ export function formatUpdateReminder(update) {
2
+ return `Update available: ${update.currentVersion} → ${update.latestVersion}. Restart ShortcutXL and choose Update now.`;
3
+ }
4
+ //# sourceMappingURL=update-reminder.js.map
@@ -77,8 +77,7 @@
77
77
  "thinkingHigh": "#34d058",
78
78
  "thinkingXhigh": "brandGreen",
79
79
 
80
- "bashMode": "#ff6eb4",
81
- "chatMode": "#5bc0de"
80
+ "bashMode": "#ff6eb4"
82
81
  },
83
82
  "export": {
84
83
  "pageBg": "#18181b",
@@ -77,8 +77,7 @@
77
77
  "thinkingHigh": "#088a43",
78
78
  "thinkingXhigh": "#059033",
79
79
 
80
- "bashMode": "#d6336c",
81
- "chatMode": "#0088aa"
80
+ "bashMode": "#d6336c"
82
81
  },
83
82
  "export": {
84
83
  "pageBg": "#fafafa",
@@ -1,4 +1,4 @@
1
- export type ThemeColor = 'accent' | 'border' | 'borderAccent' | 'borderMuted' | 'success' | 'error' | 'errorDim' | 'warning' | 'muted' | 'dim' | 'text' | 'thinkingText' | 'userMessageText' | 'customMessageText' | 'customMessageLabel' | 'toolTitle' | 'toolOutput' | 'mdHeading' | 'mdLink' | 'mdLinkUrl' | 'mdCode' | 'mdCodeBlock' | 'mdCodeBlockBorder' | 'mdQuote' | 'mdQuoteBorder' | 'mdHr' | 'mdListBullet' | 'toolDiffAdded' | 'toolDiffRemoved' | 'toolDiffContext' | 'syntaxComment' | 'syntaxKeyword' | 'syntaxFunction' | 'syntaxVariable' | 'syntaxString' | 'syntaxNumber' | 'syntaxType' | 'syntaxOperator' | 'syntaxPunctuation' | 'thinkingOff' | 'thinkingMinimal' | 'thinkingLow' | 'thinkingMedium' | 'thinkingHigh' | 'thinkingXhigh' | 'bashMode' | 'chatMode';
1
+ export type ThemeColor = 'accent' | 'border' | 'borderAccent' | 'borderMuted' | 'success' | 'error' | 'errorDim' | 'warning' | 'muted' | 'dim' | 'text' | 'thinkingText' | 'userMessageText' | 'customMessageText' | 'customMessageLabel' | 'toolTitle' | 'toolOutput' | 'mdHeading' | 'mdLink' | 'mdLinkUrl' | 'mdCode' | 'mdCodeBlock' | 'mdCodeBlockBorder' | 'mdQuote' | 'mdQuoteBorder' | 'mdHr' | 'mdListBullet' | 'toolDiffAdded' | 'toolDiffRemoved' | 'toolDiffContext' | 'syntaxComment' | 'syntaxKeyword' | 'syntaxFunction' | 'syntaxVariable' | 'syntaxString' | 'syntaxNumber' | 'syntaxType' | 'syntaxOperator' | 'syntaxPunctuation' | 'thinkingOff' | 'thinkingMinimal' | 'thinkingLow' | 'thinkingMedium' | 'thinkingHigh' | 'thinkingXhigh' | 'bashMode';
2
2
  export type ThemeBg = 'selectedBg' | 'userMessageBg' | 'customMessageBg' | 'toolPendingBg' | 'toolSuccessBg' | 'toolErrorBg';
3
3
  type ColorMode = 'truecolor' | '256color';
4
4
  export declare class Theme {
@@ -21,9 +21,8 @@ export declare class Theme {
21
21
  getFgAnsi(color: ThemeColor): string;
22
22
  getBgAnsi(color: ThemeBg): string;
23
23
  getColorMode(): ColorMode;
24
- getThinkingBorderColor(level: 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'): (str: string) => string;
24
+ getThinkingBorderColor(level: 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'): (str: string) => string;
25
25
  getBashModeBorderColor(): (str: string) => string;
26
- getChatModeBorderColor(): (str: string) => string;
27
26
  }
28
27
  export declare function getAvailableThemes(): string[];
29
28
  export declare function loadThemeFromPath(themePath: string, mode?: ColorMode): Theme;
@@ -74,9 +74,7 @@ const ThemeJsonSchema = Type.Object({
74
74
  thinkingHigh: ColorValueSchema,
75
75
  thinkingXhigh: ColorValueSchema,
76
76
  // Bash Mode (1 color)
77
- bashMode: ColorValueSchema,
78
- // Chat Mode (1 color — collab chat prefix)
79
- chatMode: ColorValueSchema
77
+ bashMode: ColorValueSchema
80
78
  }),
81
79
  export: Type.Optional(Type.Object({
82
80
  pageBg: Type.Optional(ColorValueSchema),
@@ -321,6 +319,7 @@ export class Theme {
321
319
  case 'high':
322
320
  return (str) => this.fg('thinkingHigh', str);
323
321
  case 'xhigh':
322
+ case 'max':
324
323
  return (str) => this.fg('thinkingXhigh', str);
325
324
  default:
326
325
  return (str) => this.fg('thinkingOff', str);
@@ -329,9 +328,6 @@ export class Theme {
329
328
  getBashModeBorderColor() {
330
329
  return (str) => this.fg('bashMode', str);
331
330
  }
332
- getChatModeBorderColor() {
333
- return (str) => this.fg('chatMode', str);
334
- }
335
331
  }
336
332
  // ============================================================================
337
333
  // Theme Loading
@@ -85,8 +85,7 @@
85
85
  "thinkingMedium",
86
86
  "thinkingHigh",
87
87
  "thinkingXhigh",
88
- "bashMode",
89
- "chatMode"
88
+ "bashMode"
90
89
  ],
91
90
  "properties": {
92
91
  "accent": {
@@ -292,10 +291,6 @@
292
291
  "bashMode": {
293
292
  "$ref": "#/$defs/colorValue",
294
293
  "description": "Editor border color in bash mode"
295
- },
296
- "chatMode": {
297
- "$ref": "#/$defs/colorValue",
298
- "description": "Editor border color and text color in collab chat mode"
299
294
  }
300
295
  },
301
296
  "additionalProperties": false
@@ -1,7 +1,12 @@
1
- import type { Api, Model } from './ai/types.js';
2
- export type ShortcutModelDefinition = Pick<Model<Api>, 'id' | 'name' | 'reasoning' | 'input' | 'cost' | 'contextWindow' | 'maxTokens' | 'compat'>;
1
+ import type { Api, KnownApi, Model, ReasoningLevel } from './ai/types.js';
2
+ export type ShortcutModelDefinition = Pick<Model<Api>, 'capabilities' | 'compat' | 'contextWindow' | 'cost' | 'id' | 'input' | 'maxTokens' | 'name' | 'reasoning'> & {
3
+ /** Provider-native protocol exposed by api-v2 for this model. */
4
+ readonly protocol: KnownApi;
5
+ };
3
6
  export declare const DEFAULT_SHORTCUT_MODEL_ID: "gpt-5.6-sol";
4
7
  export declare function createShortcutPublicModelDefinitions(): ShortcutModelDefinition[];
5
8
  export declare function createShortcutHostedModelDefinitions(): ShortcutModelDefinition[];
6
9
  export declare function createShortcutModelDefinitions(): ShortcutModelDefinition[];
10
+ export declare function resolveShortcutModelProtocol(modelId: string): KnownApi | undefined;
11
+ export declare function resolveShortcutModelDefaultReasoningLevel(modelId: string): ReasoningLevel | undefined;
7
12
  //# sourceMappingURL=shortcut-model-catalog.d.ts.map
@@ -8,7 +8,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
8
8
  input: ['text', 'image'],
9
9
  cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 },
10
10
  contextWindow: 1_000_000,
11
- maxTokens: 128000
11
+ maxTokens: 128000,
12
+ capabilities: {
13
+ reasoning: {
14
+ control: 'adaptive-effort',
15
+ defaultLevel: 'high',
16
+ levels: ['low', 'medium', 'high', 'xhigh', 'max'],
17
+ supportsOff: false
18
+ }
19
+ },
20
+ protocol: 'anthropic-messages'
12
21
  },
13
22
  {
14
23
  id: SHORTCUT_MODEL_ID.ClaudeOpus5,
@@ -17,7 +26,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
17
26
  input: ['text', 'image'],
18
27
  cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
19
28
  contextWindow: 1_000_000,
20
- maxTokens: 128000
29
+ maxTokens: 128000,
30
+ capabilities: {
31
+ reasoning: {
32
+ control: 'adaptive-effort',
33
+ defaultLevel: 'high',
34
+ levels: ['low', 'medium', 'high', 'xhigh', 'max'],
35
+ supportsOff: true
36
+ }
37
+ },
38
+ protocol: 'anthropic-messages'
21
39
  },
22
40
  {
23
41
  id: SHORTCUT_MODEL_ID.ClaudeOpus48,
@@ -26,7 +44,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
26
44
  input: ['text', 'image'],
27
45
  cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
28
46
  contextWindow: 1_000_000,
29
- maxTokens: 128000
47
+ maxTokens: 128000,
48
+ capabilities: {
49
+ reasoning: {
50
+ control: 'adaptive-effort',
51
+ defaultLevel: 'high',
52
+ levels: ['low', 'medium', 'high', 'xhigh', 'max'],
53
+ supportsOff: true
54
+ }
55
+ },
56
+ protocol: 'anthropic-messages'
30
57
  },
31
58
  {
32
59
  id: SHORTCUT_OPENAI_MODEL_ID,
@@ -35,7 +62,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
35
62
  input: ['text', 'image'],
36
63
  cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 6.25 },
37
64
  contextWindow: 1_000_000,
38
- maxTokens: 128000
65
+ maxTokens: 128000,
66
+ capabilities: {
67
+ reasoning: {
68
+ control: 'effort',
69
+ defaultLevel: 'medium',
70
+ levels: ['low', 'medium', 'high', 'xhigh', 'max'],
71
+ supportsOff: true
72
+ }
73
+ },
74
+ protocol: 'openai-responses'
39
75
  },
40
76
  {
41
77
  id: SHORTCUT_MODEL_ID.Grok45,
@@ -45,6 +81,15 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
45
81
  cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 },
46
82
  contextWindow: 500_000,
47
83
  maxTokens: 128000,
84
+ capabilities: {
85
+ reasoning: {
86
+ control: 'effort',
87
+ defaultLevel: 'high',
88
+ levels: ['low', 'medium', 'high'],
89
+ supportsOff: false
90
+ }
91
+ },
92
+ protocol: 'openai-completions',
48
93
  compat: {
49
94
  supportsStore: false,
50
95
  supportsDeveloperRole: false,
@@ -59,7 +104,20 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
59
104
  input: ['text'],
60
105
  cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 1.4 },
61
106
  contextWindow: 1_040_000,
62
- maxTokens: 128000
107
+ maxTokens: 128000,
108
+ capabilities: {
109
+ reasoning: {
110
+ control: 'effort',
111
+ defaultLevel: 'high',
112
+ levels: ['high', 'max'],
113
+ supportsOff: true
114
+ }
115
+ },
116
+ protocol: 'openai-completions',
117
+ compat: {
118
+ supportsDeveloperRole: false,
119
+ supportsReasoningEffort: true
120
+ }
63
121
  },
64
122
  // Vision/extraction models the proxy routes to for llm_analysis, take_screenshot,
65
123
  // tool summaries, and durable memory. Registered so the api-v2 proxy client's
@@ -72,7 +130,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
72
130
  input: ['text', 'image'],
73
131
  cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 },
74
132
  contextWindow: 1_048_576,
75
- maxTokens: 65536
133
+ maxTokens: 65536,
134
+ capabilities: {
135
+ reasoning: {
136
+ control: 'thinking-level',
137
+ defaultLevel: 'minimal',
138
+ levels: ['minimal', 'low', 'medium', 'high'],
139
+ supportsOff: false
140
+ }
141
+ },
142
+ protocol: 'google-vertex'
76
143
  },
77
144
  {
78
145
  id: SHORTCUT_MODEL_ID.Gemini35FlashLite,
@@ -81,7 +148,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
81
148
  input: ['text', 'image'],
82
149
  cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 },
83
150
  contextWindow: 1_048_576,
84
- maxTokens: 65536
151
+ maxTokens: 65536,
152
+ capabilities: {
153
+ reasoning: {
154
+ control: 'thinking-level',
155
+ defaultLevel: 'minimal',
156
+ levels: ['minimal', 'low', 'medium', 'high'],
157
+ supportsOff: false
158
+ }
159
+ },
160
+ protocol: 'google-vertex'
85
161
  },
86
162
  {
87
163
  id: SHORTCUT_MODEL_ID.Gemini36Flash,
@@ -90,7 +166,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
90
166
  input: ['text', 'image'],
91
167
  cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
92
168
  contextWindow: 1_048_576,
93
- maxTokens: 65536
169
+ maxTokens: 65536,
170
+ capabilities: {
171
+ reasoning: {
172
+ control: 'thinking-level',
173
+ defaultLevel: 'medium',
174
+ levels: ['minimal', 'low', 'medium', 'high'],
175
+ supportsOff: false
176
+ }
177
+ },
178
+ protocol: 'google-vertex'
94
179
  },
95
180
  {
96
181
  id: SHORTCUT_MODEL_ID.ClaudeHaiku45,
@@ -99,7 +184,16 @@ const SHORTCUT_PUBLIC_MODEL_DEFINITIONS = [
99
184
  input: ['text', 'image'],
100
185
  cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
101
186
  contextWindow: 200_000,
102
- maxTokens: 64000
187
+ maxTokens: 64000,
188
+ capabilities: {
189
+ reasoning: {
190
+ control: 'budget',
191
+ defaultLevel: 'minimal',
192
+ levels: ['minimal', 'low', 'medium', 'high'],
193
+ supportsOff: true
194
+ }
195
+ },
196
+ protocol: 'anthropic-messages'
103
197
  }
104
198
  ];
105
199
  const SHORTCUT_HOSTED_MODEL_DEFINITIONS = [
@@ -110,7 +204,11 @@ const SHORTCUT_HOSTED_MODEL_DEFINITIONS = [
110
204
  input: ['text'],
111
205
  cost: { input: 0.195, output: 1.56, cacheRead: 0.0195, cacheWrite: 0 },
112
206
  contextWindow: HOSTED_CONTEXT_WINDOW_TOKENS,
113
- maxTokens: HOSTED_MAX_NEW_TOKENS
207
+ maxTokens: HOSTED_MAX_NEW_TOKENS,
208
+ protocol: 'openai-completions',
209
+ compat: {
210
+ supportsDeveloperRole: false
211
+ }
114
212
  }
115
213
  ];
116
214
  function cloneShortcutModelDefinition(model) {
@@ -118,6 +216,21 @@ function cloneShortcutModelDefinition(model) {
118
216
  ...model,
119
217
  input: [...model.input],
120
218
  cost: { ...model.cost },
219
+ ...(model.capabilities
220
+ ? {
221
+ capabilities: {
222
+ ...model.capabilities,
223
+ ...(model.capabilities.reasoning
224
+ ? {
225
+ reasoning: {
226
+ ...model.capabilities.reasoning,
227
+ levels: [...model.capabilities.reasoning.levels]
228
+ }
229
+ }
230
+ : {})
231
+ }
232
+ }
233
+ : {}),
121
234
  ...(model.compat ? { compat: { ...model.compat } } : {})
122
235
  };
123
236
  }
@@ -130,4 +243,15 @@ export function createShortcutHostedModelDefinitions() {
130
243
  export function createShortcutModelDefinitions() {
131
244
  return [...createShortcutPublicModelDefinitions(), ...createShortcutHostedModelDefinitions()];
132
245
  }
246
+ export function resolveShortcutModelProtocol(modelId) {
247
+ const normalized = modelId.trim().toLowerCase();
248
+ return [...SHORTCUT_PUBLIC_MODEL_DEFINITIONS, ...SHORTCUT_HOSTED_MODEL_DEFINITIONS].find((model) => model.id.toLowerCase() === normalized)?.protocol;
249
+ }
250
+ export function resolveShortcutModelDefaultReasoningLevel(modelId) {
251
+ const normalized = modelId.trim().toLowerCase();
252
+ const model = [...SHORTCUT_PUBLIC_MODEL_DEFINITIONS, ...SHORTCUT_HOSTED_MODEL_DEFINITIONS].find((candidate) => candidate.id.toLowerCase() === normalized);
253
+ if (!model?.reasoning)
254
+ return model ? 'off' : undefined;
255
+ return model.capabilities?.reasoning?.defaultLevel;
256
+ }
133
257
  //# sourceMappingURL=shortcut-model-catalog.js.map
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Startup-owned runtime package update detection and cache state.
3
3
  *
4
- * Reads a small local cache immediately, optionally refreshes it in the
5
- * background, and returns the update state for this run.
4
+ * Reads a small local cache for startup and exposes an explicit asynchronous
5
+ * refresh for the live shell.
6
6
  */
7
7
  interface UpdateCacheFile {
8
8
  latestVersion: string;
@@ -31,12 +31,12 @@ export interface ResolveUpdateOptions {
31
31
  packageName?: string;
32
32
  registryUrl?: string;
33
33
  }
34
- interface ResolveUpdateDeps {
34
+ interface RefreshUpdateDeps {
35
35
  fetchLatestVersion?: (registryUrl: string) => Promise<string | undefined>;
36
- scheduleBackgroundTask?: (task: () => Promise<void>) => void;
37
36
  }
38
- export declare function resolveStartupUpdateStatus(options?: ResolveUpdateOptions, deps?: ResolveUpdateDeps): Promise<UpdateStatus>;
39
- export declare function shouldRefreshUpdateCache(cache: UpdateCacheFile | undefined, now: Date, ttlMs?: number): boolean;
37
+ export declare function resolveStartupUpdateStatus(options?: ResolveUpdateOptions): Promise<UpdateStatus>;
38
+ /** Refresh the registry-backed cache without blocking startup or session changes. */
39
+ export declare function refreshUpdateStatus(options?: ResolveUpdateOptions, deps?: RefreshUpdateDeps): Promise<UpdateStatus>;
40
40
  export declare function getUpdateStatusFromCache(cache: UpdateCacheFile | undefined, options: {
41
41
  currentVersion: string;
42
42
  packageName?: string;
@@ -1,56 +1,47 @@
1
1
  /**
2
2
  * Startup-owned runtime package update detection and cache state.
3
3
  *
4
- * Reads a small local cache immediately, optionally refreshes it in the
5
- * background, and returns the update state for this run.
4
+ * Reads a small local cache for startup and exposes an explicit asynchronous
5
+ * refresh for the live shell.
6
6
  */
7
7
  import { mkdirSync, readFileSync, writeFileSync } from 'fs';
8
8
  import { dirname } from 'path';
9
9
  import { getUpdateCachePath, getUpdateCommand, getUpdateInstruction, NPM_PACKAGE_NAME, NPM_REGISTRY_URL, VERSION } from '../config.js';
10
- const UPDATE_CACHE_TTL_MS = 20 * 60 * 60 * 1000;
11
- export async function resolveStartupUpdateStatus(options = {}, deps = {}) {
10
+ export async function resolveStartupUpdateStatus(options = {}) {
12
11
  const cachePath = options.cachePath ?? getUpdateCachePath();
13
12
  const currentVersion = options.currentVersion ?? VERSION;
14
13
  const packageName = options.packageName ?? NPM_PACKAGE_NAME;
15
- const registryUrl = options.registryUrl ?? NPM_REGISTRY_URL;
16
- const now = options.now ?? new Date();
17
14
  if (options.skipCheck) {
18
15
  return { kind: 'none', currentVersion };
19
16
  }
20
17
  const cache = readUpdateCache(cachePath);
21
- // Cold-start users migrated from the old live-check flow do not have an
22
- // update cache yet. Do one bounded foreground fetch so the first launch
23
- // after the rollout can still show the update prompt immediately.
24
- if (!options.offline && !cache) {
25
- const refreshed = await fetchAndPersistUpdateCache({ cachePath, registryUrl, now }, { fetchLatestVersion: deps.fetchLatestVersion });
26
- return getUpdateStatusFromCache(refreshed, {
27
- currentVersion,
28
- packageName
29
- });
30
- }
31
- if (!options.offline && shouldRefreshUpdateCache(cache, now)) {
32
- const scheduleBackgroundTask = deps.scheduleBackgroundTask ??
33
- ((task) => {
34
- void task().catch(() => { });
35
- });
36
- scheduleBackgroundTask(async () => {
37
- await refreshUpdateCache({ cachePath, registryUrl, now }, { fetchLatestVersion: deps.fetchLatestVersion });
38
- });
39
- }
40
18
  return getUpdateStatusFromCache(cache, {
41
19
  currentVersion,
42
20
  packageName
43
21
  });
44
22
  }
45
- export function shouldRefreshUpdateCache(cache, now, ttlMs = UPDATE_CACHE_TTL_MS) {
46
- if (!cache) {
47
- return true;
23
+ /** Refresh the registry-backed cache without blocking startup or session changes. */
24
+ export async function refreshUpdateStatus(options = {}, deps = {}) {
25
+ const cachePath = options.cachePath ?? getUpdateCachePath();
26
+ const currentVersion = options.currentVersion ?? VERSION;
27
+ const packageName = options.packageName ?? NPM_PACKAGE_NAME;
28
+ const registryUrl = options.registryUrl ?? NPM_REGISTRY_URL;
29
+ const now = options.now ?? new Date();
30
+ const cache = readUpdateCache(cachePath);
31
+ if (options.skipCheck || options.offline) {
32
+ return getUpdateStatusFromCache(cache, { currentVersion, packageName });
48
33
  }
49
- const lastCheckedAtMs = Date.parse(cache.lastCheckedAt);
50
- if (!Number.isFinite(lastCheckedAtMs)) {
51
- return true;
34
+ let refreshed;
35
+ try {
36
+ refreshed = await fetchAndPersistUpdateCache({ cachePath, registryUrl, now }, { fetchLatestVersion: deps.fetchLatestVersion });
52
37
  }
53
- return now.getTime() - lastCheckedAtMs >= ttlMs;
38
+ catch {
39
+ // Keep the last known cache. The live scheduler will retry on its next interval.
40
+ }
41
+ return getUpdateStatusFromCache(refreshed ?? cache, {
42
+ currentVersion,
43
+ packageName
44
+ });
54
45
  }
55
46
  export function getUpdateStatusFromCache(cache, options) {
56
47
  const noUpdate = {
@@ -74,12 +65,6 @@ export function getUpdateStatusFromCache(cache, options) {
74
65
  lastCheckedAt: cache.lastCheckedAt
75
66
  };
76
67
  }
77
- async function refreshUpdateCache(options, deps = {}) {
78
- const nextCache = await fetchAndPersistUpdateCache(options, deps);
79
- if (!nextCache) {
80
- return;
81
- }
82
- }
83
68
  async function fetchAndPersistUpdateCache(options, deps = {}) {
84
69
  const fetchLatestVersion = deps.fetchLatestVersion ?? fetchLatestVersionFromRegistry;
85
70
  const latestVersion = await fetchLatestVersion(options.registryUrl);
@@ -1,6 +1,7 @@
1
1
  import type { AvailableUpdate, UpdateStatus } from './update-manager.js';
2
2
  export type StartupUpdatePromptOutcome = {
3
3
  kind: 'continue';
4
+ updateStatus?: UpdateStatus;
4
5
  } | {
5
6
  kind: 'run-update';
6
7
  update: AvailableUpdate;
@@ -2,14 +2,14 @@ import chalk from 'chalk';
2
2
  import { emitKeypressEvents } from 'readline';
3
3
  export async function runStartupUpdatePromptIfNeeded(updateStatus, deps = {}) {
4
4
  if (deps.suppress || updateStatus.kind !== 'available' || !updateStatus.command) {
5
- return { kind: 'continue' };
5
+ return { kind: 'continue', updateStatus };
6
6
  }
7
7
  const write = deps.write ?? ((text) => process.stdout.write(text));
8
8
  const promptSelection = deps.promptSelection ?? promptSelectionInteractive;
9
9
  const selection = await promptSelection(updateStatus, write);
10
10
  return selection === 'update-now'
11
11
  ? { kind: 'run-update', update: updateStatus }
12
- : { kind: 'continue' };
12
+ : { kind: 'continue', updateStatus };
13
13
  }
14
14
  export function renderStartupUpdatePrompt(update, selected = 'update-now') {
15
15
  const optionRow = (option, label) => {