shortcutxl 0.3.79 → 0.3.81

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 (283) hide show
  1. package/BINARY-INVENTORY.json +14 -14
  2. package/CHANGELOG.md +14 -0
  3. package/dist/ai/models.d.ts +2 -0
  4. package/dist/ai/models.js +23 -0
  5. package/dist/ai/providers/anthropic.js +18 -13
  6. package/dist/ai/providers/openai-reasoning.d.ts +4 -1
  7. package/dist/ai/providers/openai-reasoning.js +10 -4
  8. package/dist/ai/providers/provider-error-normalization.js +1 -1
  9. package/dist/app/agent-definition.d.ts +0 -5
  10. package/dist/app/agent-session-runtime-adapter.d.ts +9 -0
  11. package/dist/app/agent-session-runtime-adapter.js +39 -27
  12. package/dist/app/agent-session.d.ts +0 -1
  13. package/dist/app/agent-session.js +12 -0
  14. package/dist/app/background/tool-summaries.d.ts +3 -3
  15. package/dist/app/background/tool-summaries.js +5 -3
  16. package/dist/app/background-agents/durable-memory/coordinator.js +2 -2
  17. package/dist/app/extensions/durable-memory/constants.d.ts +3 -1
  18. package/dist/app/extensions/durable-memory/constants.js +4 -1
  19. package/dist/app/extensions/slash-commands.d.ts +4 -2
  20. package/dist/app/extensions/slash-commands.js +6 -7
  21. package/dist/app/index.d.ts +0 -4
  22. package/dist/app/index.js +0 -4
  23. package/dist/app/local/tools/execute-code/executor.d.ts +3 -3
  24. package/dist/app/local/tools/execute-code/executor.js +4 -5
  25. package/dist/app/local/tools/execute-code/tool.d.ts +2 -1
  26. package/dist/app/local/tools/execute-code/tool.js +3 -4
  27. package/dist/app/local/tools/take-screenshot/com-screenshot.d.ts +2 -1
  28. package/dist/app/local/tools/take-screenshot/com-screenshot.js +7 -8
  29. package/dist/app/mcp/index.js +54 -16
  30. package/dist/app/mcp/mcp-describe-tool.d.ts +1 -1
  31. package/dist/app/mcp/mcp-describe-tool.js +4 -1
  32. package/dist/app/mcp/mcp-execute-tool.d.ts +1 -1
  33. package/dist/app/mcp/mcp-execute-tool.js +4 -1
  34. package/dist/app/modes/action/agent.d.ts +1 -1
  35. package/dist/app/modes/action/prompt.js +2 -1
  36. package/dist/app/modes/index.d.ts +1 -0
  37. package/dist/app/modes/index.js +4 -1
  38. package/dist/app/modes/installation/prompt-windows.js +3 -3
  39. package/dist/app/modes/review/agent.d.ts +5 -0
  40. package/dist/app/modes/review/agent.js +14 -0
  41. package/dist/app/observability/client-logging/client-logger.d.ts +2 -3
  42. package/dist/app/observability/client-logging/client-logger.js +2 -3
  43. package/dist/app/observability/client-logging/startup-events.d.ts +1 -1
  44. package/dist/app/observability/client-logging/startup-events.js +2 -2
  45. package/dist/app/observability/client-logging/types.d.ts +0 -1
  46. package/dist/app/prompts/com-api.js +1 -1
  47. package/dist/app/prompts/shared-guidelines.js +3 -3
  48. package/dist/app/prompts/spreadjs-api-reference.json +1 -1
  49. package/dist/app/providers/register-shortcut-provider.d.ts +3 -1
  50. package/dist/app/providers/register-shortcut-provider.js +17 -6
  51. package/dist/app/resources/agents.d.ts +1 -1
  52. package/dist/app/resources/agents.js +1 -5
  53. package/dist/app/session/compaction-observability.d.ts +0 -1
  54. package/dist/app/session/run-agent-observability.d.ts +0 -1
  55. package/dist/app/session/run-agent-observability.js +0 -1
  56. package/dist/app/session/session-models.js +1 -1
  57. package/dist/app/subagents/clone/agent.js +1 -2
  58. package/dist/app/subagents/defaults.d.ts +18 -2
  59. package/dist/app/subagents/defaults.js +28 -3
  60. package/dist/app/subagents/document-reader/agent.js +1 -2
  61. package/dist/app/subagents/index.d.ts +1 -1
  62. package/dist/app/subagents/index.js +2 -1
  63. package/dist/app/subagents/simulation/agent.js +1 -2
  64. package/dist/app/subagents/verification/agent.js +1 -2
  65. package/dist/app/subagents/workbook-reader/agent.js +1 -2
  66. package/dist/app/tools/execute-code/index.d.ts +2 -1
  67. package/dist/app/tools/execute-code/index.js +1 -5
  68. package/dist/app/tools/task/lifecycle.d.ts +4 -1
  69. package/dist/app/tools/task/lifecycle.js +2 -0
  70. package/dist/app/tools/task/runner.d.ts +5 -0
  71. package/dist/app/tools/task/runner.js +2 -3
  72. package/dist/app/tools/task/task.d.ts +12 -0
  73. package/dist/app/tools/task/task.js +56 -21
  74. package/dist/app/workbook-context/workbook-summary.d.ts +6 -1
  75. package/dist/app/workbook-context/workbook-summary.js +15 -19
  76. package/dist/app/xll/config.d.ts +2 -1
  77. package/dist/app/xll/config.js +5 -3
  78. package/dist/app/xll/excel-target.d.ts +50 -0
  79. package/dist/app/xll/excel-target.js +111 -0
  80. package/dist/app/xll/host-registry.d.ts +33 -0
  81. package/dist/app/xll/host-registry.js +154 -0
  82. package/dist/app/xll/session.d.ts +9 -34
  83. package/dist/app/xll/session.js +25 -90
  84. package/dist/cli/args.d.ts +3 -0
  85. package/dist/cli/args.js +14 -1
  86. package/dist/cli.js +183348 -182417
  87. package/dist/config.d.ts +8 -1
  88. package/dist/config.js +11 -6
  89. package/dist/contracts/agent-api.d.ts +52 -3
  90. package/dist/contracts/agent-api.js +45 -0
  91. package/dist/contracts/host-tool-api.d.ts +1 -0
  92. package/dist/contracts/host-tool-api.js +1 -0
  93. package/dist/contracts/host-tool-request-id.d.ts +4 -0
  94. package/dist/contracts/host-tool-request-id.js +6 -0
  95. package/dist/contracts/model-stream.js +7 -1
  96. package/dist/core/agent-controller.d.ts +3 -1
  97. package/dist/core/agent-controller.js +6 -0
  98. package/dist/core/agent-engine.d.ts +0 -7
  99. package/dist/core/agent-engine.js +0 -3
  100. package/dist/core/agent-loop.js +0 -10
  101. package/dist/core/core-types.d.ts +0 -8
  102. package/dist/core/embedded-agent-facade.d.ts +4 -1
  103. package/dist/core/embedded-agent-facade.js +18 -5
  104. package/dist/core/pending-host-tool-requests.d.ts +20 -1
  105. package/dist/core/pending-host-tool-requests.js +21 -1
  106. package/dist/core/prompts/agent-guidelines.d.ts +1 -1
  107. package/dist/core/prompts/agent-guidelines.js +0 -8
  108. package/dist/core/prompts/take-screenshot.d.ts +3 -1
  109. package/dist/core/prompts/take-screenshot.js +4 -1
  110. package/dist/core/review-mode-prompt.d.ts +3 -0
  111. package/dist/{embedded-agent/prompt/modes/review.js → core/review-mode-prompt.js} +4 -16
  112. package/dist/core/session/compaction/compaction.d.ts +3 -8
  113. package/dist/core/session/compaction/compaction.js +3 -16
  114. package/dist/core/session/compaction-bridge.d.ts +3 -17
  115. package/dist/core/session/compaction-bridge.js +8 -29
  116. package/dist/core/session/session-compaction.d.ts +2 -0
  117. package/dist/core/session/session-compaction.js +5 -1
  118. package/dist/embedded-agent/compaction-wiring.d.ts +0 -6
  119. package/dist/embedded-agent/compaction-wiring.js +6 -58
  120. package/dist/embedded-agent/compose.js +130 -19
  121. package/dist/embedded-agent/host-runtime-options.d.ts +2 -0
  122. package/dist/embedded-agent/host-runtime-options.js +81 -0
  123. package/dist/embedded-agent/host-tools/build-tool-list.d.ts +3 -0
  124. package/dist/embedded-agent/host-tools/build-tool-list.js +3 -1
  125. package/dist/embedded-agent/host-tools/create-website/contract.d.ts +5 -3
  126. package/dist/embedded-agent/host-tools/create-website/contract.js +34 -14
  127. package/dist/embedded-agent/host-tools/create-website/index.d.ts +1 -1
  128. package/dist/embedded-agent/host-tools/create-website/index.js +1 -1
  129. package/dist/embedded-agent/host-tools/get-tool-info/shared.d.ts +1 -1
  130. package/dist/embedded-agent/host-tools/mode-host-tools.d.ts +2 -0
  131. package/dist/embedded-agent/host-tools/mode-host-tools.js +1 -0
  132. package/dist/embedded-agent/host-tools/take-screenshot/contract.d.ts +4 -2
  133. package/dist/embedded-agent/host-tools/take-screenshot/contract.js +4 -2
  134. package/dist/embedded-agent/host-tools/take-screenshot/index.d.ts +1 -1
  135. package/dist/embedded-agent/host-tools/take-screenshot/index.js +1 -1
  136. package/dist/embedded-agent/host-tools/task/agent-definition.d.ts +0 -4
  137. package/dist/embedded-agent/host-tools/task/agent-definition.js +0 -2
  138. package/dist/embedded-agent/host-tools/task/agents/clone.js +2 -4
  139. package/dist/embedded-agent/host-tools/task/agents/document-reader.js +2 -4
  140. package/dist/embedded-agent/host-tools/task/agents/simulation.js +2 -4
  141. package/dist/embedded-agent/host-tools/task/agents/verification.js +2 -4
  142. package/dist/embedded-agent/host-tools/task/agents/workbook-reader.js +2 -4
  143. package/dist/embedded-agent/host-tools/task/contract.d.ts +7 -15
  144. package/dist/embedded-agent/host-tools/task/contract.js +40 -40
  145. package/dist/embedded-agent/host-tools/task/index.d.ts +2 -2
  146. package/dist/embedded-agent/host-tools/task/index.js +1 -2
  147. package/dist/embedded-agent/host-tools/task/lifecycle.js +7 -5
  148. package/dist/embedded-agent/host-tools/task/runner.d.ts +8 -2
  149. package/dist/embedded-agent/host-tools/task/runner.js +26 -9
  150. package/dist/embedded-agent/host-tools/task/send-message.js +2 -1
  151. package/dist/embedded-agent/index.d.ts +33 -20
  152. package/dist/embedded-agent/index.js +1 -0
  153. package/dist/embedded-agent/model-registry.d.ts +6 -0
  154. package/dist/embedded-agent/model-registry.js +24 -3
  155. package/dist/embedded-agent/prompt/build.js +1 -1
  156. package/dist/embedded-agent/prompt/modes/action.js +2 -1
  157. package/dist/embedded-agent/review/agent.d.ts +14 -0
  158. package/dist/embedded-agent/review/agent.js +43 -0
  159. package/dist/embedded-agent/review/coordinator.d.ts +89 -0
  160. package/dist/embedded-agent/review/coordinator.js +233 -0
  161. package/dist/embedded-agent/review/findings.d.ts +7 -0
  162. package/dist/embedded-agent/review/findings.js +63 -0
  163. package/dist/embedded-agent/suggestions.js +9 -6
  164. package/dist/embedded-agent/transport-errors.js +5 -2
  165. package/dist/embedded-agent/worker-bridge/dispatch.d.ts +2 -2
  166. package/dist/embedded-agent/worker-bridge/dispatch.js +20 -23
  167. package/dist/embedded-agent/worker-bridge/host-client.d.ts +3 -2
  168. package/dist/embedded-agent/worker-bridge/host-client.js +38 -41
  169. package/dist/embedded-agent/worker-bridge/worker-port.d.ts +1 -1
  170. package/dist/embedded-agent/worker-bridge/worker-port.js +6 -5
  171. package/dist/launcher/native-app.js +6 -1
  172. package/dist/main-helpers.d.ts +1 -0
  173. package/dist/main-helpers.js +14 -1
  174. package/dist/main.d.ts +1 -0
  175. package/dist/main.js +118 -42
  176. package/dist/mode-names.d.ts +1 -0
  177. package/dist/mode-names.js +1 -0
  178. package/dist/model-display.js +1 -1
  179. package/dist/model-ids.d.ts +11 -9
  180. package/dist/model-ids.js +20 -15
  181. package/dist/rpc/index.d.ts +1 -1
  182. package/dist/rpc/rpc-excel-runtime.d.ts +13 -0
  183. package/dist/rpc/rpc-excel-runtime.js +144 -0
  184. package/dist/rpc/rpc-host.d.ts +18 -1
  185. package/dist/rpc/rpc-host.js +115 -10
  186. package/dist/rpc/rpc-mode.d.ts +1 -1
  187. package/dist/rpc/rpc-types.d.ts +78 -0
  188. package/dist/runtime-model-overlay.d.ts +27 -0
  189. package/dist/runtime-model-overlay.js +281 -0
  190. package/dist/setup.d.ts +26 -0
  191. package/dist/setup.js +79 -0
  192. package/dist/shell/clipboard/clipboard.js +6 -1
  193. package/dist/shell/components/primitives/footer.d.ts +1 -1
  194. package/dist/shell/components/primitives/footer.js +16 -13
  195. package/dist/shell/index.d.ts +0 -1
  196. package/dist/shell/index.js +0 -1
  197. package/dist/shell/interactive/excel-status.d.ts +4 -0
  198. package/dist/shell/interactive/excel-status.js +13 -0
  199. package/dist/shell/interactive/interactive-mode-options.d.ts +3 -0
  200. package/dist/shell/interactive/interactive-mode.d.ts +12 -5
  201. package/dist/shell/interactive/interactive-mode.js +149 -31
  202. package/dist/shell/interactive/workbook-scope-controller.d.ts +1 -1
  203. package/dist/shell/interactive/workbook-scope-controller.js +9 -6
  204. package/dist/shortcut-model-catalog.d.ts +1 -0
  205. package/dist/shortcut-model-catalog.js +96 -3
  206. package/dist/startup/preflight/index.d.ts +11 -1
  207. package/dist/startup/preflight/index.js +5 -6
  208. package/dist/startup/preflight/utils.d.ts +8 -0
  209. package/dist/startup/preflight/utils.js +14 -0
  210. package/dist/startup/preflight/windows.d.ts +11 -3
  211. package/dist/startup/preflight/windows.js +27 -16
  212. package/dist/startup/runtime-routing.d.ts +6 -4
  213. package/dist/startup/runtime-routing.js +15 -4
  214. package/dist/startup/sync-xll.d.ts +7 -0
  215. package/dist/startup/sync-xll.js +27 -2
  216. package/dist/startup/update-manager.d.ts +2 -0
  217. package/dist/startup/update-manager.js +2 -1
  218. package/dist/startup/windows-excel-runtime-upgrade.d.ts +13 -0
  219. package/dist/startup/windows-excel-runtime-upgrade.js +56 -0
  220. package/dist/startup/xll-requirements.d.ts +8 -0
  221. package/dist/startup/xll-requirements.js +9 -0
  222. package/dist/subagent-model-policy.d.ts +37 -0
  223. package/dist/subagent-model-policy.js +35 -0
  224. package/dist/subagent-thinking-policy.d.ts +14 -0
  225. package/dist/subagent-thinking-policy.js +17 -0
  226. package/dist/update.d.ts +4 -0
  227. package/dist/update.js +3 -0
  228. package/dist/utils/api-reference.d.ts +2 -1
  229. package/dist/utils/api-reference.js +7 -1
  230. package/dist/utils/mog-headless-api-reference.js +4 -2
  231. package/native-app/main/chunks/linux-zbDx-phY.js +43 -0
  232. package/native-app/main/chunks/mac-B0tPNjg3.js +36 -0
  233. package/native-app/main/{photon_rs-XkYyYTVA.js → chunks/photon_rs-BibpYw4G.js} +1 -1
  234. package/native-app/main/chunks/setup-worker-protocol-CD16E33n.js +658 -0
  235. package/native-app/main/chunks/shared-Bfla4vPs.js +190 -0
  236. package/native-app/main/index.js +672 -555
  237. package/native-app/main/setup-worker.js +1236 -0
  238. package/native-app/main/update-helper.js +92 -0
  239. package/native-app/package.json +1 -1
  240. package/native-app/preload/index.cjs +28 -2
  241. package/native-app/renderer/assets/{index-C__g36ft.css → index-C6Qju_hO.css} +594 -65
  242. package/native-app/renderer/assets/{index-k2kM-5sa.js → index-CcP3xE7V.js} +906 -265
  243. package/native-app/renderer/index.html +2 -2
  244. package/package.json +18 -2
  245. package/xll/ShortcutXL.xll +0 -0
  246. package/xll/python/Lib/site-packages/httpx-0.28.1.dist-info/RECORD +1 -1
  247. package/xll/python/Lib/site-packages/idna-3.18.dist-info/RECORD +1 -1
  248. package/xll/python/Lib/site-packages/pip-26.2.dist-info/RECORD +3 -3
  249. package/xll/python/Lib/site-packages/pywin32-311.dist-info/RECORD +2 -2
  250. package/xll/python/Scripts/httpx.exe +0 -0
  251. package/xll/python/Scripts/idna.exe +0 -0
  252. package/xll/python/Scripts/pip.exe +0 -0
  253. package/xll/python/Scripts/pip3.13.exe +0 -0
  254. package/xll/python/Scripts/pip3.exe +0 -0
  255. package/xll/python/Scripts/pywin32_postinstall.exe +0 -0
  256. package/xll/python/Scripts/pywin32_testall.exe +0 -0
  257. package/dist/app/skill-proposals/agent-tools.d.ts +0 -9
  258. package/dist/app/skill-proposals/agent-tools.js +0 -168
  259. package/dist/app/skill-proposals/background.d.ts +0 -33
  260. package/dist/app/skill-proposals/background.js +0 -244
  261. package/dist/app/skill-proposals/catalog.d.ts +0 -25
  262. package/dist/app/skill-proposals/catalog.js +0 -72
  263. package/dist/app/skill-proposals/extension.d.ts +0 -10
  264. package/dist/app/skill-proposals/extension.js +0 -14
  265. package/dist/app/skill-proposals/prompt.d.ts +0 -17
  266. package/dist/app/skill-proposals/prompt.js +0 -88
  267. package/dist/app/skill-proposals/proposal-fs.d.ts +0 -37
  268. package/dist/app/skill-proposals/proposal-fs.js +0 -132
  269. package/dist/app/skill-proposals/review.d.ts +0 -22
  270. package/dist/app/skill-proposals/review.js +0 -114
  271. package/dist/app/skill-proposals/scan-state.d.ts +0 -13
  272. package/dist/app/skill-proposals/scan-state.js +0 -39
  273. package/dist/app/skill-proposals/status.d.ts +0 -33
  274. package/dist/app/skill-proposals/status.js +0 -13
  275. package/dist/app/xll/endpoint.d.ts +0 -9
  276. package/dist/app/xll/endpoint.js +0 -18
  277. package/dist/embedded-agent/prompt/modes/review.d.ts +0 -15
  278. package/dist/shell/interactive/proposals-workflow.d.ts +0 -32
  279. package/dist/shell/interactive/proposals-workflow.js +0 -220
  280. package/dist/shell/status/skill-proposals-status.d.ts +0 -9
  281. package/dist/shell/status/skill-proposals-status.js +0 -88
  282. package/dist/startup/windows-python-upgrade.d.ts +0 -10
  283. package/dist/startup/windows-python-upgrade.js +0 -53
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-07-31T22:01:28.567Z",
3
+ "generatedAt": "2026-08-12T04:56:55.420Z",
4
4
  "package": "shortcutxl",
