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
@@ -55,6 +55,12 @@ export declare const ShortcutXLModelStreamTraceKind: {
55
55
  readonly RequestReceived: "requestReceived";
56
56
  };
57
57
  export type ShortcutXLModelStreamTraceKind = (typeof ShortcutXLModelStreamTraceKind)[keyof typeof ShortcutXLModelStreamTraceKind];
58
+ /** Best-effort confirmation that an initial submit crossed the worker boundary. */
59
+ export interface ShortcutXLInitialSubmitReceipt {
60
+ readonly commandId: string;
61
+ readonly receivedAt: number;
62
+ readonly userMessageId: string;
63
+ }
58
64
  /** One observability entry emitted while bridging requests across the port. */
59
65
  export interface ShortcutXLModelStreamTraceEntry {
60
66
  readonly eventKind?: ShortcutXLModelStreamEvent['kind'];
@@ -82,6 +88,7 @@ export interface ShortcutXLModelStreamBridgeMetrics {
82
88
  export interface CreateEmbeddedAgentPortClientOptions {
83
89
  hostToolExecutor: HostToolExecutor;
84
90
  modelStreamRequestHandler?: ShortcutXLModelStreamRequestHandler;
91
+ onInitialSubmitReceived?: (receipt: ShortcutXLInitialSubmitReceipt) => void;
85
92
  onModelStreamTrace?: (entry: ShortcutXLModelStreamTraceEntry) => void;
86
93
  registry: ToolRegistry;
87
94
  }
@@ -320,6 +320,21 @@ export function createEmbeddedAgentPortClient(port, options) {
320
320
  }
321
321
  const message = event.data;
322
322
  switch (message.kind) {
323
+ case WorkerMessageKind.AgentCommandReceived:
324
+ // Awaited submits are steering. This receipt only diagnoses the initial handoff.
325
+ if (pendingRuntimeCommands.has(message.commandId))
326
+ return;
327
+ try {
328
+ options.onInitialSubmitReceived?.({
329
+ commandId: message.commandId,
330
+ receivedAt: message.receivedAt,
331
+ userMessageId: message.userMessageId
332
+ });
333
+ }
334
+ catch {
335
+ // Observability callbacks must not change worker command behavior.
336
+ }
337
+ return;
323
338
  case WorkerMessageKind.AgentCommandAck: {
324
339
  const pendingCommand = pendingRuntimeCommands.get(message.commandId);
325
340
  if (!pendingCommand) {
@@ -4,7 +4,7 @@
4
4
  * Owns request/response correlation and the abort-side detachment rule for
5
5
  * results that arrive after the requesting tool has been cancelled.
6
6
  */
7
- import { AgentEventKind, AgentProtocolErrorKind, toStructuredCloneSafeAgentEvent } from '../../contracts/agent-api.js';
7
+ import { AgentCommandKind, AgentEventKind, AgentProtocolErrorKind, toStructuredCloneSafeAgentEvent } from '../../contracts/agent-api.js';
8
8
  import { WorkerMessageKind, isWorkerMessage } from '../../contracts/wire.js';
9
9
  import { isOutOfCreditsError } from '../out-of-credits-error.js';
10
10
  function createWorkerPortProtocolError(message) {
@@ -125,6 +125,22 @@ export function attachEmbeddedAgentDispatchToWorkerPort(port, controller, regist
125
125
  return;
126
126
  }
127
127
  const message = event.data;
128
+ if (message.command.kind === AgentCommandKind.SubmitPrompt &&
129
+ message.command.submitOptions?.userMessageId) {
130
+ const receiptMessage = {
131
+ kind: WorkerMessageKind.AgentCommandReceived,
132
+ commandId: message.commandId,
133
+ receivedAt: Date.now(),
134
+ userMessageId: message.command.submitOptions.userMessageId
135
+ };
136
+ try {
137
+ // Observability is best-effort and must never block command handling.
138
+ port.postMessage(receiptMessage);
139
+ }
140
+ catch {
141
+ // The command can still run even if its diagnostic receipt cannot be posted.
142
+ }
143
+ }
128
144
  void controller
129
145
  .handleCommand(message.command)
130
146
  .then(() => {
package/dist/main.js CHANGED
@@ -2,7 +2,6 @@
2
2
  import { isMogSdkAvailable } from '@shortcut/mog-sandbox-runtime';
3
3
  import chalk from 'chalk';
4
4
  import { existsSync } from 'fs';
5
- import { supportsXhigh } from './ai/models.js';
6
5
  import { SessionAutoApproveState } from './app/approvals/session-auto-approve.js';
7
6
  import { AuthStorage, FileAuthStorageBackend } from './app/auth/auth-storage.js';
8
7
  import { startProactiveRefresh } from './app/auth/refresh-timer.js';
@@ -85,6 +84,7 @@ import { createSessionManager } from './startup/session-selection.js';
85
84
  import { applyRuntimeApiKeyAndRefreshShortcutLoggerContext, applyShortcutUserInfoToLogger, refreshShortcutUserInfoLoggerContext, resolveShortcutUserInfo } from './startup/shortcut-user-logger-context.js';
86
85
  import { runForegroundUpdate } from './startup/update-action.js';
87
86
  import { runStartupUpdateFlow } from './startup/update-flow.js';
87
+ import { refreshUpdateStatus } from './startup/update-manager.js';
88
88
  import { runWindowsPythonRuntimeUpgradeIfNeeded } from './startup/windows-python-upgrade.js';
89
89
  import { createWorkbookPrePromptContext } from './startup/workbook-pre-prompt.js';
90
90
  let sessionRef = null;
@@ -160,7 +160,6 @@ export async function buildSessionOptions(parsed, sessionManager, modelRegistry,
160
160
  settingsManager: _settingsManager,
161
161
  filesystemApproval: approvalGates.fileAccess,
162
162
  shellApproval: approvalGates.bash,
163
- taskApproval: approvalGates.taskSpawn,
164
163
  observability: clientLogger
165
164
  };
166
165
  // Shut down old resources before creating new ones (avoids orphans on reload)
@@ -248,7 +247,7 @@ export async function buildSessionOptions(parsed, sessionManager, modelRegistry,
248
247
  const pool = await SheetEnginePool.init();
249
248
  newSheetPool = pool;
250
249
  sheetPoolRef = pool;
251
- registerRuntimeTool(availableTools, createExecuteCodeTool({ platform: 'mog', pool }), runtimeToolDeps);
250
+ registerRuntimeTool(availableTools, createExecuteCodeTool({ platform: 'mog', pool, approval: approvalGates.excel }), runtimeToolDeps);
252
251
  useNewSheet = true;
253
252
  }
254
253
  catch (error) {
@@ -693,6 +692,15 @@ export async function main(args) {
693
692
  offline: offlineMode,
694
693
  skipVersionCheck
695
694
  });
695
+ const startupUpdateStatus = updatePromptOutcome.kind === 'continue' ? updatePromptOutcome.updateStatus : undefined;
696
+ const toInteractiveUpdate = (status) => status?.kind === 'available'
697
+ ? {
698
+ currentVersion: status.currentVersion,
699
+ latestVersion: status.latestVersion
700
+ }
701
+ : undefined;
702
+ const interactiveUpdate = toInteractiveUpdate(startupUpdateStatus);
703
+ const updateChecksEnabled = isInteractive && !needsSetup && !offlineMode && !skipVersionCheck;
696
704
  if (updatePromptOutcome.kind === 'run-update') {
697
705
  console.log(chalk.green(`Installing ShortcutXL v${updatePromptOutcome.update.latestVersion}...`));
698
706
  const updateResult = await runForegroundUpdate({
@@ -825,7 +833,7 @@ export async function main(args) {
825
833
  cli_mode: cliMode
826
834
  }
827
835
  });
828
- // Expose the sheet pool on the session so the collab layer can access workbooks.
836
+ // Expose the sheet pool on the session for interactive workbook flows.
829
837
  if (sheetPoolRef) {
830
838
  session.sheetPool = sheetPoolRef;
831
839
  }
@@ -876,16 +884,7 @@ export async function main(args) {
876
884
  // This covers both --thinking <level> and --model <pattern>:<thinking>.
877
885
  const cliThinkingOverride = parsed.thinking !== undefined || cliThinkingFromModel;
878
886
  if (session.model && cliThinkingOverride) {
879
- let effectiveThinking = session.thinkingLevel;
880
- if (!session.model.reasoning) {
881
- effectiveThinking = 'off';
882
- }
883
- else if (effectiveThinking === 'xhigh' && !supportsXhigh(session.model)) {
884
- effectiveThinking = 'high';
885
- }
886
- if (effectiveThinking !== session.thinkingLevel) {
887
- session.setThinkingLevel(effectiveThinking);
888
- }
887
+ session.setThinkingLevel(session.thinkingLevel);
889
888
  }
890
889
  // In non-interactive modes, print startup messages to stderr since there's no TUI
891
890
  if (!isInteractive) {
@@ -987,6 +986,11 @@ export async function main(args) {
987
986
  initialImages,
988
987
  initialMessages: parsed.messages,
989
988
  verbose: parsed.verbose,
989
+ availableUpdate: interactiveUpdate,
990
+ updateLastCheckedAt: startupUpdateStatus?.lastCheckedAt,
991
+ checkForUpdate: updateChecksEnabled
992
+ ? async () => toInteractiveUpdate(await refreshUpdateStatus())
993
+ : undefined,
990
994
  fetchCreditBalance: async (apiKey) => {
991
995
  const model = session.model;
992
996
  if (!model || model.provider !== SHORTCUT_PROVIDER_ID)
@@ -8,5 +8,5 @@ export type { ImageContent } from '../ai/types.js';
8
8
  export type { FileUploadData } from '../app/file-uploads.js';
9
9
  export { prepareRpcAttachments, type RpcAttachment } from './rpc-attachments.js';
10
10
  export { RpcClient, type ModelInfo, type RpcClientOptions, type RpcEventListener, type RpcHostEventListener, type RpcTerminationListener } from './rpc-client.js';
11
- export { RPC_PROTOCOL_VERSION, isRpcClientMessage, isRpcServerMessage, type RpcAgentTask, type RpcAuthProvider, type RpcAuthState, type RpcClientMessage, type RpcCommand, type RpcCommandResult, type RpcContextUsage, type RpcFastModeState, type RpcHostEvent, type RpcInteractionRequest, type RpcInteractionResponse, type RpcModelInfo, type RpcPermissionState, type RpcResourceSkill, type RpcServerMessage, type RpcSessionSnapshot, type RpcSessionSummary, type RpcSettingsState, type RpcSlashCommand } from './rpc-types.js';
11
+ export { RPC_PROTOCOL_VERSION, isRpcClientMessage, isRpcServerMessage, type RpcAgentTask, type RpcAuthProvider, type RpcAuthState, type RpcClientMessage, type RpcCommand, type RpcCommandResult, type RpcContextUsage, type RpcFastModeState, type RpcHostEvent, type RpcInteractionRequest, type RpcInteractionResponse, type RpcLocalFileOpenResult, type RpcModelInfo, type RpcPermissionState, type RpcResourceSkill, type RpcServerMessage, type RpcSessionSnapshot, type RpcSessionSummary, type RpcSettingsState, type RpcSlashCommand } from './rpc-types.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -5,8 +5,7 @@ export function createRpcRuntimeApprovalGates(controller) {
5
5
  bash: gate,
6
6
  excel: gate,
7
7
  fileAccess: gate,
8
- switchMode: gate,
9
- taskSpawn: gate
8
+ switchMode: gate
10
9
  };
11
10
  }
12
11
  //# sourceMappingURL=rpc-approval-gates.js.map
@@ -4,6 +4,7 @@ import type { AuthStorage } from '../app/auth/auth-storage.js';
4
4
  import type { ExtensionUIContext } from '../app/extensions/index.js';
5
5
  import { listAllSessions } from '../app/session/session-catalog.js';
6
6
  import type { RemoteApprovalController } from '../remote-control/approval-controller.js';
7
+ import { type LocalFileOpenResult } from '../shell/links/local-file-opener.js';
7
8
  import { type RpcClientMessage, type RpcServerMessage, type RpcSlashCommand } from './rpc-types.js';
8
9
  export interface RpcSessionHostOptions {
9
10
  listSessions?: typeof listAllSessions;
@@ -14,6 +15,7 @@ export interface RpcSessionHostOptions {
14
15
  logout(providerId?: string): Promise<void>;
15
16
  }) => Promise<boolean>;
16
17
  extraCommands?: RpcSlashCommand[];
18
+ openLocalFileHref?: (href: string) => Promise<LocalFileOpenResult>;
17
19
  }
18
20
  /** One ordered command/event surface, independent of JSONL or Node IPC. */
19
21
  export declare class RpcSessionHost {
@@ -27,11 +29,13 @@ export declare class RpcSessionHost {
27
29
  private readonly authStorage?;
28
30
  private readonly commandHandler?;
29
31
  private readonly extraCommands;
32
+ private readonly openLocalFileHref;
30
33
  private activeLogin?;
31
34
  private loginAbortController?;
32
35
  private pendingMode?;
33
36
  private sequence;
34
37
  private commandQueue;
38
+ private fileOpenQueue;
35
39
  private shutdownRequested;
36
40
  private started;
37
41
  private closed;
@@ -12,6 +12,7 @@ import { getTaskScopeId, taskManager } from '../app/tools/task/manager.js';
12
12
  import { getAgentDir } from '../config.js';
13
13
  import { getCurrentMode, onModeChange } from '../mode-names.js';
14
14
  import { exportSessionToHtml } from '../shell/export-html/index.js';
15
+ import { openLocalFileLink } from '../shell/links/local-file-opener.js';
15
16
  import { RPC_PROTOCOL_VERSION } from './rpc-types.js';
16
17
  function errorMessage(error) {
17
18
  return error instanceof Error ? error.message : String(error);
@@ -28,11 +29,13 @@ export class RpcSessionHost {
28
29
  authStorage;
29
30
  commandHandler;
30
31
  extraCommands;
32
+ openLocalFileHref;
31
33
  activeLogin;
32
34
  loginAbortController;
33
35
  pendingMode;
34
36
  sequence = 0;
35
37
  commandQueue = Promise.resolve();
38
+ fileOpenQueue = Promise.resolve();
36
39
  shutdownRequested = false;
37
40
  started = false;
38
41
  closed = false;
@@ -48,6 +51,7 @@ export class RpcSessionHost {
48
51
  this.authStorage = options.authStorage;
49
52
  this.commandHandler = options.commandHandler;
50
53
  this.extraCommands = options.extraCommands ?? [];
54
+ this.openLocalFileHref = options.openLocalFileHref ?? openLocalFileLink;
51
55
  }
52
56
  subscribe(listener) {
53
57
  this.listeners.add(listener);
@@ -134,6 +138,11 @@ export class RpcSessionHost {
134
138
  return Promise.reject(new Error('RPC session host is not started'));
135
139
  if (this.closed)
136
140
  return Promise.reject(new Error('RPC session host is closed'));
141
+ if (message.command.type === 'open_local_file') {
142
+ const operation = this.fileOpenQueue.then(() => this.processMessage(message));
143
+ this.fileOpenQueue = operation.catch(() => { });
144
+ return operation;
145
+ }
137
146
  const operation = this.commandQueue.then(() => this.processMessage(message));
138
147
  this.commandQueue = operation.catch(() => { });
139
148
  return operation;
@@ -640,22 +649,16 @@ export class RpcSessionHost {
640
649
  this.publishSnapshot();
641
650
  return this.success();
642
651
  }
643
- case 'send_collab_message': {
644
- const client = this.session.collabClient;
645
- if (!client?.state.roomId)
646
- return this.failure('Not in a collaboration session');
647
- const message = command.message.trim();
648
- if (!message)
649
- return this.failure('Collaboration message cannot be empty');
650
- client.sendChat(message);
651
- return this.success();
652
- }
653
652
  case 'get_session_stats':
654
653
  return this.success(this.session.getSessionStats());
655
654
  case 'export_html':
656
655
  return this.success({
657
656
  path: await exportSessionToHtml(this.session, command.outputPath)
658
657
  });
658
+ case 'open_local_file':
659
+ if (typeof command.href !== 'string')
660
+ return this.failure('File link must be a string');
661
+ return this.success(await this.openLocalFileHref(command.href));
659
662
  case 'switch_session':
660
663
  return this.success({
661
664
  cancelled: !(await this.session.switchSession(command.sessionPath))
@@ -810,20 +813,6 @@ export class RpcSessionHost {
810
813
  errorMessage: task.errorMessage
811
814
  }));
812
815
  })(),
813
- collaboration: (() => {
814
- const state = this.session.collabClient?.state;
815
- return {
816
- connected: state?.connected ?? false,
817
- roomId: state?.roomId ?? null,
818
- peers: state
819
- ? [...state.peers.values()].map((peer) => ({
820
- id: peer.peerId,
821
- displayName: peer.displayName,
822
- sheets: peer.sheets
823
- }))
824
- : []
825
- };
826
- })(),
827
816
  isStreaming: this.session.isStreaming,
828
817
  isCompacting: this.session.isCompacting,
829
818
  steeringMode: this.session.steeringMode,
@@ -97,19 +97,6 @@ export interface RpcAgentTask {
97
97
  resultText?: string;
98
98
  errorMessage?: string;
99
99
  }
100
- export interface RpcCollaborationState {
101
- connected: boolean;
102
- roomId: string | null;
103
- peers: Array<{
104
- id: string;
105
- displayName: string;
106
- sheets?: Array<{
107
- name: string;
108
- cellCount: number;
109
- usedRange?: string | null;
110
- }>;
111
- }>;
112
- }
113
100
  export interface RpcSessionSummary {
114
101
  id: string;
115
102
  path?: string;
@@ -124,6 +111,9 @@ export interface RpcContextUsage {
124
111
  contextWindow: number;
125
112
  percent: number | null;
126
113
  }
114
+ export interface RpcLocalFileOpenResult {
115
+ path: string;
116
+ }
127
117
  export interface RpcSessionSnapshot {
128
118
  session: RpcSessionSummary;
129
119
  environment: {
@@ -143,7 +133,6 @@ export interface RpcSessionSnapshot {
143
133
  settings: RpcSettingsState;
144
134
  goal: ShortcutXLThreadGoal | null;
145
135
  agentTasks: RpcAgentTask[];
146
- collaboration: RpcCollaborationState;
147
136
  isStreaming: boolean;
148
137
  isCompacting: boolean;
149
138
  steeringMode: 'all' | 'one-at-a-time';
@@ -287,14 +276,14 @@ export type RpcCommand = {
287
276
  type: 'message_agent_task';
288
277
  agentId: string;
289
278
  message: string;
290
- } | {
291
- type: 'send_collab_message';
292
- message: string;
293
279
  } | {
294
280
  type: 'get_session_stats';
295
281
  } | {
296
282
  type: 'export_html';
297
283
  outputPath?: string;
284
+ } | {
285
+ type: 'open_local_file';
286
+ href: string;
298
287
  } | {
299
288
  type: 'switch_session';
300
289
  sessionPath: string;
@@ -1,8 +1,11 @@
1
1
  /**
2
2
  * Cross-platform "open" utility — launches files/directories in the OS default handler.
3
3
  */
4
+ export interface OpenInEditorOptions {
5
+ directory?: boolean;
6
+ }
4
7
  /** Convert any error thrown by openInEditor into a human-readable string. */
5
8
  export declare function formatOpenError(error: unknown): string;
6
9
  /** Open a file or directory in the OS default editor/handler. */
7
- export declare function openInEditor(path: string): Promise<void>;
10
+ export declare function openInEditor(path: string, options?: OpenInEditorOptions): Promise<void>;
8
11
  //# sourceMappingURL=open.d.ts.map
@@ -1,15 +1,27 @@
1
1
  /**
2
2
  * Cross-platform "open" utility — launches files/directories in the OS default handler.
3
3
  */
4
- import { execFile } from 'child_process';
4
+ import { execFile, spawn } from 'child_process';
5
5
  /** Convert any error thrown by openInEditor into a human-readable string. */
6
6
  export function formatOpenError(error) {
7
7
  return error instanceof Error ? error.message : String(error);
8
8
  }
9
9
  /** Open a file or directory in the OS default editor/handler. */
10
- export function openInEditor(path) {
10
+ export function openInEditor(path, options = {}) {
11
11
  if (process.platform === 'win32') {
12
12
  return new Promise((resolve, reject) => {
13
+ if (options.directory) {
14
+ const child = spawn('explorer.exe', ['/n,', path], {
15
+ detached: true,
16
+ stdio: 'ignore'
17
+ });
18
+ child.once('error', reject);
19
+ child.once('spawn', () => {
20
+ child.unref();
21
+ resolve();
22
+ });
23
+ return;
24
+ }
13
25
  execFile('rundll32.exe', ['url.dll,FileProtocolHandler', path], { windowsHide: true }, (error) => {
14
26
  if (error) {
15
27
  reject(error);
@@ -1,15 +1,13 @@
1
- import { createApprovalGate, createBatchingApprovalGate } from './approval.js';
1
+ import { createApprovalGate } from './approval.js';
2
2
  import { BashApprovalComponent } from './bash-approval.js';
3
3
  import { ExcelApprovalComponent } from './excel-approval.js';
4
4
  import { FileAccessApprovalComponent } from './file-access-approval.js';
5
5
  import { SwitchModeApprovalComponent } from './switch-mode-approval.js';
6
- import { TaskSpawnApprovalComponent } from './task-spawn-approval.js';
7
6
  /** Build the terminal-owned approval surface, optionally routed to phone control. */
8
7
  export function createInteractiveRuntimeApprovalGates(approvalState, remoteControl) {
9
8
  return {
10
9
  fileAccess: remoteControl.createApprovalGate(createApprovalGate(FileAccessApprovalComponent, approvalState)),
11
10
  bash: remoteControl.createApprovalGate(createApprovalGate(BashApprovalComponent, approvalState)),
12
- taskSpawn: remoteControl.createApprovalGate(createBatchingApprovalGate(TaskSpawnApprovalComponent)),
13
11
  switchMode: remoteControl.createApprovalGate(createApprovalGate(SwitchModeApprovalComponent, approvalState)),
14
12
  excel: remoteControl.createApprovalGate(createApprovalGate(ExcelApprovalComponent, approvalState))
15
13
  };
@@ -7,8 +7,9 @@
7
7
  */
8
8
  import { modelsAreEqual } from '../../../ai/models.js';
9
9
  import { filterInteractiveSelectableModels } from '../../../app/session/session-models.js';
10
+ import { fuzzyFilter } from '../../../autocomplete/fuzzy.js';
10
11
  import { formatCompactModelLabel } from '../../../model-display.js';
11
- import { Container, fuzzyFilter, getEditorKeybindings, Input, Spacer, Text } from '../../../tui/index.js';
12
+ import { Container, getEditorKeybindings, Input, Spacer, Text } from '../../../tui/index.js';
12
13
  import { theme } from '../../theme/runtime.js';
13
14
  import { DynamicBorder } from '../primitives/dynamic-border.js';
14
15
  /**
@@ -5,7 +5,7 @@
5
5
  * exact matching, and `re:<pattern>` regex matching. Provides sort modes
6
6
  * (threaded, recent, relevance) and an optional name-only filter.
7
7
  */
8
- import { fuzzyMatch } from '../../../tui/index.js';
8
+ import { fuzzyMatch } from '../../../autocomplete/fuzzy.js';
9
9
  function normalizeWhitespaceLower(text) {
10
10
  return text.toLowerCase().replace(/\s+/g, ' ').trim();
11
11
  }
@@ -2,12 +2,13 @@ import { Container, SelectList } from '../../../tui/index.js';
2
2
  import { getSelectListTheme } from '../../theme/theme.js';
3
3
  import { DynamicBorder } from '../primitives/dynamic-border.js';
4
4
  const LEVEL_DESCRIPTIONS = {
5
- off: 'No reasoning',
6
- minimal: 'Very brief reasoning (~1k tokens)',
7
- low: 'Light reasoning (~2k tokens)',
8
- medium: 'Moderate reasoning (~8k tokens)',
9
- high: 'Deep reasoning (~16k tokens)',
10
- xhigh: 'Maximum reasoning (~32k tokens)'
5
+ off: 'Disable reasoning',
6
+ minimal: 'Minimal reasoning',
7
+ low: 'Low reasoning',
8
+ medium: 'Medium reasoning',
9
+ high: 'High reasoning',
10
+ xhigh: 'Extra-high reasoning',
11
+ max: 'Maximum reasoning'
11
12
  };
12
13
  /**
13
14
  * Component that renders a thinking level selector with borders
@@ -4,7 +4,6 @@ export { ExcelApprovalComponent } from './approvals/excel-approval.js';
4
4
  export { FileAccessApprovalComponent } from './approvals/file-access-approval.js';
5
5
  export { createNetworkPrompt } from './approvals/sandbox-prompt.js';
6
6
  export { SwitchModeApprovalComponent } from './approvals/switch-mode-approval.js';
7
- export { TaskSpawnApprovalComponent } from './approvals/task-spawn-approval.js';
8
7
  export { handleMcpCommand } from './commands/mcp-command.js';
9
8
  export { createShortyCommand, createShortySlashCommand } from './commands/shorty-command.js';
10
9
  export { getTraceHooks } from './dev/index.js';
@@ -4,7 +4,6 @@ export { ExcelApprovalComponent } from './approvals/excel-approval.js';
4
4
  export { FileAccessApprovalComponent } from './approvals/file-access-approval.js';
5
5
  export { createNetworkPrompt } from './approvals/sandbox-prompt.js';
6
6
  export { SwitchModeApprovalComponent } from './approvals/switch-mode-approval.js';
7
- export { TaskSpawnApprovalComponent } from './approvals/task-spawn-approval.js';
8
7
  export { handleMcpCommand } from './commands/mcp-command.js';
9
8
  export { createShortyCommand, createShortySlashCommand } from './commands/shorty-command.js';
10
9
  export { getTraceHooks } from './dev/index.js';
@@ -7,6 +7,8 @@ import type { SkillUploadApprovalRequest } from '../../app/sync/skills-upload.js
7
7
  import type { WorkbookScopeStateRef } from '../../app/workbook-scope.js';
8
8
  import type { SelectItem } from '../../tui/index.js';
9
9
  import type { Terminal } from '../../tui/terminal.js';
10
+ import type { LocalFileOpenResult } from '../links/local-file-opener.js';
11
+ import type { InteractiveAvailableUpdate } from '../status/update-reminder.js';
10
12
  import type { SlashCommandDefinition } from './slash-commands.js';
11
13
  import type { WorkbookScopeDeps } from './workbook-scope-controller.js';
12
14
  export type CompactionQueuedMessage = {
@@ -29,6 +31,8 @@ export interface CreditBalance {
29
31
  export interface InteractiveModeOptions {
30
32
  /** Custom terminal implementation for the interactive shell. */
31
33
  terminal?: Terminal;
34
+ /** Override local file opening for deterministic shell tests. */
35
+ openLocalFileHref?: (href: string) => Promise<LocalFileOpenResult>;
32
36
  skipShortcutAuth?: boolean;
33
37
  exitProcessOnShutdown?: boolean;
34
38
  workbookScopeRef?: WorkbookScopeStateRef;
@@ -46,6 +50,12 @@ export interface InteractiveModeOptions {
46
50
  initialMessages?: string[];
47
51
  /** Force verbose startup (overrides quietStartup setting) */
48
52
  verbose?: boolean;
53
+ /** Update retained after the user skips the startup prompt. */
54
+ availableUpdate?: InteractiveAvailableUpdate;
55
+ /** Timestamp used to schedule the next non-blocking registry check. */
56
+ updateLastCheckedAt?: string;
57
+ /** Refresh available update state for the running shell. */
58
+ checkForUpdate?: () => Promise<InteractiveAvailableUpdate | undefined>;
49
59
  /**
50
60
  * Fetch credit balance for the current API key. Injected by main.ts.
51
61
  * Returns CreditBalance when credits apply, 'not_applicable' when the model
@@ -10,6 +10,7 @@ export declare class InteractiveMode {
10
10
  private options;
11
11
  private session;
12
12
  private ui;
13
+ private readonly localFileLinkInput;
13
14
  private renderTracePath;
14
15
  private shellLayout;
15
16
  private mainContentContainer;
@@ -111,17 +112,15 @@ export declare class InteractiveMode {
111
112
  private widgetContainerBelow;
112
113
  private customFooter;
113
114
  private headerContainer;
115
+ private updateReminderController;
114
116
  private builtInHeader;
115
117
  private customHeader;
116
118
  private isBashMode;
117
- private isChatMode;
118
119
  private creditPollInterval;
119
120
  private static readonly CREDIT_POLL_INTERVAL_MS;
120
121
  private readonly creditGate;
121
122
  private _commands;
122
123
  private _resourceDisplay;
123
- private _collabManager;
124
- private _superFight;
125
124
  private readonly manualMemoryCoordinator;
126
125
  private readonly manualSkillProposalBackground;
127
126
  /** AgentController for the current session. */
@@ -252,6 +251,7 @@ export declare class InteractiveMode {
252
251
  /** Wire interactive shell key handlers via registerInteractiveActions. */
253
252
  private setupKeyHandlers;
254
253
  private handleEditorSelectionInput;
254
+ private handleLocalFileLink;
255
255
  /**
256
256
  * Screen-row range (1-based, inclusive) occupied by the editor, derived from
257
257
  * geometry cached during the last frame render — no re-render per mouse event.
@@ -283,9 +283,7 @@ export declare class InteractiveMode {
283
283
  private tryAttachClipboardFilePath;
284
284
  /** Build a CommandContext for slash command handlers. */
285
285
  private _buildCommandContext;
286
- /** Lazily build the collaboration command client backed by CollabManager. */
287
- private getCollabCommandClient;
288
- /** Wire the default editor submit handler covering bash, chat, slash, and prompt dispatch. */
286
+ /** Wire the default editor submit handler covering bash, slash, and prompt dispatch. */
289
287
  private setupEditorSubmitHandler;
290
288
  /** Wire the InteractiveSessionController to all agent lifecycle events. */
291
289
  private subscribeToAgent;
@@ -375,13 +373,9 @@ export declare class InteractiveMode {
375
373
  private handleFollowUp;
376
374
  /** Handle dequeue keybind: pull queued messages back into the editor for editing. */
377
375
  private handleDequeue;
378
- /** Refresh the editor border color based on bash/chat/thinking state. */
376
+ /** Refresh the editor border color based on bash/thinking state. */
379
377
  private updateEditorBorderColor;
380
- /** Subscribe to CollabClient events and surface peer activity in chat. */
381
- private _attachCollabEvents;
382
- /** Launch the SuperFight collab mini-game UI for the current room. */
383
- private launchSuperFight;
384
- /** Watch editor text and toggle bash/chat-mode borders based on `!`/`:` prefixes. */
378
+ /** Watch editor text and toggle bash-mode borders based on the `!` prefix. */
385
379
  private setupBashModeDetection;
386
380
  /** Execute a `!`-prefixed bash command, streaming output into the chat container. */
387
381
  private executeBashCommand;