5
5
  "build": {
6
6
  "builder": "github-actions",
7
7
  "repository": "lyfegame/shortcut",
8
- "sourceRef": "refs/heads/codex/shortcutxl-prebuilt-docs-pdf",
9
- "sourceCommit": "85cc4b079647eb13987891b56e3336a755ca40f4",
10
- "workflowRef": "lyfegame/shortcut/.github/workflows/release-shortcutxl.yml@refs/heads/codex/shortcutxl-prebuilt-docs-pdf",
11
- "runId": "30668500460",
8
+ "sourceRef": "refs/heads/codex/native-resources-and-clipboard",
9
+ "sourceCommit": "ff226182eb12799fcc6c1a9b8ede4fbfb18bfa7e",
10
+ "workflowRef": "lyfegame/shortcut/.github/workflows/release-shortcutxl.yml@refs/heads/codex/native-resources-and-clipboard",
11
+ "runId": "31564834411",
12
12
  "runnerOs": "Windows",
13
13
  "runnerImage": "win25-vs2026",
14
- "runnerImageVersion": "20260728.188.1"
14
+ "runnerImageVersion": "20260803.193.1"
15
15
  },
16
16
  "binaryExtensions": [
17
17
  ".dll",
@@ -22,7 +22,7 @@
22
22
  "files": [
23
23
  {
24
24
  "path": "xll/ShortcutXL.xll",
25
- "sha256": "6f00773ef20decc37f87fcee922b833d4215937826e7df40529ef454849eaa4e",
25
+ "sha256": "f5bffdeda390326397a23c83648c8de66b3d58a51d1af7e2ea936fed18ec754c",
26
26
  "source": "ShortcutXL native XLL build",
27
27
  "version": "package",
28
28
  "builtBy": "shortcut",
@@ -534,7 +534,7 @@
534
534
  },
535
535
  {
536
536
  "path": "xll/python/Scripts/httpx.exe",
537
- "sha256": "1063796b09a86e6becbab334f2b32c921cebd52a66db93570a6c0783e04ff8e6",
537
+ "sha256": "0e2294a43a498d892ab8e5191e5a301aebc3f19879f23ea257fff5f52a1f7b32",
538
538
  "source": "httpx console launcher installed into embedded Python",
539
539
  "version": "see packaged httpx distribution",
540
540
  "builtBy": "third-party",
@@ -542,7 +542,7 @@
542
542
  },
543
543
  {
544
544
  "path": "xll/python/Scripts/idna.exe",
545
- "sha256": "fc9035e09736961e5945b2aad87054cc4df797db3462187dee1cda145dc768fc",
545
+ "sha256": "502b2aeaa0c5b515150137bc35ec134d12f5df43b4b4af262e5115f030994ce7",
546
546
  "source": "Python package console launcher installed into embedded Python",
547
547
  "version": "see owning Python package metadata in site-packages",
548
548
  "builtBy": "third-party",
@@ -550,7 +550,7 @@
550
550
  },
551
551
  {
552
552
  "path": "xll/python/Scripts/pip.exe",
553
- "sha256": "fb350807dadc46afbe1e9db8d9f4e0a032581221ab08f6e514d5e04d56530ca0",
553
+ "sha256": "5b29e4cd0dea0c8698301ff87d6c9c228cfcdf5ca56635e3c4e3d22bdcd1c21d",
554
554
  "source": "pip console launcher installed into embedded Python",
555
555
  "version": "see packaged pip distribution",
556
556
  "builtBy": "third-party",
@@ -558,7 +558,7 @@
558
558
  },
559
559
  {
560
560
  "path": "xll/python/Scripts/pip3.13.exe",
561
- "sha256": "fb350807dadc46afbe1e9db8d9f4e0a032581221ab08f6e514d5e04d56530ca0",
561
+ "sha256": "5b29e4cd0dea0c8698301ff87d6c9c228cfcdf5ca56635e3c4e3d22bdcd1c21d",
562
562
  "source": "pip console launcher installed into embedded Python",
563
563
  "version": "see packaged pip distribution",
564
564
  "builtBy": "third-party",
@@ -566,7 +566,7 @@
566
566
  },
567
567
  {
568
568
  "path": "xll/python/Scripts/pip3.exe",
569
- "sha256": "fb350807dadc46afbe1e9db8d9f4e0a032581221ab08f6e514d5e04d56530ca0",
569
+ "sha256": "5b29e4cd0dea0c8698301ff87d6c9c228cfcdf5ca56635e3c4e3d22bdcd1c21d",
570
570
  "source": "pip console launcher installed into embedded Python",
571
571
  "version": "see packaged pip distribution",
572
572
  "builtBy": "third-party",
@@ -574,7 +574,7 @@
574
574
  },
575
575
  {
576
576
  "path": "xll/python/Scripts/pywin32_postinstall.exe",
577
- "sha256": "23ffad5871881e93255fd9000b99e1dd8d01e1b0000c97a210973f330d62e837",
577
+ "sha256": "7cd7d1f3296f6fcf00e56f758b363100a519be237729070b67c544d3d2948f59",
578
578
  "source": "Python package console launcher installed into embedded Python",
579
579
  "version": "see owning Python package metadata in site-packages",
580
580
  "builtBy": "third-party",
@@ -582,7 +582,7 @@
582
582
  },
583
583
  {
584
584
  "path": "xll/python/Scripts/pywin32_testall.exe",
585
- "sha256": "806bb90a98d10df3d1a7ea4a754e24174fc8c48717674066d8bb1f0a7cb4460a",
585
+ "sha256": "34fbc20da3daac9f50f77884dabb243ec47e301dcd3d7b40e5fe483bc9e1a9d6",
586
586
  "source": "Python package console launcher installed into embedded Python",
587
587
  "version": "see owning Python package metadata in site-packages",
588
588
  "builtBy": "third-party",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.81]
4
+
5
+ - **Smoother native setup and upgrades** - `shortcut app` now guides first-run prerequisites and required Excel integration updates directly in the app.
6
+ - **Native resources and MCP management** - The native app adds dedicated Skills, Memories, and MCP pages.
7
+
8
+ ## [0.3.80]
9
+
10
+ - **Shortcut app updates** - The native app now surfaces available updates, installs and restarts in place.
11
+ - **Model and effort updates** - Free and Personal Pro now default to GPT-5.6 Luna.
12
+ - **Cost-aware task agents** - Task-agent models now stay within the active model's cost tier: premium models use Sol or Opus, lower-cost and custom models use Luna, and Pivot remains on Pivot.
13
+ - **More focused delegation** - Agents now use the minimum necessary task agents.
14
+ - **Multiple Excel instances** - CLI and native app sessions now detect multiple Excel processes and target the intended workbook reliably.
15
+ - **More reliable long sessions** - CLI rendering now shows finalized assistant responses, and stricter compaction preserves queued turns while preventing oversized or stale-context model calls.
16
+
3
17
  ## [0.3.79]
4
18
 
5
19
  - **Security and privacy hardening** - Session telemetry now defaults off, runtime tool downloads are integrity-verified, native-app protections are stronger, and package release verification has been expanded.
@@ -19,6 +19,8 @@ export declare function getModelReasoningLevels<TApi extends Api>(model: Model<T
19
19
  export declare function assertModelSupportsReasoningLevel<TApi extends Api>(model: Model<TApi>, level: ReasoningLevel): void;
20
20
  /** Resolve a stale/cross-model selection to the target model's declared default. */
21
21
  export declare function resolveModelReasoningLevel<TApi extends Api>(model: Model<TApi>, requested: ReasoningLevel | undefined): ReasoningLevel;
22
+ /** Clamp an explicit effort hint to the nearest level supported by the target model. */
23
+ export declare function clampModelReasoningLevel<TApi extends Api>(model: Model<TApi>, requested: ReasoningLevel | undefined): ReasoningLevel;
22
24
  /**
23
25
  * Check if two models are equal by comparing both their id and provider.
24
26
  * Returns false if either model is null or undefined.
package/dist/ai/models.js CHANGED
@@ -72,6 +72,29 @@ export function resolveModelReasoningLevel(model, requested) {
72
72
  return requested;
73
73
  return capabilities?.defaultLevel ?? 'off';
74
74
  }
75
+ const REASONING_LEVEL_ORDER = [
76
+ 'off',
77
+ 'minimal',
78
+ 'low',
79
+ 'medium',
80
+ 'high',
81
+ 'xhigh',
82
+ 'max'
83
+ ];
84
+ /** Clamp an explicit effort hint to the nearest level supported by the target model. */
85
+ export function clampModelReasoningLevel(model, requested) {
86
+ if (requested === undefined)
87
+ return resolveModelReasoningLevel(model, undefined);
88
+ const available = getModelReasoningLevels(model);
89
+ if (available.includes(requested))
90
+ return requested;
91
+ const requestedIndex = REASONING_LEVEL_ORDER.indexOf(requested);
92
+ return available.reduce((nearest, candidate) => {
93
+ const nearestDistance = Math.abs(REASONING_LEVEL_ORDER.indexOf(nearest) - requestedIndex);
94
+ const candidateDistance = Math.abs(REASONING_LEVEL_ORDER.indexOf(candidate) - requestedIndex);
95
+ return candidateDistance < nearestDistance ? candidate : nearest;
96
+ });
97
+ }
75
98
  /**
76
99
  * Check if two models are equal by comparing both their id and provider.
77
100
  * Returns false if either model is null or undefined.
@@ -158,7 +158,10 @@ export const streamAnthropic = (model, context, options) => {
158
158
  const client = createClient(model, apiKey, options?.interleavedThinking ?? true, options?.headers, options?.fetchOptions, options?.fetch);
159
159
  const params = buildParams(model, context, options);
160
160
  options?.onPayload?.(params);
161
- const anthropicStream = client.messages.stream({ ...params, stream: true }, { signal: options?.signal });
161
+ // Consume raw events because this provider owns accumulation. The SDK's
162
+ // MessageStream accumulator assumes usage is always present, but private
163
+ // gateways can omit initial usage from otherwise valid response streams.
164
+ const anthropicStream = await client.messages.create({ ...params, stream: true }, { signal: options?.signal });
162
165
  stream.push({ type: 'start', partial: output });
163
166
  const blocks = output.content;
164
167
  let uncachedInputTokens = 0;
@@ -167,10 +170,11 @@ export const streamAnthropic = (model, context, options) => {
167
170
  if (event.type === 'message_start') {
168
171
  // Capture initial token usage from message_start event
169
172
  // This ensures we have input token counts even if the stream is aborted early
170
- uncachedInputTokens = event.message.usage.input_tokens || 0;
171
- output.usage.output = event.message.usage.output_tokens || 0;
172
- output.usage.cacheRead = event.message.usage.cache_read_input_tokens || 0;
173
- output.usage.cacheWrite = event.message.usage.cache_creation_input_tokens || 0;
173
+ const usage = event.message.usage;
174
+ uncachedInputTokens = usage?.input_tokens ?? 0;
175
+ output.usage.output = usage?.output_tokens ?? 0;
176
+ output.usage.cacheRead = usage?.cache_read_input_tokens ?? 0;
177
+ output.usage.cacheWrite = usage?.cache_creation_input_tokens ?? 0;
174
178
  // Anthropic doesn't provide total_tokens; usage.input is normalized
175
179
  // to total input, including cache buckets.
176
180
  output.usage.input =
@@ -328,17 +332,18 @@ export const streamAnthropic = (model, context, options) => {
328
332
  }
329
333
  // Only update usage fields if present (not null).
330
334
  // Preserves input_tokens from message_start when proxies omit it in message_delta.
331
- if (event.usage.output_tokens != null) {
332
- output.usage.output = event.usage.output_tokens;
335
+ const usage = event.usage;
336
+ if (usage?.output_tokens != null) {
337
+ output.usage.output = usage.output_tokens;
333
338
  }
334
- if (event.usage.cache_read_input_tokens != null) {
335
- output.usage.cacheRead = event.usage.cache_read_input_tokens;
339
+ if (usage?.cache_read_input_tokens != null) {
340
+ output.usage.cacheRead = usage.cache_read_input_tokens;
336
341
  }
337
- if (event.usage.cache_creation_input_tokens != null) {
338
- output.usage.cacheWrite = event.usage.cache_creation_input_tokens;
342
+ if (usage?.cache_creation_input_tokens != null) {
343
+ output.usage.cacheWrite = usage.cache_creation_input_tokens;
339
344
  }
340
- if (event.usage.input_tokens != null) {
341
- uncachedInputTokens = event.usage.input_tokens;
345
+ if (usage?.input_tokens != null) {
346
+ uncachedInputTokens = usage.input_tokens;
342
347
  }
343
348
  // Anthropic doesn't provide total_tokens; usage.input is normalized
344
349
  // to total input, including cache buckets.
@@ -1,5 +1,8 @@
1
1
  import type { Api, Model, ReasoningLevel } from '../types.js';
2
2
  export type OpenAIReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max';
3
- /** Preserve exact native effort names; explicit `off` maps to OpenAI `none`. */
3
+ /**
4
+ * Preserve exact native effort names; explicit `off` maps to OpenAI `none`.
5
+ * Stale levels are clamped to the model contract before reaching the provider.
6
+ */
4
7
  export declare function resolveOpenAIReasoningEffort(model: Model<Api>, level: ReasoningLevel | undefined): OpenAIReasoningEffort | undefined;
5
8
  //# sourceMappingURL=openai-reasoning.d.ts.map
@@ -1,5 +1,8 @@
1
- import { assertModelSupportsReasoningLevel } from '../models.js';
2
- /** Preserve exact native effort names; explicit `off` maps to OpenAI `none`. */
1
+ import { clampModelReasoningLevel } from '../models.js';
2
+ /**
3
+ * Preserve exact native effort names; explicit `off` maps to OpenAI `none`.
4
+ * Stale levels are clamped to the model contract before reaching the provider.
5
+ */
3
6
  export function resolveOpenAIReasoningEffort(model, level) {
4
7
  if (level === undefined)
5
8
  return undefined;
@@ -7,7 +10,10 @@ export function resolveOpenAIReasoningEffort(model, level) {
7
10
  // configurable wire value requires an explicit model capability contract.
8
11
  if (!model.capabilities?.reasoning)
9
12
  return undefined;
10
- assertModelSupportsReasoningLevel(model, level);
11
- return level === 'off' ? 'none' : level;
13
+ // Internal calls commonly request a cheap effort such as `off` or `low`.
14
+ // When a substituted model does not offer it, use the nearest supported
15
+ // level instead of failing or promoting the call to the model default.
16
+ const resolvedLevel = clampModelReasoningLevel(model, level);
17
+ return resolvedLevel === 'off' ? 'none' : resolvedLevel;
12
18
  }
13
19
  //# sourceMappingURL=openai-reasoning.js.map
@@ -66,7 +66,7 @@ function normalizedSdkErrorDetails(error, rawMessage) {
66
66
  return undefined;
67
67
  const merged = { ...classified, ...headerDetails };
68
68
  const accessAware = applyModelAccessDeniedErrorDetails(merged, rawMessage);
69
- if (isContextOverflowErrorMessage(rawMessage)) {
69
+ if (status === 413 || isContextOverflowErrorMessage(rawMessage)) {
70
70
  return { ...accessAware, code: 'context_overflow' };
71
71
  }
72
72
  return accessAware;
@@ -25,11 +25,6 @@ export interface AgentDefinition {
25
25
  readonly tools: readonly string[];
26
26
  /** AgentController names this mode can switch to via switch_mode. Omit for subagents. */
27
27
  readonly switchTo?: readonly string[];
28
- /**
29
- * Model in "provider/id" format. Only used by subagents.
30
- * Interactive modes use whatever model the session has.
31
- */
32
- readonly model?: string;
33
28
  /** Thinking level. Only used by subagents. */
34
29
  readonly thinkingLevel?: ThinkingLevel;
35
30
  /** Timeout in seconds. Only used by subagents. */
@@ -64,5 +64,14 @@ export interface CreateAgentSessionRuntimeAdapterResult extends CreateAgentSessi
64
64
  modelFallbackMessage?: string;
65
65
  session: AgentSession;
66
66
  }
67
+ export declare function resolveInitialSessionModel(options: {
68
+ model?: Model<Api>;
69
+ modelRegistry: AgentModelRegistry;
70
+ sessionManager?: ProductSessionStore;
71
+ settingsManager: AgentSessionSettingsStore;
72
+ }): Promise<{
73
+ model: Model<Api> | undefined;
74
+ modelFallbackMessage?: string;
75
+ }>;
67
76
  export declare function createAgentSessionRuntimeAdapter(options: CreateAgentSessionRuntimeAdapterOptions): Promise<CreateAgentSessionRuntimeAdapterResult>;
68
77
  //# sourceMappingURL=agent-session-runtime-adapter.d.ts.map
@@ -19,6 +19,37 @@ import { AgentSession, LoginRequiredError } from './agent-session.js';
19
19
  import { SessionAutoApproveState } from './approvals/session-auto-approve.js';
20
20
  import { convertToLlm } from './messages.js';
21
21
  import { findInitialModel } from './providers/model-resolver.js';
22
+ export async function resolveInitialSessionModel(options) {
23
+ if (options.model)
24
+ return { model: options.model };
25
+ const existingSession = options.sessionManager?.buildSessionContext();
26
+ const hasExistingSession = (existingSession?.messages.length ?? 0) > 0;
27
+ let modelFallbackMessage;
28
+ if (hasExistingSession && existingSession?.model) {
29
+ const restoredModel = options.modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);
30
+ if (restoredModel && (await options.modelRegistry.getApiKey(restoredModel))) {
31
+ return { model: restoredModel };
32
+ }
33
+ modelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;
34
+ }
35
+ const resolved = await findInitialModel({
36
+ isContinuing: hasExistingSession,
37
+ defaultProvider: options.settingsManager.getDefaultProvider(),
38
+ defaultModelId: options.settingsManager.getDefaultModel(),
39
+ defaultThinkingLevel: options.settingsManager.getDefaultThinkingLevel(),
40
+ modelRegistry: options.modelRegistry
41
+ });
42
+ if (!resolved.model) {
43
+ return {
44
+ model: undefined,
45
+ modelFallbackMessage: 'No models available. Configure credentials or provide a model.'
46
+ };
47
+ }
48
+ if (modelFallbackMessage) {
49
+ modelFallbackMessage += `. Using ${resolved.model.provider}/${resolved.model.id}`;
50
+ }
51
+ return { model: resolved.model, modelFallbackMessage };
52
+ }
22
53
  function createAgentSessionCore(session, pendingHostToolRequests) {
23
54
  // AgentSession itself doesn't carry a "the last turn was cancelled" flag —
24
55
  // cancellation just leaves the message stream truncated. Track it locally
@@ -91,33 +122,14 @@ export async function createAgentSessionRuntimeAdapter(options) {
91
122
  const hasThinkingEntry = sessionManager
92
123
  .getBranch()
93
124
  .some((entry) => entry.type === 'thinking_level_change');
94
- let model = options.model;
95
- let modelFallbackMessage;
96
- if (!model && hasExistingSession && existingSession.model) {
97
- const restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);
98
- if (restoredModel && (await modelRegistry.getApiKey(restoredModel))) {
99
- model = restoredModel;
100
- }
101
- if (!model) {
102
- modelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;
103
- }
104
- }
105
- if (!model) {
106
- const resolved = await findInitialModel({
107
- isContinuing: hasExistingSession,
108
- defaultProvider: settingsManager.getDefaultProvider(),
109
- defaultModelId: settingsManager.getDefaultModel(),
110
- defaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),
111
- modelRegistry
112
- });
113
- model = resolved.model;
114
- if (!model) {
115
- modelFallbackMessage = 'No models available. Configure credentials or provide a model.';
116
- }
117
- else if (modelFallbackMessage) {
118
- modelFallbackMessage += `. Using ${model.provider}/${model.id}`;
119
- }
120
- }
125
+ const initialModel = await resolveInitialSessionModel({
126
+ model: options.model,
127
+ modelRegistry,
128
+ sessionManager,
129
+ settingsManager
130
+ });
131
+ const model = initialModel.model;
132
+ const modelFallbackMessage = initialModel.modelFallbackMessage;
121
133
  let thinkingLevel = options.thinkingLevel;
122
134
  if (thinkingLevel === undefined && hasExistingSession) {
123
135
  thinkingLevel = hasThinkingEntry
@@ -121,7 +121,6 @@ export interface AgentSessionConfig {
121
121
  info?: (input: {
122
122
  module: string;
123
123
  event: string;
124
- analyticsEvent?: boolean;
125
124
  data?: Record<string, unknown>;
126
125
  duration?: number;
127
126
  }) => void;
@@ -868,6 +868,13 @@ export class AgentSession {
868
868
  currentText = parsedBudget.task;
869
869
  }
870
870
  const expandedText = currentText;
871
+ // There is no active turn to steer while compaction is replacing context.
872
+ // Keep every arrival in the FIFO follow-up queue so mixed user/background
873
+ // input is delivered in arrival order once the compacted context is live.
874
+ if (this._compaction.isAutoCompacting) {
875
+ await this._queueFollowUp(expandedText, currentImages);
876
+ return;
877
+ }
871
878
  // If streaming, queue via steer() by default; follow-up is opt-in.
872
879
  if (this.isStreaming) {
873
880
  if (options?.streamingBehavior === 'followUp') {
@@ -1166,6 +1173,9 @@ export class AgentSession {
1166
1173
  if (options?.deliverAs === 'nextTurn') {
1167
1174
  this._pendingNextTurnMessages.push(appMessage);
1168
1175
  }
1176
+ else if (this._compaction.isAutoCompacting) {
1177
+ this.agent.followUp(appMessage);
1178
+ }
1169
1179
  else if (this.isStreaming) {
1170
1180
  if (options?.deliverAs === 'followUp') {
1171
1181
  this.agent.followUp(appMessage);
@@ -1318,6 +1328,7 @@ export class AgentSession {
1318
1328
  // Compaction (delegated to SessionCompaction + bridge factories)
1319
1329
  async _triggerCompactionIfNeeded(msg, skipAbortedCheck, opts) {
1320
1330
  return triggerCompactionIfNeeded(this._compactionTriggerDeps, msg, skipAbortedCheck, {
1331
+ agentMode: this.agent.streamObservabilityContext?.agentMode,
1321
1332
  continuationRunId: this.agent.continuationRunId,
1322
1333
  ...opts,
1323
1334
  heartbeatWrap: this._createCompactionObservabilityWrap()
@@ -1340,6 +1351,7 @@ export class AgentSession {
1340
1351
  if (!apiKey)
1341
1352
  throw new Error(`No API key for ${this.model.provider}`);
1342
1353
  const compact = this._compaction.runManual(this.model, apiKey, this.sessionManager.getBranch(), customInstructions, this._compactionActions, {
1354
+ agentMode: this.agent.streamObservabilityContext?.agentMode,
1343
1355
  continuationRunId: this.agent.continuationRunId,
1344
1356
  userMessageId: getActiveUserMessageId(this.messages)
1345
1357
  });
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Fire-and-forget tool-call summarization via a cheap LLM (Haiku).
2
+ * Fire-and-forget tool-call summarization via a cheap LLM.
3
3
  *
4
4
  * Summaries are ephemeral UX — displayed to the user but never injected
5
5
  * into the LLM conversation context.
6
6
  */
7
7
  import { type ShortcutLlmProxyClient } from '../providers/shortcut-llm-proxy-client.js';
8
- export declare const TOOL_SUMMARY_MODEL = "claude-haiku-4-5-20251001";
8
+ export declare const TOOL_SUMMARY_MODEL: "gpt-5.6-luna";
9
9
  interface ToolSummaryInput {
10
10
  toolName: string;
11
11
  args: unknown;
@@ -17,7 +17,7 @@ export interface ToolSummaryGenerationResult {
17
17
  httpStatus?: number;
18
18
  }
19
19
  /**
20
- * Call the Shortcut LLM proxy (Haiku) to generate a one-line summary of a tool call.
20
+ * Call the Shortcut LLM proxy to generate a one-line summary of a tool call.
21
21
  *
22
22
  * Returns the summary string, or undefined if the call fails or is aborted.
23
23
  * Never throws — errors are silently swallowed since summaries are best-effort UX.
@@ -1,12 +1,13 @@
1
1
  /**
2
- * Fire-and-forget tool-call summarization via a cheap LLM (Haiku).
2
+ * Fire-and-forget tool-call summarization via a cheap LLM.
3
3
  *
4
4
  * Summaries are ephemeral UX — displayed to the user but never injected
5
5
  * into the LLM conversation context.
6
6
  */
7
+ import { SHORTCUT_MODEL_ID } from '../../model-ids.js';
7
8
  import { ShortcutLlmProxyError } from '../providers/shortcut-llm-proxy-client.js';
8
9
  import { TOOL_SUMMARY_MAX_OUTPUT_TOKENS } from '../session/tool-summary-policy.js';
9
- export const TOOL_SUMMARY_MODEL = 'claude-haiku-4-5-20251001';
10
+ export const TOOL_SUMMARY_MODEL = SHORTCUT_MODEL_ID.Gpt56Luna;
10
11
  const MAX_ARGS_CHARS = 500;
11
12
  const MAX_RESULT_CHARS = 1000;
12
13
  const SUMMARY_PROMPT = 'Summarize this tool call in one sentence (under 15 words). Be specific about what was found/done, not what tool was used.';
@@ -15,7 +16,7 @@ function truncate(value, maxChars) {
15
16
  return str.length > maxChars ? str.slice(0, maxChars) + '…' : str;
16
17
  }
17
18
  /**
18
- * Call the Shortcut LLM proxy (Haiku) to generate a one-line summary of a tool call.
19
+ * Call the Shortcut LLM proxy to generate a one-line summary of a tool call.
19
20
  *
20
21
  * Returns the summary string, or undefined if the call fails or is aborted.
21
22
  * Never throws — errors are silently swallowed since summaries are best-effort UX.
@@ -35,6 +36,7 @@ export async function generateToolSummaryDetailed(input, shortcutLlmProxy, optio
35
36
  { role: 'human', content: userContent }
36
37
  ],
37
38
  max_output_tokens: maxOutputTokens,
39
+ reasoning: 'off',
38
40
  llmOperation: 'summarize'
39
41
  }, {
40
42
  signal
@@ -1,6 +1,6 @@
1
1
  import { SHORTCUT_LLM_PROXY_URL } from '../../../constants.js';
2
2
  import { getActiveUserMessageId } from '../../../core/user-message-id.js';
3
- import { DURABLE_MEMORY_AGENT_MODEL, DURABLE_MEMORY_AGENT_TOOLS, DURABLE_MEMORY_TURN_END_CADENCE } from '../../extensions/durable-memory/constants.js';
3
+ import { DURABLE_MEMORY_AGENT_EFFORT, DURABLE_MEMORY_AGENT_MODEL, DURABLE_MEMORY_AGENT_TOOLS, DURABLE_MEMORY_TURN_END_CADENCE } from '../../extensions/durable-memory/constants.js';
4
4
  import { buildDurableMemoryPromptFragment } from '../../extensions/durable-memory/retrieval.js';
5
5
  import { emitDurableMemoryStatus } from '../../extensions/durable-memory/status.js';
6
6
  import { validateWorkspaceState } from '../../extensions/durable-memory/validator.js';
@@ -342,7 +342,7 @@ export class DurableMemoryCoordinator {
342
342
  instruction: MEMORY_AGENT_INSTRUCTION,
343
343
  traceDir: resolveForkTraceDir(run.sessionDir, run.sessionFile),
344
344
  signal,
345
- effortLevel: 'low',
345
+ effortLevel: DURABLE_MEMORY_AGENT_EFFORT,
346
346
  onToolCall: emitRunningToolCall
347
347
  });
348
348
  agentResponse = summarizeAgentResponse(result.response);
@@ -5,6 +5,8 @@ export declare const DURABLE_MEMORY_HARD_MAX_TOPIC_FILES = 15;
5
5
  export declare const DURABLE_MEMORY_TURN_END_CADENCE = 4;
6
6
  export declare const DURABLE_MEMORY_AGENT_NAME = "durable-memory";
7
7
  export declare const DURABLE_MEMORY_AGENT_DESCRIPTION = "Maintains durable memory topic files from session checkpoints.";
8
- export declare const DURABLE_MEMORY_AGENT_MODEL = "claude-haiku-4-5-20251001";
8
+ export declare const DURABLE_MEMORY_AGENT_MODEL: "gpt-5.6-luna";
9
+ /** Keep maintenance inexpensive while retaining bounded reasoning over memory changes. */
10
+ export declare const DURABLE_MEMORY_AGENT_EFFORT: "low";
9
11
  export declare const DURABLE_MEMORY_AGENT_TOOLS: readonly ["read", "edit", "write", "grep"];
10
12
  //# sourceMappingURL=constants.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { SHORTCUT_MODEL_ID } from '../../../model-ids.js';
1
2
  import { EDIT, GREP, READ, WRITE } from '../../../tool-names.js';
2
3
  export const DURABLE_MEMORY_ROOT = 'memories';
3
4
  export const DURABLE_MEMORY_INDEX = 'MEMORY.md';
@@ -6,6 +7,8 @@ export const DURABLE_MEMORY_HARD_MAX_TOPIC_FILES = 15;
6
7
  export const DURABLE_MEMORY_TURN_END_CADENCE = 4;
7
8
  export const DURABLE_MEMORY_AGENT_NAME = 'durable-memory';
8
9
  export const DURABLE_MEMORY_AGENT_DESCRIPTION = 'Maintains durable memory topic files from session checkpoints.';
9
- export const DURABLE_MEMORY_AGENT_MODEL = 'claude-haiku-4-5-20251001';
10
+ export const DURABLE_MEMORY_AGENT_MODEL = SHORTCUT_MODEL_ID.Gpt56Luna;
11
+ /** Keep maintenance inexpensive while retaining bounded reasoning over memory changes. */
12
+ export const DURABLE_MEMORY_AGENT_EFFORT = 'low';
10
13
  export const DURABLE_MEMORY_AGENT_TOOLS = [READ, EDIT, WRITE, GREP];
11
14
  //# sourceMappingURL=constants.js.map
@@ -23,6 +23,8 @@ export interface BuiltinSlashCommand {
23
23
  }
24
24
  /** All builtin command names, used to prevent extension collisions. */
25
25
  export declare const ALL_BUILTIN_SLASH_COMMAND_NAMES: ReadonlySet<string>;
26
- /** Returns all builtin slash commands. */
27
- export declare function getBuiltinSlashCommands(): ReadonlyArray<BuiltinSlashCommand>;
26
+ /** Returns the builtin commands supported by the current runtime surface. */
27
+ export declare function getBuiltinSlashCommands(options?: {
28
+ includeExcel?: boolean;
29
+ }): ReadonlyArray<BuiltinSlashCommand>;
28
30
  //# sourceMappingURL=slash-commands.d.ts.map
@@ -24,6 +24,7 @@ const ALL_BUILTIN_SLASH_COMMANDS = [
24
24
  { name: 'budget', description: 'Start a budgeted run, e.g. /budget 500k <task>' },
25
25
  { name: 'goal', description: 'Show, start, pause, resume, edit, or clear a persistent goal' },
26
26
  { name: 'agents', description: 'Inspect running and backgrounded agents' },
27
+ { name: 'excel', description: 'Inspect or switch the Excel process controlled by this CLI' },
27
28
  // Everything else
28
29
  { name: 'settings', description: 'Open settings menu' },
29
30
  { name: 'sandbox', description: 'Configure sandbox filesystem and network permissions' },
@@ -34,10 +35,6 @@ const ALL_BUILTIN_SLASH_COMMANDS = [
34
35
  },
35
36
  { name: 'hotkeys', description: 'Show all keyboard shortcuts' },
36
37
  { name: 'skills', description: 'Show loaded skills' },
37
- {
38
- name: 'proposal',
39
- description: 'Review and accept pending skill proposals or run /proposal scan [request]'
40
- },
41
38
  { name: 'memory', description: 'Run durable memory manually: /memory scan [request]' },
42
39
  { name: 'port-skills', description: 'Discover and register external skill roots' },
43
40
  { name: 'download-skills', description: 'Download skills from cloud' },
@@ -46,8 +43,10 @@ const ALL_BUILTIN_SLASH_COMMANDS = [
46
43
  ];
47
44
  /** All builtin command names, used to prevent extension collisions. */
48
45
  export const ALL_BUILTIN_SLASH_COMMAND_NAMES = new Set(ALL_BUILTIN_SLASH_COMMANDS.map((cmd) => cmd.name));
49
- /** Returns all builtin slash commands. */
50
- export function getBuiltinSlashCommands() {
51
- return ALL_BUILTIN_SLASH_COMMANDS;
46
+ /** Returns the builtin commands supported by the current runtime surface. */
47
+ export function getBuiltinSlashCommands(options = {}) {
48
+ return options.includeExcel === false
49
+ ? ALL_BUILTIN_SLASH_COMMANDS.filter((command) => command.name !== 'excel')
50
+ : ALL_BUILTIN_SLASH_COMMANDS;
52
51
  }
53
52
  //# sourceMappingURL=slash-commands.js.map
@@ -38,10 +38,6 @@ export { FileSessionPersistenceBackend } from './session/session-persistence-bac
38
38
  export type { SessionPersistenceBackend } from './session/session-persistence-backend.js';
39
39
  export type { BranchSessionStore, ModelSessionStore, PersistenceSessionStore, ProductSessionStore, SessionInfoStore } from './session/session-store-types.js';
40
40
  export { SettingsManager, type ImageSettings, type PackageSource, type RetrySettings } from './settings-manager.js';
41
- export { countSkillProposals, listSkillProposals, type ProposalKind, type SkillProposalSummary } from './skill-proposals/catalog.js';
42
- export { default as skillProposalsExtension } from './skill-proposals/extension.js';
43
- export { getSkillProposalRoots, type ProposalRoots } from './skill-proposals/proposal-fs.js';
44
- export { readSkillProposalReviewSnapshot, type SkillProposalReviewSnapshot } from './skill-proposals/review.js';
45
41
  export type { StartupInfoEntry } from './startup-info.js';
46
42
  export { downloadSkillsWithApproval } from './sync/skills-download.js';
47
43
  export type { SkillDownloadApprovalHandler, SkillDownloadApprovalRequest, SkillsDownloadResult } from './sync/skills-download.js';
package/dist/app/index.js CHANGED
@@ -29,10 +29,6 @@ export { continueRecentSessionManager, createInMemorySessionManager, createSessi
29
29
  export { SessionManager } from './session/session-manager.js';
30
30
  export { FileSessionPersistenceBackend } from './session/session-persistence-backend.js';
31
31
  export { SettingsManager } from './settings-manager.js';
32
- export { countSkillProposals, listSkillProposals } from './skill-proposals/catalog.js';
33
- export { default as skillProposalsExtension } from './skill-proposals/extension.js';
34
- export { getSkillProposalRoots } from './skill-proposals/proposal-fs.js';
35
- export { readSkillProposalReviewSnapshot } from './skill-proposals/review.js';
36
32
  export { downloadSkillsWithApproval } from './sync/skills-download.js';
37
33
  export { checkSkillsSyncStatus } from './sync/skills-status.js';
38
34
  export { uploadSkills } from './sync/skills-upload.js';
@@ -11,7 +11,7 @@
11
11
  */
12
12
  import { type ApprovalChoice, type ApprovalGate, type ApprovalRequest } from '../../../approvals/types.js';
13
13
  import type { ExtensionContext } from '../../../extensions/index.js';
14
- import { type LocalExcelHttpUrl } from '../../../xll/http-url.js';
14
+ import type { ExcelHostEndpoint } from '../../../xll/host-registry.js';
15
15
  import type { ExcelApprovalPayload } from './approval-payload.js';
16
16
  import { type DiffPayload } from './diff.js';
17
17
  import { type EditModeRetryTiming } from './edit-mode-retry.js';
@@ -50,9 +50,9 @@ export declare function resolveApproval(result: ComExecResult, approval: Approva
50
50
  * Execute code against the local XLL and run approval.
51
51
  *
52
52
  * This is the reusable core for desktop-local COM execution.
53
- * The XLL endpoint (`httpUrl`) is always local to the machine running the agent.
53
+ * The selected XLL endpoint is always local to the machine running the agent.
54
54
  */
55
- export declare function executeComLocally(excelHttpUrl: LocalExcelHttpUrl | undefined, code: string, options?: {
55
+ export declare function executeComLocally(excelTarget: ExcelHostEndpoint, code: string, options?: {
56
56
  approval?: ApprovalGate<ExcelApprovalPayload>;
57
57
  ctx?: ExtensionContext;
58
58
  description?: string;