shortcutxl 0.3.77 → 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.
- package/BINARY-INVENTORY.json +9 -9
- package/CHANGELOG.md +8 -0
- package/dist/app/agent-session.d.ts +0 -15
- package/dist/app/agent-session.js +0 -37
- package/dist/app/extensions/slash-commands.js +1 -3
- package/dist/app/modes/action/agent.js +4 -5
- package/dist/app/modes/ask/agent.js +4 -6
- package/dist/app/modes/index.js +20 -10
- package/dist/app/modes/installation/agent.js +4 -5
- package/dist/app/modes/manage/agent.js +3 -4
- package/dist/app/modes/manage/prompt.js +1 -2
- package/dist/app/modes/metadata.d.ts +31 -0
- package/dist/app/modes/metadata.js +35 -0
- package/dist/app/modes/plan/agent.js +5 -8
- package/dist/app/modes/plan/prompt.js +3 -3
- package/dist/app/prompts/com-api.js +1 -1
- package/dist/app/prompts/shared-guidelines.js +6 -2
- package/dist/app/providers/register-shortcut-provider.js +4 -0
- package/dist/app/tools/bash.js +3 -3
- package/dist/app/tools/switch-mode.js +2 -2
- package/dist/app/tools/web-search.js +12 -2
- package/dist/cli.js +871 -2144
- package/dist/constants.d.ts +0 -2
- package/dist/constants.js +0 -3
- package/dist/contracts/model-call.d.ts +0 -1
- package/dist/contracts/model-call.js +1 -2
- package/dist/contracts/wire.d.ts +8 -1
- package/dist/contracts/wire.js +8 -0
- package/dist/embedded-agent/ai-invoke.d.ts +1 -2
- package/dist/embedded-agent/ai-invoke.js +0 -70
- package/dist/embedded-agent/anthropic-messages-transport.d.ts +1 -2
- package/dist/embedded-agent/google-vertex-transport.d.ts +1 -2
- package/dist/embedded-agent/host-tools/invoke-llm/contract.d.ts +1 -1
- package/dist/embedded-agent/host-tools/invoke-llm/contract.js +1 -1
- package/dist/embedded-agent/host-tools/shared/index.d.ts +1 -1
- package/dist/embedded-agent/host-tools/shared/index.js +1 -1
- package/dist/embedded-agent/host-tools/shared/llm-stream-error.d.ts +7 -0
- package/dist/embedded-agent/host-tools/shared/llm-stream-error.js +10 -0
- package/dist/embedded-agent/index.d.ts +3 -4
- package/dist/embedded-agent/index.js +2 -3
- package/dist/embedded-agent/openai-completions-transport.d.ts +1 -2
- package/dist/embedded-agent/openai-responses-transport.d.ts +1 -2
- package/dist/embedded-agent/prompt/sections.d.ts +1 -1
- package/dist/embedded-agent/prompt/sections.js +2 -0
- package/dist/embedded-agent/provider-native-request.d.ts +5 -0
- package/dist/embedded-agent/provider-native-request.js +3 -2
- package/dist/embedded-agent/stream.d.ts +8 -88
- package/dist/embedded-agent/stream.js +20 -537
- package/dist/embedded-agent/suggestions.d.ts +1 -1
- package/dist/embedded-agent/suggestions.js +1 -1
- package/dist/embedded-agent/worker-bridge/host-client.d.ts +7 -0
- package/dist/embedded-agent/worker-bridge/host-client.js +15 -0
- package/dist/embedded-agent/worker-bridge/worker-port.js +17 -1
- package/dist/main.js +16 -1
- package/dist/rpc/index.d.ts +1 -1
- package/dist/rpc/rpc-host.d.ts +4 -0
- package/dist/rpc/rpc-host.js +13 -24
- package/dist/rpc/rpc-types.d.ts +6 -17
- package/dist/shared/platform/open.d.ts +4 -1
- package/dist/shared/platform/open.js +14 -2
- package/dist/shell/interactive/interactive-mode-options.d.ts +10 -0
- package/dist/shell/interactive/interactive-mode.d.ts +6 -12
- package/dist/shell/interactive/interactive-mode.js +36 -157
- package/dist/shell/interactive/slash-commands.d.ts +0 -34
- package/dist/shell/interactive/slash-commands.js +0 -2
- package/dist/shell/links/local-file-link-input.d.ts +15 -0
- package/dist/shell/links/local-file-link-input.js +38 -0
- package/dist/shell/links/local-file-link.d.ts +7 -0
- package/dist/shell/links/local-file-link.js +35 -0
- package/dist/shell/links/local-file-opener.d.ts +16 -0
- package/dist/shell/links/local-file-opener.js +90 -0
- package/dist/shell/session-client.d.ts +0 -1
- package/dist/shell/session-client.js +0 -6
- package/dist/shell/status/update-check-scheduler.d.ts +30 -0
- package/dist/shell/status/update-check-scheduler.js +71 -0
- package/dist/shell/status/update-reminder-controller.d.ts +22 -0
- package/dist/shell/status/update-reminder-controller.js +40 -0
- package/dist/shell/status/update-reminder.d.ts +6 -0
- package/dist/shell/status/update-reminder.js +4 -0
- package/dist/shell/theme/dark.json +1 -2
- package/dist/shell/theme/light.json +1 -2
- package/dist/shell/theme/runtime.d.ts +1 -2
- package/dist/shell/theme/runtime.js +1 -6
- package/dist/shell/theme/theme-schema.json +1 -6
- package/dist/shortcut-model-catalog.js +12 -5
- package/dist/startup/update-manager.d.ts +6 -6
- package/dist/startup/update-manager.js +23 -38
- package/dist/startup/update-prompt.d.ts +1 -0
- package/dist/startup/update-prompt.js +2 -2
- package/dist/tui/components/markdown.js +15 -6
- package/dist/tui/index.d.ts +7 -1
- package/dist/tui/index.js +7 -1
- package/dist/tui/tui.d.ts +2 -0
- package/dist/tui/tui.js +16 -1
- package/dist/tui/utils.d.ts +7 -0
- package/dist/tui/utils.js +58 -8
- package/native-app/main/index.js +1 -1
- package/native-app/package.json +1 -1
- package/native-app/renderer/assets/{index-CtherCML.js → index-B4jz6epR.js} +594 -151
- package/native-app/renderer/assets/{index-B9UxxO8s.css → index-C__g36ft.css} +408 -160
- package/native-app/renderer/assets/shortcutagent-DxFsGSkw.png +0 -0
- package/native-app/renderer/index.html +2 -2
- package/package.json +2 -1
- package/user-docs/dist/index.html +1 -1
- package/user-docs/dist/shortcutxl-docs.pdf +0 -0
- package/xll/ShortcutXL.xll +0 -0
- package/xll/modules/shortcut_xl/_managed.py +26 -7
- package/xll/modules/shortcut_xl/_tracking.py +141 -251
- package/xll/modules/shortcut_xl/api/__init__.py +60 -0
- package/xll/modules/shortcut_xl/api/workbook.py +9 -1
- package/xll/modules/shortcut_xl/api/worksheet.py +4 -1
- package/xll/python/Lib/site-packages/httpx-0.28.1.dist-info/RECORD +1 -1
- package/xll/python/Lib/site-packages/idna-3.18.dist-info/RECORD +1 -1
- package/xll/python/Lib/site-packages/pip/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/build_env/__init__.py +25 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/base.py +103 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/installer.py +333 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/noop.py +42 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/venv.py +145 -0
- package/xll/python/Lib/site-packages/pip/_internal/build_env/virtual.py +139 -0
- package/xll/python/Lib/site-packages/pip/_internal/cache.py +4 -1
- package/xll/python/Lib/site-packages/pip/_internal/cli/autocompletion.py +4 -1
- package/xll/python/Lib/site-packages/pip/_internal/cli/base_command.py +11 -14
- package/xll/python/Lib/site-packages/pip/_internal/cli/cmdoptions.py +133 -22
- package/xll/python/Lib/site-packages/pip/_internal/cli/index_command.py +11 -6
- package/xll/python/Lib/site-packages/pip/_internal/cli/main.py +2 -1
- package/xll/python/Lib/site-packages/pip/_internal/cli/main_parser.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/cli/parser.py +10 -2
- package/xll/python/Lib/site-packages/pip/_internal/cli/progress_bars.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/cli/req_command.py +57 -25
- package/xll/python/Lib/site-packages/pip/_internal/cli/status_codes.py +1 -0
- package/xll/python/Lib/site-packages/pip/_internal/commands/cache.py +7 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/configuration.py +2 -1
- package/xll/python/Lib/site-packages/pip/_internal/commands/debug.py +4 -5
- package/xll/python/Lib/site-packages/pip/_internal/commands/download.py +4 -0
- package/xll/python/Lib/site-packages/pip/_internal/commands/freeze.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/commands/index.py +10 -3
- package/xll/python/Lib/site-packages/pip/_internal/commands/inspect.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/commands/install.py +6 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/list.py +11 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/lock.py +4 -6
- package/xll/python/Lib/site-packages/pip/_internal/commands/show.py +14 -8
- package/xll/python/Lib/site-packages/pip/_internal/commands/wheel.py +7 -1
- package/xll/python/Lib/site-packages/pip/_internal/configuration.py +2 -3
- package/xll/python/Lib/site-packages/pip/_internal/distributions/base.py +5 -3
- package/xll/python/Lib/site-packages/pip/_internal/distributions/installed.py +3 -2
- package/xll/python/Lib/site-packages/pip/_internal/distributions/sdist.py +45 -20
- package/xll/python/Lib/site-packages/pip/_internal/distributions/wheel.py +3 -2
- package/xll/python/Lib/site-packages/pip/_internal/exceptions.py +174 -0
- package/xll/python/Lib/site-packages/pip/_internal/index/collector.py +70 -48
- package/xll/python/Lib/site-packages/pip/_internal/index/package_finder.py +46 -7
- package/xll/python/Lib/site-packages/pip/_internal/index/sources.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/locations/_sysconfig.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/locations/base.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/metadata/base.py +10 -5
- package/xll/python/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +8 -3
- package/xll/python/Lib/site-packages/pip/_internal/models/candidate.py +5 -1
- package/xll/python/Lib/site-packages/pip/_internal/models/link.py +53 -13
- package/xll/python/Lib/site-packages/pip/_internal/network/auth.py +38 -21
- package/xll/python/Lib/site-packages/pip/_internal/network/cache.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/network/download.py +58 -11
- package/xll/python/Lib/site-packages/pip/_internal/network/session.py +35 -40
- package/xll/python/Lib/site-packages/pip/_internal/network/utils.py +109 -1
- package/xll/python/Lib/site-packages/pip/_internal/operations/check.py +2 -3
- package/xll/python/Lib/site-packages/pip/_internal/operations/install/wheel.py +23 -18
- package/xll/python/Lib/site-packages/pip/_internal/operations/prepare.py +152 -7
- package/xll/python/Lib/site-packages/pip/_internal/req/__init__.py +2 -0
- package/xll/python/Lib/site-packages/pip/_internal/req/constructors.py +54 -69
- package/xll/python/Lib/site-packages/pip/_internal/req/req_file.py +6 -6
- package/xll/python/Lib/site-packages/pip/_internal/req/req_install.py +25 -21
- package/xll/python/Lib/site-packages/pip/_internal/req/req_uninstall.py +13 -8
- package/xll/python/Lib/site-packages/pip/_internal/resolution/base.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +1 -1
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -1
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +39 -52
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +3 -3
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +3 -0
- package/xll/python/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +9 -0
- package/xll/python/Lib/site-packages/pip/_internal/utils/compat.py +15 -9
- package/xll/python/Lib/site-packages/pip/_internal/utils/deprecation.py +6 -1
- package/xll/python/Lib/site-packages/pip/_internal/utils/filesystem.py +2 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/logging.py +11 -3
- package/xll/python/Lib/site-packages/pip/_internal/utils/misc.py +48 -4
- package/xll/python/Lib/site-packages/pip/_internal/utils/pylock.py +18 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/retry.py +2 -1
- package/xll/python/Lib/site-packages/pip/_internal/utils/subprocess.py +4 -3
- package/xll/python/Lib/site-packages/pip/_internal/utils/temp_dir.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/unpacking.py +30 -4
- package/xll/python/Lib/site-packages/pip/_internal/utils/urls.py +5 -2
- package/xll/python/Lib/site-packages/pip/_internal/utils/virtualenv.py +2 -36
- package/xll/python/Lib/site-packages/pip/_internal/vcs/git.py +8 -5
- package/xll/python/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +1 -2
- package/xll/python/Lib/site-packages/pip/_internal/wheel_builder.py +5 -1
- package/xll/python/Lib/site-packages/pip/_vendor/bom.cdx.json +231 -0
- package/xll/python/Lib/site-packages/pip/_vendor/certifi/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/certifi/cacert.pem +0 -631
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/compat.py +34 -64
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/resources.py +28 -14
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/scripts.py +7 -3
- package/xll/python/Lib/site-packages/pip/_vendor/distlib/util.py +48 -11
- package/xll/python/Lib/site-packages/pip/_vendor/idna/LICENSE.md +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/idna/__main__.py +6 -0
- package/xll/python/Lib/site-packages/pip/_vendor/idna/cli.py +128 -0
- package/xll/python/Lib/site-packages/pip/_vendor/idna/codec.py +50 -13
- package/xll/python/Lib/site-packages/pip/_vendor/idna/compat.py +26 -0
- package/xll/python/Lib/site-packages/pip/_vendor/idna/core.py +352 -141
- package/xll/python/Lib/site-packages/pip/_vendor/idna/idnadata.py +571 -2983
- package/xll/python/Lib/site-packages/pip/_vendor/idna/intranges.py +5 -7
- package/xll/python/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/idna/uts46data.py +16887 -8832
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +352 -66
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +11 -0
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/_xdg.py +171 -0
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/android.py +92 -41
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/api.py +213 -49
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/macos.py +128 -51
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/unix.py +176 -127
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/version.py +8 -18
- package/xll/python/Lib/site-packages/pip/_vendor/platformdirs/windows.py +185 -68
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/__init__.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/__main__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/console.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/filter.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +10 -8
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/formatter.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexer.py +7 -5
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +9 -8
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +35 -32
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/modeline.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/plugin.py +3 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/regexopt.py +13 -2
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/scanner.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/style.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/token.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/unistring.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/pygments/util.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/__init__.py +52 -16
- package/xll/python/Lib/site-packages/pip/_vendor/requests/__version__.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/_types.py +183 -0
- package/xll/python/Lib/site-packages/pip/_vendor/requests/adapters.py +101 -50
- package/xll/python/Lib/site-packages/pip/_vendor/requests/api.py +31 -8
- package/xll/python/Lib/site-packages/pip/_vendor/requests/auth.py +80 -40
- package/xll/python/Lib/site-packages/pip/_vendor/requests/compat.py +9 -3
- package/xll/python/Lib/site-packages/pip/_vendor/requests/cookies.py +143 -79
- package/xll/python/Lib/site-packages/pip/_vendor/requests/exceptions.py +15 -5
- package/xll/python/Lib/site-packages/pip/_vendor/requests/help.py +13 -10
- package/xll/python/Lib/site-packages/pip/_vendor/requests/hooks.py +23 -9
- package/xll/python/Lib/site-packages/pip/_vendor/requests/models.py +265 -126
- package/xll/python/Lib/site-packages/pip/_vendor/requests/py.typed +0 -0
- package/xll/python/Lib/site-packages/pip/_vendor/requests/sessions.py +164 -78
- package/xll/python/Lib/site-packages/pip/_vendor/requests/status_codes.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/requests/structures.py +51 -20
- package/xll/python/Lib/site-packages/pip/_vendor/requests/utils.py +161 -89
- package/xll/python/Lib/site-packages/pip/_vendor/tomli/__init__.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/tomli/_parser.py +9 -4
- package/xll/python/Lib/site-packages/pip/_vendor/tomli/_re.py +13 -9
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_base_connection.py +3 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_collections.py +0 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/_version.py +8 -18
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/connection.py +4 -4
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +23 -10
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/emscripten/response.py +5 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +7 -8
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +1 -1
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +2 -2
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/fields.py +14 -14
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +8 -6
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/response.py +35 -22
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +8 -0
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +11 -61
- package/xll/python/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +5 -11
- package/xll/python/Lib/site-packages/pip/_vendor/vendor.txt +8 -8
- package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/METADATA +3 -2
- package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/RECORD +208 -188
- package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/AUTHORS.txt +20 -0
- 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
- package/xll/python/Lib/site-packages/pywin32-311.dist-info/RECORD +2 -2
- package/xll/python/Scripts/httpx.exe +0 -0
- package/xll/python/Scripts/idna.exe +0 -0
- package/xll/python/Scripts/pip.exe +0 -0
- package/xll/python/Scripts/pip3.13.exe +0 -0
- package/xll/python/Scripts/pip3.exe +0 -0
- package/xll/python/Scripts/pywin32_postinstall.exe +0 -0
- package/xll/python/Scripts/pywin32_testall.exe +0 -0
- package/dist/app/collab/awareness.d.ts +0 -32
- package/dist/app/collab/awareness.js +0 -52
- package/dist/app/collab/collab-client.d.ts +0 -37
- package/dist/app/collab/collab-client.js +0 -208
- package/dist/app/collab/collab-manager.d.ts +0 -91
- package/dist/app/collab/collab-manager.js +0 -218
- package/dist/app/collab/collab-sync.d.ts +0 -62
- package/dist/app/collab/collab-sync.js +0 -215
- package/dist/app/collab/index.d.ts +0 -9
- package/dist/app/collab/index.js +0 -6
- package/dist/app/collab/super-fight.d.ts +0 -90
- package/dist/app/collab/super-fight.js +0 -310
- package/dist/app/collab/sync-bridge.d.ts +0 -35
- package/dist/app/collab/sync-bridge.js +0 -109
- package/dist/app/collab/types.d.ts +0 -75
- package/dist/app/collab/types.js +0 -5
- package/dist/embedded-agent/ai-content.d.ts +0 -52
- package/dist/embedded-agent/ai-content.js +0 -101
- package/dist/embedded-agent/host-tools/shared/llm-stream.d.ts +0 -31
- package/dist/embedded-agent/host-tools/shared/llm-stream.js +0 -136
- package/dist/embedded-agent/model-call-orchestrator.d.ts +0 -22
- package/dist/embedded-agent/model-call-orchestrator.js +0 -22
- package/dist/embedded-agent/stream-errors.d.ts +0 -10
- package/dist/embedded-agent/stream-errors.js +0 -73
- package/dist/embedded-agent/stream-message-state.d.ts +0 -14
- package/dist/embedded-agent/stream-message-state.js +0 -271
- package/dist/embedded-agent/stream-sse.d.ts +0 -78
- package/dist/embedded-agent/stream-sse.js +0 -73
- package/dist/shell/interactive/collab-command.d.ts +0 -9
- package/dist/shell/interactive/collab-command.js +0 -115
- package/dist/shell/interactive/super-fight-ui.d.ts +0 -80
- package/dist/shell/interactive/super-fight-ui.js +0 -484
- package/dist/shell/status/collab-status.d.ts +0 -18
- package/dist/shell/status/collab-status.js +0 -46
- package/xll/python/Lib/site-packages/pip/_internal/build_env.py +0 -606
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/INSTALLER +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/REQUESTED +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/WHEEL +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/entry_points.txt +0 -0
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/LICENSE.txt +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /package/xll/python/Lib/site-packages/{pip-26.1.2.dist-info → pip-26.2.dist-info}/licenses/src/pip/_vendor/urllib3/LICENSE.txt +0 -0
package/BINARY-INVENTORY.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-31T01:21:34.635Z",
|
|
4
4
|
"package": "shortcutxl",
|
|
5
5
|
"binaryExtensions": [
|
|
6
6
|
".dll",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"files": [
|
|
12
12
|
{
|
|
13
13
|
"path": "xll/ShortcutXL.xll",
|
|
14
|
-
"sha256": "
|
|
14
|
+
"sha256": "f5fb7fe280524977d746bd2145fe6106f68af14bf252c8ec7e0531a958293d19",
|
|
15
15
|
"source": "ShortcutXL native XLL build",
|
|
16
16
|
"version": "package",
|
|
17
17
|
"builtBy": "shortcut",
|
|
@@ -523,7 +523,7 @@
|
|
|
523
523
|
},
|
|
524
524
|
{
|
|
525
525
|
"path": "xll/python/Scripts/httpx.exe",
|
|
526
|
-
"sha256": "
|
|
526
|
+
"sha256": "ce6aa4fa98e8669779d14dfa81d7aba7659132525e38ca376cc747e5032801f5",
|
|
527
527
|
"source": "httpx console launcher installed into embedded Python",
|
|
528
528
|
"version": "see packaged httpx distribution",
|
|
529
529
|
"builtBy": "third-party",
|
|
@@ -531,7 +531,7 @@
|
|
|
531
531
|
},
|
|
532
532
|
{
|
|
533
533
|
"path": "xll/python/Scripts/idna.exe",
|
|
534
|
-
"sha256": "
|
|
534
|
+
"sha256": "53fc2e979b03a27cf3c7f752a6862966469095fc5194b9e07810fc20125209b1",
|
|
535
535
|
"source": "Python package console launcher installed into embedded Python",
|
|
536
536
|
"version": "see owning Python package metadata in site-packages",
|
|
537
537
|
"builtBy": "third-party",
|
|
@@ -539,7 +539,7 @@
|
|
|
539
539
|
},
|
|
540
540
|
{
|
|
541
541
|
"path": "xll/python/Scripts/pip.exe",
|
|
542
|
-
"sha256": "
|
|
542
|
+
"sha256": "e71df67dcf21cda30991bf1e75794ae1b0687e6585c9b181b13fa363ecf6b19c",
|
|
543
543
|
"source": "pip console launcher installed into embedded Python",
|
|
544
544
|
"version": "see packaged pip distribution",
|
|
545
545
|
"builtBy": "third-party",
|
|
@@ -547,7 +547,7 @@
|
|
|
547
547
|
},
|
|
548
548
|
{
|
|
549
549
|
"path": "xll/python/Scripts/pip3.13.exe",
|
|
550
|
-
"sha256": "
|
|
550
|
+
"sha256": "e71df67dcf21cda30991bf1e75794ae1b0687e6585c9b181b13fa363ecf6b19c",
|
|
551
551
|
"source": "pip console launcher installed into embedded Python",
|
|
552
552
|
"version": "see packaged pip distribution",
|
|
553
553
|
"builtBy": "third-party",
|
|
@@ -555,7 +555,7 @@
|
|
|
555
555
|
},
|
|
556
556
|
{
|
|
557
557
|
"path": "xll/python/Scripts/pip3.exe",
|
|
558
|
-
"sha256": "
|
|
558
|
+
"sha256": "e71df67dcf21cda30991bf1e75794ae1b0687e6585c9b181b13fa363ecf6b19c",
|
|
559
559
|
"source": "pip console launcher installed into embedded Python",
|
|
560
560
|
"version": "see packaged pip distribution",
|
|
561
561
|
"builtBy": "third-party",
|
|
@@ -563,7 +563,7 @@
|
|
|
563
563
|
},
|
|
564
564
|
{
|
|
565
565
|
"path": "xll/python/Scripts/pywin32_postinstall.exe",
|
|
566
|
-
"sha256": "
|
|
566
|
+
"sha256": "f7f95b72e1260c6a23e2faabd4a90f067ec35e9b02587dec1a80f8d2b2bff931",
|
|
567
567
|
"source": "Python package console launcher installed into embedded Python",
|
|
568
568
|
"version": "see owning Python package metadata in site-packages",
|
|
569
569
|
"builtBy": "third-party",
|
|
@@ -571,7 +571,7 @@
|
|
|
571
571
|
},
|
|
572
572
|
{
|
|
573
573
|
"path": "xll/python/Scripts/pywin32_testall.exe",
|
|
574
|
-
"sha256": "
|
|
574
|
+
"sha256": "2597a03f242c12d8e4d6563ee761c7f7ee25455b83db032c6d4bfd6df46a0c4d",
|
|
575
575
|
"source": "Python package console launcher installed into embedded Python",
|
|
576
576
|
"version": "see owning Python package metadata in site-packages",
|
|
577
577
|
"builtBy": "third-party",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.78]
|
|
4
|
+
|
|
5
|
+
- **More performant spreadsheet operations** - Read/write operations should be much faster and less buggy.
|
|
6
|
+
- **Linked local files** - Open local file links from agent responses in both the CLI and native app.
|
|
7
|
+
- **Safer read-only modes** - Ask and Plan modes no longer expose shell execution, and mode switching avoids unnecessary skill scans.
|
|
8
|
+
- **Native app polish** - Refreshed the native app design and improved chat autoscrolling during active sessions.
|
|
9
|
+
- **Auto-update reminders** - Update reminders will be surfaced in open terminal windows.
|
|
10
|
+
|
|
3
11
|
## [0.3.77]
|
|
4
12
|
|
|
5
13
|
- **Native app file mentions** - Type `@` in the native app to search and attach workspace files with the same completion behavior as the CLI.
|
|
@@ -170,10 +170,7 @@ export declare class AgentSession {
|
|
|
170
170
|
/** Details from the last prePromptContext call (e.g. { workbooks: string[] }). Read by TUI for annotations. */
|
|
171
171
|
lastPrePromptDetails?: unknown;
|
|
172
172
|
private readonly _sessionState;
|
|
173
|
-
private _collabClient;
|
|
174
173
|
private _sheetPool;
|
|
175
|
-
private _collabAwareness;
|
|
176
|
-
private _collabSync;
|
|
177
174
|
private _modelRegistry;
|
|
178
175
|
/** Fire-and-forget tool-call summary generation. */
|
|
179
176
|
private _summaryEmitter;
|
|
@@ -419,22 +416,10 @@ export declare class AgentSession {
|
|
|
419
416
|
getFollowUpMessages(): readonly string[];
|
|
420
417
|
/** Resource loader for skills, prompts, and context files used by this session. */
|
|
421
418
|
get resourceLoader(): RuntimeResourceLoader;
|
|
422
|
-
/** Active collaboration client when the session is part of a collab room, otherwise null. */
|
|
423
|
-
get collabClient(): import('./collab/collab-client.js').CollabClient | null;
|
|
424
|
-
/** Attach or detach the collaboration client for this session. */
|
|
425
|
-
set collabClient(client: import('./collab/collab-client.js').CollabClient | null);
|
|
426
419
|
/** Sheet-engine pool currently bound to this session, or null if unbound. */
|
|
427
420
|
get sheetPool(): import('@shortcut/mog-sandbox-runtime').SheetEnginePool | null;
|
|
428
421
|
/** Attach or detach the sheet-engine pool used by new-sheet flows. */
|
|
429
422
|
set sheetPool(pool: import('@shortcut/mog-sandbox-runtime').SheetEnginePool | null);
|
|
430
|
-
/** Awareness layer for the active collab session (peer cursors, presence), or null. */
|
|
431
|
-
get collabAwareness(): import('./collab/awareness.js').CollabAwareness | null;
|
|
432
|
-
/** Attach or detach the collab awareness layer. */
|
|
433
|
-
set collabAwareness(awareness: import('./collab/awareness.js').CollabAwareness | null);
|
|
434
|
-
/** Collab document sync controller for this session, or null if not in a room. */
|
|
435
|
-
get collabSync(): import('./collab/collab-sync.js').CollabSync | null;
|
|
436
|
-
/** Attach or detach the collab document sync controller. */
|
|
437
|
-
set collabSync(sync: import('./collab/collab-sync.js').CollabSync | null);
|
|
438
423
|
/**
|
|
439
424
|
* Abort current operation and wait for agent to become idle.
|
|
440
425
|
*/
|
|
@@ -98,14 +98,8 @@ export class AgentSession {
|
|
|
98
98
|
/** Details from the last prePromptContext call (e.g. { workbooks: string[] }). Read by TUI for annotations. */
|
|
99
99
|
lastPrePromptDetails;
|
|
100
100
|
_sessionState = new SessionState();
|
|
101
|
-
// Collaboration client (lazily created on first /collab use)
|
|
102
|
-
_collabClient = null;
|
|
103
101
|
// Sheet engine pool (set from main.ts when new-sheet mode is active)
|
|
104
102
|
_sheetPool = null;
|
|
105
|
-
// Collaboration awareness (created after joining a room with an active workbook)
|
|
106
|
-
_collabAwareness = null;
|
|
107
|
-
// CRDT sync orchestrator (created after joining a room)
|
|
108
|
-
_collabSync = null;
|
|
109
103
|
// Model registry for API key resolution
|
|
110
104
|
_modelRegistry;
|
|
111
105
|
/** Fire-and-forget tool-call summary generation. */
|
|
@@ -614,13 +608,6 @@ export class AgentSession {
|
|
|
614
608
|
this._disconnectFromAgent();
|
|
615
609
|
this._summaryEmitter.abort();
|
|
616
610
|
this._eventListeners = [];
|
|
617
|
-
// Clean up collaboration resources
|
|
618
|
-
this._collabSync?.destroy();
|
|
619
|
-
this._collabSync = null;
|
|
620
|
-
this._collabAwareness?.destroy();
|
|
621
|
-
this._collabAwareness = null;
|
|
622
|
-
this._collabClient?.destroy();
|
|
623
|
-
this._collabClient = null;
|
|
624
611
|
}
|
|
625
612
|
/**
|
|
626
613
|
* Wait for any in-flight suggestion generation to complete.
|
|
@@ -1239,14 +1226,6 @@ export class AgentSession {
|
|
|
1239
1226
|
get resourceLoader() {
|
|
1240
1227
|
return this._resourceLoader;
|
|
1241
1228
|
}
|
|
1242
|
-
/** Active collaboration client when the session is part of a collab room, otherwise null. */
|
|
1243
|
-
get collabClient() {
|
|
1244
|
-
return this._collabClient;
|
|
1245
|
-
}
|
|
1246
|
-
/** Attach or detach the collaboration client for this session. */
|
|
1247
|
-
set collabClient(client) {
|
|
1248
|
-
this._collabClient = client;
|
|
1249
|
-
}
|
|
1250
1229
|
/** Sheet-engine pool currently bound to this session, or null if unbound. */
|
|
1251
1230
|
get sheetPool() {
|
|
1252
1231
|
return this._sheetPool;
|
|
@@ -1255,22 +1234,6 @@ export class AgentSession {
|
|
|
1255
1234
|
set sheetPool(pool) {
|
|
1256
1235
|
this._sheetPool = pool;
|
|
1257
1236
|
}
|
|
1258
|
-
/** Awareness layer for the active collab session (peer cursors, presence), or null. */
|
|
1259
|
-
get collabAwareness() {
|
|
1260
|
-
return this._collabAwareness;
|
|
1261
|
-
}
|
|
1262
|
-
/** Attach or detach the collab awareness layer. */
|
|
1263
|
-
set collabAwareness(awareness) {
|
|
1264
|
-
this._collabAwareness = awareness;
|
|
1265
|
-
}
|
|
1266
|
-
/** Collab document sync controller for this session, or null if not in a room. */
|
|
1267
|
-
get collabSync() {
|
|
1268
|
-
return this._collabSync;
|
|
1269
|
-
}
|
|
1270
|
-
/** Attach or detach the collab document sync controller. */
|
|
1271
|
-
set collabSync(sync) {
|
|
1272
|
-
this._collabSync = sync;
|
|
1273
|
-
}
|
|
1274
1237
|
/**
|
|
1275
1238
|
* Abort current operation and wait for agent to become idle.
|
|
1276
1239
|
*/
|
|
@@ -42,9 +42,7 @@ const ALL_BUILTIN_SLASH_COMMANDS = [
|
|
|
42
42
|
{ name: 'port-skills', description: 'Discover and register external skill roots' },
|
|
43
43
|
{ name: 'download-skills', description: 'Download skills from cloud' },
|
|
44
44
|
{ name: 'upload-skills', description: 'Upload local skills to cloud' },
|
|
45
|
-
{ name: 'reload', description: 'Reload extensions, skills, prompts, and themes' }
|
|
46
|
-
// Collaboration
|
|
47
|
-
{ name: 'collab', description: 'Create or join a collaboration room' }
|
|
45
|
+
{ name: 'reload', description: 'Reload extensions, skills, prompts, and themes' }
|
|
48
46
|
];
|
|
49
47
|
/** All builtin command names, used to prevent extension collisions. */
|
|
50
48
|
export const ALL_BUILTIN_SLASH_COMMAND_NAMES = new Set(ALL_BUILTIN_SLASH_COMMANDS.map((cmd) => cmd.name));
|
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* Provides the spreadsheet execution tool set for making changes to the workbook.
|
|
5
5
|
* Can switch to plan or installation mode.
|
|
6
6
|
*/
|
|
7
|
-
import { MODE } from '../../../mode-names.js';
|
|
8
7
|
import { ACTION_SWITCH_MODE, BASH, EXECUTE_CODE, EXECUTE_TOOL, GET_TOOL_INFO, MCP_TOOL_NAMES, REFRESH_CONTEXT, SEND_MESSAGE, TAKE_SCREENSHOT, TASK, WRITE } from '../../../tool-names.js';
|
|
8
|
+
import { ACTION_MODE_METADATA } from '../metadata.js';
|
|
9
9
|
import { buildActionPrompt } from './prompt.js';
|
|
10
|
-
const DESCRIPTION = 'Execute changes to the spreadsheet.';
|
|
11
10
|
export const ACTION_AGENT_TOOL_NAMES = [
|
|
12
11
|
BASH,
|
|
13
12
|
WRITE,
|
|
@@ -24,11 +23,11 @@ export const ACTION_AGENT_TOOL_NAMES = [
|
|
|
24
23
|
/** Construct the action-mode agent definition with the full execution toolset. */
|
|
25
24
|
export function actionAgent() {
|
|
26
25
|
return {
|
|
27
|
-
name:
|
|
28
|
-
description:
|
|
26
|
+
name: ACTION_MODE_METADATA.name,
|
|
27
|
+
description: ACTION_MODE_METADATA.description,
|
|
29
28
|
systemPrompt: buildActionPrompt(),
|
|
30
29
|
tools: ACTION_AGENT_TOOL_NAMES,
|
|
31
|
-
switchTo:
|
|
30
|
+
switchTo: ACTION_MODE_METADATA.switchTo
|
|
32
31
|
};
|
|
33
32
|
}
|
|
34
33
|
//# sourceMappingURL=agent.js.map
|
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
* Reviews, audits, and explains spreadsheet content without modification.
|
|
5
5
|
* This is a sink state: the agent cannot switch out of ask mode.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { EXECUTE_CODE, EXECUTE_TOOL, FIND, GET_TOOL_INFO, GREP, LLM_ANALYSIS, LS, MCP_TOOL_NAMES, READ, TAKE_SCREENSHOT } from '../../../tool-names.js';
|
|
8
|
+
import { ASK_MODE_METADATA } from '../metadata.js';
|
|
9
9
|
import { buildAskPrompt } from './prompt.js';
|
|
10
|
-
const DESCRIPTION = 'Read-only analysis mode — reviews, audits, and explains spreadsheet content. Switch to ask mode for user queries that center on audit, review, and understanding without any spreadsheet modifications.';
|
|
11
10
|
const TOOLS = [
|
|
12
|
-
BASH,
|
|
13
11
|
EXECUTE_CODE,
|
|
14
12
|
READ,
|
|
15
13
|
GREP,
|
|
@@ -23,8 +21,8 @@ const TOOLS = [
|
|
|
23
21
|
];
|
|
24
22
|
export function askAgent() {
|
|
25
23
|
return {
|
|
26
|
-
name:
|
|
27
|
-
description:
|
|
24
|
+
name: ASK_MODE_METADATA.name,
|
|
25
|
+
description: ASK_MODE_METADATA.description,
|
|
28
26
|
systemPrompt: buildAskPrompt(),
|
|
29
27
|
tools: TOOLS
|
|
30
28
|
};
|
package/dist/app/modes/index.js
CHANGED
|
@@ -9,29 +9,39 @@ export { askAgent } from './ask/agent.js';
|
|
|
9
9
|
export { installationAgent } from './installation/agent.js';
|
|
10
10
|
export { manageAgent } from './manage/agent.js';
|
|
11
11
|
export { planAgent } from './plan/agent.js';
|
|
12
|
+
import { MODE } from '../../mode-names.js';
|
|
12
13
|
import { actionAgent } from './action/agent.js';
|
|
13
14
|
import { askAgent } from './ask/agent.js';
|
|
14
15
|
import { installationAgent } from './installation/agent.js';
|
|
15
16
|
import { manageAgent } from './manage/agent.js';
|
|
17
|
+
import { MODE_METADATA } from './metadata.js';
|
|
16
18
|
import { planAgent } from './plan/agent.js';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
const MODE_FACTORIES = new Map([
|
|
20
|
+
[MODE.INSTALLATION, installationAgent],
|
|
21
|
+
[MODE.ACTION, actionAgent],
|
|
22
|
+
[MODE.PLAN, planAgent],
|
|
23
|
+
[MODE.ASK, askAgent],
|
|
24
|
+
[MODE.MANAGE, manageAgent]
|
|
25
|
+
]);
|
|
20
26
|
export function getModes() {
|
|
21
|
-
return
|
|
27
|
+
return MODE_METADATA.map((metadata) => {
|
|
28
|
+
const factory = MODE_FACTORIES.get(metadata.name);
|
|
29
|
+
if (!factory) {
|
|
30
|
+
throw new Error(`No mode factory registered for "${metadata.name}".`);
|
|
31
|
+
}
|
|
32
|
+
return factory();
|
|
33
|
+
});
|
|
22
34
|
}
|
|
23
35
|
export function getMode(name) {
|
|
24
|
-
return
|
|
36
|
+
return MODE_FACTORIES.get(name)?.();
|
|
25
37
|
}
|
|
26
38
|
export function getModeNames() {
|
|
27
|
-
return
|
|
39
|
+
return MODE_METADATA.map((mode) => mode.name);
|
|
28
40
|
}
|
|
29
41
|
export function buildModeList() {
|
|
30
|
-
return
|
|
31
|
-
.map((mode) => {
|
|
42
|
+
return MODE_METADATA.map((mode) => {
|
|
32
43
|
const targets = mode.switchTo?.join(', ') ?? 'none';
|
|
33
44
|
return `- **${mode.name}**: ${mode.description} (can switch to: ${targets})`;
|
|
34
|
-
})
|
|
35
|
-
.join('\n');
|
|
45
|
+
}).join('\n');
|
|
36
46
|
}
|
|
37
47
|
//# sourceMappingURL=index.js.map
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* Accepts optional preflight log entries to communicate what the deterministic
|
|
7
7
|
* preflight script already accomplished before the agent took over.
|
|
8
8
|
*/
|
|
9
|
-
import { MODE } from '../../../mode-names.js';
|
|
10
9
|
import { BASH, EDIT, EXECUTE_CODE, GREP, INSTALLATION_SWITCH_MODE, READ, WRITE } from '../../../tool-names.js';
|
|
10
|
+
import { INSTALLATION_MODE_METADATA } from '../metadata.js';
|
|
11
11
|
import { buildMacInstallationPrompt } from './prompt-mac.js';
|
|
12
12
|
import { buildWindowsInstallationPrompt } from './prompt-windows.js';
|
|
13
13
|
function buildInstallationPrompt(preflightLog) {
|
|
@@ -16,15 +16,14 @@ function buildInstallationPrompt(preflightLog) {
|
|
|
16
16
|
}
|
|
17
17
|
return buildWindowsInstallationPrompt(preflightLog);
|
|
18
18
|
}
|
|
19
|
-
const DESCRIPTION = 'First-time setup for ShortcutXL.';
|
|
20
19
|
const TOOLS = [READ, BASH, EDIT, WRITE, GREP, EXECUTE_CODE, INSTALLATION_SWITCH_MODE];
|
|
21
20
|
export function installationAgent(preflightLog) {
|
|
22
21
|
return {
|
|
23
|
-
name:
|
|
24
|
-
description:
|
|
22
|
+
name: INSTALLATION_MODE_METADATA.name,
|
|
23
|
+
description: INSTALLATION_MODE_METADATA.description,
|
|
25
24
|
systemPrompt: buildInstallationPrompt(preflightLog),
|
|
26
25
|
tools: TOOLS,
|
|
27
|
-
switchTo:
|
|
26
|
+
switchTo: INSTALLATION_MODE_METADATA.switchTo
|
|
28
27
|
};
|
|
29
28
|
}
|
|
30
29
|
//# sourceMappingURL=agent.js.map
|
|
@@ -4,16 +4,15 @@
|
|
|
4
4
|
* Delegates workbook work to subagents, with bash for coordination files and inspection.
|
|
5
5
|
* Explicit /manage can enter it, but it does not switch out again.
|
|
6
6
|
*/
|
|
7
|
-
import { MODE } from '../../../mode-names.js';
|
|
8
7
|
import { BASH, EXECUTE_TOOL, GET_TOOL_INFO, MCP_TOOL_NAMES, SEND_MESSAGE, TASK } from '../../../tool-names.js';
|
|
8
|
+
import { MANAGE_MODE_METADATA } from '../metadata.js';
|
|
9
9
|
import { buildManagePrompt } from './prompt.js';
|
|
10
|
-
const DESCRIPTION = 'Orchestration mode — decomposes complex tasks, delegates to subagents in parallel, and synthesizes results.';
|
|
11
10
|
const TOOLS = [TASK, SEND_MESSAGE, GET_TOOL_INFO, EXECUTE_TOOL, BASH, ...MCP_TOOL_NAMES];
|
|
12
11
|
/** Construct the manage-mode agent definition that orchestrates work via subagents. */
|
|
13
12
|
export function manageAgent() {
|
|
14
13
|
return {
|
|
15
|
-
name:
|
|
16
|
-
description:
|
|
14
|
+
name: MANAGE_MODE_METADATA.name,
|
|
15
|
+
description: MANAGE_MODE_METADATA.description,
|
|
17
16
|
systemPrompt: buildManagePrompt(),
|
|
18
17
|
tools: TOOLS
|
|
19
18
|
};
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Pure orchestration mode: decomposes tasks, delegates to subagents,
|
|
5
5
|
* and synthesizes results. No direct file/spreadsheet access.
|
|
6
6
|
*/
|
|
7
|
-
import { buildCurrentSkillsSection } from '../../prompts/shared-guidelines.js';
|
|
8
7
|
const MANAGE_BASE = `\
|
|
9
8
|
You are Shortcut in Manage Mode — an orchestrator. You decompose tasks, delegate workbook/document work to subagents via the task tool, use bash for coordination files and lightweight inspection, and synthesize results.
|
|
10
9
|
|
|
@@ -79,6 +78,6 @@ Every task query to a subagent must include:
|
|
|
79
78
|
|
|
80
79
|
`;
|
|
81
80
|
export function buildManagePrompt() {
|
|
82
|
-
return
|
|
81
|
+
return MANAGE_BASE;
|
|
83
82
|
}
|
|
84
83
|
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface ModeMetadata {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly description: string;
|
|
4
|
+
readonly switchTo?: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
export declare const INSTALLATION_MODE_METADATA: {
|
|
7
|
+
readonly name: "installation";
|
|
8
|
+
readonly description: "First-time setup for ShortcutXL.";
|
|
9
|
+
readonly switchTo: readonly ["action"];
|
|
10
|
+
};
|
|
11
|
+
export declare const ACTION_MODE_METADATA: {
|
|
12
|
+
readonly name: "action";
|
|
13
|
+
readonly description: "Execute changes to the spreadsheet.";
|
|
14
|
+
readonly switchTo: readonly ["plan", "installation"];
|
|
15
|
+
};
|
|
16
|
+
export declare const PLAN_MODE_METADATA: {
|
|
17
|
+
readonly name: "plan";
|
|
18
|
+
readonly description: "Read-only planning mode for exploration, clarifying requirements and drafting an implementation plan.";
|
|
19
|
+
readonly switchTo: readonly ["action"];
|
|
20
|
+
};
|
|
21
|
+
export declare const ASK_MODE_METADATA: {
|
|
22
|
+
readonly name: "ask";
|
|
23
|
+
readonly description: "Read-only analysis mode — reviews, audits, and explains spreadsheet content. Switch to ask mode for user queries that center on audit, review, and understanding without any spreadsheet modifications.";
|
|
24
|
+
};
|
|
25
|
+
export declare const MANAGE_MODE_METADATA: {
|
|
26
|
+
readonly name: "manage";
|
|
27
|
+
readonly description: "Orchestration mode — decomposes complex tasks, delegates to subagents in parallel, and synthesizes results.";
|
|
28
|
+
};
|
|
29
|
+
export declare const MODE_METADATA: readonly ModeMetadata[];
|
|
30
|
+
export declare function getModeMetadata(name: string): ModeMetadata | undefined;
|
|
31
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MODE } from '../../mode-names.js';
|
|
2
|
+
export const INSTALLATION_MODE_METADATA = {
|
|
3
|
+
name: MODE.INSTALLATION,
|
|
4
|
+
description: 'First-time setup for ShortcutXL.',
|
|
5
|
+
switchTo: [MODE.ACTION]
|
|
6
|
+
};
|
|
7
|
+
export const ACTION_MODE_METADATA = {
|
|
8
|
+
name: MODE.ACTION,
|
|
9
|
+
description: 'Execute changes to the spreadsheet.',
|
|
10
|
+
switchTo: [MODE.PLAN, MODE.INSTALLATION]
|
|
11
|
+
};
|
|
12
|
+
export const PLAN_MODE_METADATA = {
|
|
13
|
+
name: MODE.PLAN,
|
|
14
|
+
description: 'Read-only planning mode for exploration, clarifying requirements and drafting an implementation plan.',
|
|
15
|
+
switchTo: [MODE.ACTION]
|
|
16
|
+
};
|
|
17
|
+
export const ASK_MODE_METADATA = {
|
|
18
|
+
name: MODE.ASK,
|
|
19
|
+
description: 'Read-only analysis mode — reviews, audits, and explains spreadsheet content. Switch to ask mode for user queries that center on audit, review, and understanding without any spreadsheet modifications.'
|
|
20
|
+
};
|
|
21
|
+
export const MANAGE_MODE_METADATA = {
|
|
22
|
+
name: MODE.MANAGE,
|
|
23
|
+
description: 'Orchestration mode — decomposes complex tasks, delegates to subagents in parallel, and synthesizes results.'
|
|
24
|
+
};
|
|
25
|
+
export const MODE_METADATA = [
|
|
26
|
+
INSTALLATION_MODE_METADATA,
|
|
27
|
+
ACTION_MODE_METADATA,
|
|
28
|
+
PLAN_MODE_METADATA,
|
|
29
|
+
ASK_MODE_METADATA,
|
|
30
|
+
MANAGE_MODE_METADATA
|
|
31
|
+
];
|
|
32
|
+
export function getModeMetadata(name) {
|
|
33
|
+
return MODE_METADATA.find((mode) => mode.name === name);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -4,13 +4,10 @@
|
|
|
4
4
|
* Explores the workbook, asks clarifying questions, and produces an
|
|
5
5
|
* implementation plan before switching to action mode for execution.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { EXECUTE_CODE, EXECUTE_TOOL, FIND, GET_TOOL_INFO, GREP, LLM_ANALYSIS, LS, MCP_TOOL_NAMES, PLAN_SWITCH_MODE, READ, TAKE_SCREENSHOT } from '../../../tool-names.js';
|
|
8
|
+
import { PLAN_MODE_METADATA } from '../metadata.js';
|
|
9
9
|
import { buildPlanPrompt } from './prompt.js';
|
|
10
|
-
const DESCRIPTION = `\
|
|
11
|
-
Read-only planning mode for exploration, clarifying requirements and drafting an implementation plan.`;
|
|
12
10
|
const TOOLS = [
|
|
13
|
-
BASH,
|
|
14
11
|
EXECUTE_CODE,
|
|
15
12
|
READ,
|
|
16
13
|
GREP,
|
|
@@ -25,11 +22,11 @@ const TOOLS = [
|
|
|
25
22
|
];
|
|
26
23
|
export function planAgent() {
|
|
27
24
|
return {
|
|
28
|
-
name:
|
|
29
|
-
description:
|
|
25
|
+
name: PLAN_MODE_METADATA.name,
|
|
26
|
+
description: PLAN_MODE_METADATA.description,
|
|
30
27
|
systemPrompt: buildPlanPrompt(),
|
|
31
28
|
tools: TOOLS,
|
|
32
|
-
switchTo:
|
|
29
|
+
switchTo: PLAN_MODE_METADATA.switchTo
|
|
33
30
|
};
|
|
34
31
|
}
|
|
35
32
|
//# sourceMappingURL=agent.js.map
|
|
@@ -37,7 +37,7 @@ ${engine.execTool}
|
|
|
37
37
|
1. Gauge user experience: If unclear from their query, ASK about their spreadsheet familiarity first - then adapt all explanations accordingly (beginners need more context, experts want concise trade-offs)
|
|
38
38
|
2. After exploration: State (1) task understanding (MAX 3-4 lines), (2) list ALL open questions upfront with a brief description of each (e.g., "I need to clarify 3 things: 1) how to handle missing data, 2) whether to use formulas or static values, 3) where to place output"), (3) first question
|
|
39
39
|
3. ONE question per response. Before each question, state which open items remain (e.g., "Still need to resolve: output location, formula vs static values."). If a user's answer resolves multiple items, acknowledge that and move on. Do NOT re-count or renumber — just reference the open items by topic.
|
|
40
|
-
4.
|
|
40
|
+
4. Pass the final plan directly to switch_from_plan_mode(mode: "action", reason: "<the full plan>").
|
|
41
41
|
5. If plan rejected: Restart question cycle to understand needed changes
|
|
42
42
|
|
|
43
43
|
**Critical Rules:**
|
|
@@ -66,7 +66,7 @@ Structure:
|
|
|
66
66
|
- **[Bold question]?**
|
|
67
67
|
|
|
68
68
|
**Final Plan Format:**
|
|
69
|
-
|
|
69
|
+
Pass the full plan as markdown directly in the reason argument to switch_from_plan_mode(mode: "action", reason: "<the full plan>").
|
|
70
70
|
|
|
71
71
|
\`\`\`
|
|
72
72
|
Task: [One sentence]
|
|
@@ -83,7 +83,7 @@ Things to Watch Out For:
|
|
|
83
83
|
- [Key considerations and edge cases]
|
|
84
84
|
\`\`\`
|
|
85
85
|
|
|
86
|
-
MUST call switch_from_plan_mode(mode: "action",
|
|
86
|
+
MUST call switch_from_plan_mode(mode: "action", reason: "<the full plan>") - do NOT output plan directly.
|
|
87
87
|
`;
|
|
88
88
|
// ---------------------------------------------------------------------------
|
|
89
89
|
// Assembly
|
|
@@ -52,7 +52,7 @@ Multiple agents may operate on the same Excel instance concurrently. Follow thes
|
|
|
52
52
|
|
|
53
53
|
### Guidelines
|
|
54
54
|
- Use wb.getWorkbookSummary() to get sheet names and used ranges for a workbook before deeper reads
|
|
55
|
-
- Use
|
|
55
|
+
- Use wrapper methods for cell writes so their exact destination ranges are tracked; raw COM writes execute but do not produce cell diffs. Use COM when no wrapper exists
|
|
56
56
|
- NEVER use Sheet.Copy — it silently creates new workbooks via pywin32. Use range.Copy for data transfer
|
|
57
57
|
- NEVER use Sheet.Move with keyword args (After=x, Before=x) — pywin32 bug creates new workbooks. Use wb.moveSheet(name, index) instead
|
|
58
58
|
- Watch out for indexing: COM collections are 1-based (ws.Cells(1,1) is A1), but Python tuples are 0-based
|
|
@@ -31,6 +31,10 @@ const COM_RUNTIME_TROUBLESHOOTING = `## Debugging HTTP server health
|
|
|
31
31
|
- if a single Excel process is running and execute_code fails, it could be due to pop-up blockage. Confirm and debug however you can and then stop. Don't do anything fancy, just tell the user that nothing can proceed until popups are gone
|
|
32
32
|
- if that did not work, we need to close the excel process and restart it. Ask the user to save work, close Excel, and then re-open
|
|
33
33
|
- always wait ~2 seconds to health check`;
|
|
34
|
+
const LOCAL_FILE_LINKS = `
|
|
35
|
+
- Markdown file links will be rendered such that the user can click and open the file in their OS.
|
|
36
|
+
- For auditability, you MUST ALWAYS expose local filesystem changes to the user using Markdown links whose destination is the canonical absolute file URL.
|
|
37
|
+
- Keep the visible label concise while preserving the full path in the destination.`;
|
|
34
38
|
/**
|
|
35
39
|
* Return the correct engine prompts for the given engine.
|
|
36
40
|
*
|
|
@@ -112,10 +116,10 @@ export function buildCurrentSkillsSection(options = {}) {
|
|
|
112
116
|
// ---------------------------------------------------------------------------
|
|
113
117
|
/** Append action-mode shared guidelines + engine API reference to a sections array. */
|
|
114
118
|
export function pushActionSharedGuidelines(sections, engine) {
|
|
115
|
-
sections.push(TASK_EXECUTION, COMMUNICATION, WRITING_CODE, DATA_FORMATTING, engine.apiGuidelines);
|
|
119
|
+
sections.push(TASK_EXECUTION, COMMUNICATION, LOCAL_FILE_LINKS, WRITING_CODE, DATA_FORMATTING, engine.apiGuidelines);
|
|
116
120
|
}
|
|
117
121
|
/** Append read-only shared guidelines + engine API reference to a sections array. */
|
|
118
122
|
export function pushReadOnlySharedGuidelines(sections, engine) {
|
|
119
|
-
sections.push(COMMUNICATION, engine.apiGuidelines);
|
|
123
|
+
sections.push(COMMUNICATION, LOCAL_FILE_LINKS, engine.apiGuidelines);
|
|
120
124
|
}
|
|
121
125
|
//# sourceMappingURL=shared-guidelines.js.map
|
|
@@ -58,6 +58,9 @@ function createShortcutApiV2AttributionHeaders(options) {
|
|
|
58
58
|
};
|
|
59
59
|
const userMessageId = headerValue(attribution?.userMessageId);
|
|
60
60
|
const continuationRunId = headerValue(attribution?.continuationRunId) ?? userMessageId;
|
|
61
|
+
const sessionId = headerValue(attribution?.sessionId);
|
|
62
|
+
if (sessionId)
|
|
63
|
+
headers['X-Session-Id'] = sessionId;
|
|
61
64
|
if (continuationRunId)
|
|
62
65
|
headers['X-Agent-Run-Id'] = continuationRunId;
|
|
63
66
|
if (userMessageId)
|
|
@@ -139,6 +142,7 @@ export function createShortcutApiV2Dispatcher(getExtraHeaders) {
|
|
|
139
142
|
export function registerShortcutProvider(modelRegistry, apiV2Url, options) {
|
|
140
143
|
const getExtraHeaders = () => ({
|
|
141
144
|
'X-Client-Platform': 'shortcutxl',
|
|
145
|
+
'X-Client-Version': VERSION,
|
|
142
146
|
// Override the provider SDK's default User-Agent (e.g. "Anthropic/JS <ver>").
|
|
143
147
|
// The api-v2 gateway's WAF blocks provider-SDK user-agents to prevent the
|
|
144
148
|
// gateway being used as a raw upstream proxy, which otherwise surfaces to
|
package/dist/app/tools/bash.js
CHANGED
|
@@ -19,7 +19,7 @@ const TOOL_DESCRIPTION_BASE = `
|
|
|
19
19
|
Execute a bash command in the current working directory. Returns stdout and stderr.
|
|
20
20
|
Output is truncated to ${DEFAULT_MAX_CHARS} characters. If truncated, full output is saved to a temp file.
|
|
21
21
|
For external APIs, prefer Python packages over raw curl (e.g. yfinance for market data). pip install if missing.
|
|
22
|
-
Default timeout is
|
|
22
|
+
Default timeout is 60 seconds. Override with the timeout parameter for long-running commands.
|
|
23
23
|
`;
|
|
24
24
|
const WINDOWS_SECTION = `
|
|
25
25
|
Python and pip are available for data processing, scripting, and package installation.
|
|
@@ -75,7 +75,7 @@ const bashSchema = Type.Object({
|
|
|
75
75
|
}),
|
|
76
76
|
command: Type.String({ description: 'Bash command to execute' }),
|
|
77
77
|
timeout: Type.Optional(Type.Number({
|
|
78
|
-
description: 'Timeout in seconds (default:
|
|
78
|
+
description: 'Timeout in seconds (default: 60). Increase for long-running commands.'
|
|
79
79
|
})),
|
|
80
80
|
connections: Type.Optional(Type.Array(Type.String(), {
|
|
81
81
|
description: 'Names of configured connections whose credentials should be injected as environment variables for this command. ' +
|
|
@@ -209,7 +209,7 @@ export function createBashTool(cwd, options) {
|
|
|
209
209
|
parameters: bashSchema,
|
|
210
210
|
execute: async (_toolCallId, { command, timeout: explicitTimeout, connections }, signal, onUpdate, ctx) => {
|
|
211
211
|
assertShellPolicy(command, ctx);
|
|
212
|
-
const timeout = explicitTimeout ??
|
|
212
|
+
const timeout = explicitTimeout ?? 60;
|
|
213
213
|
const resolvedCommand = commandPrefix ? `${commandPrefix}\n${command}` : command;
|
|
214
214
|
// Resolve connection credentials into env vars for this subprocess only
|
|
215
215
|
let connectionEnv;
|
|
@@ -15,13 +15,13 @@ import { readFile } from 'node:fs/promises';
|
|
|
15
15
|
import { MODE } from '../../mode-names.js';
|
|
16
16
|
import { ACTION_SWITCH_MODE, INSTALLATION_SWITCH_MODE, PLAN_SWITCH_MODE } from '../../tool-names.js';
|
|
17
17
|
import { APPROVAL } from '../approvals/types.js';
|
|
18
|
-
import {
|
|
18
|
+
import { getModeMetadata } from '../modes/metadata.js';
|
|
19
19
|
import { switchMode } from '../modes/switch-mode.js';
|
|
20
20
|
function buildDescription(sourceModeName, allowedTargets) {
|
|
21
21
|
const modeList = allowedTargets.length > 0
|
|
22
22
|
? allowedTargets
|
|
23
23
|
.map((modeName) => {
|
|
24
|
-
const mode =
|
|
24
|
+
const mode = getModeMetadata(modeName);
|
|
25
25
|
return `- **${modeName}**: ${mode?.description ?? ''}`;
|
|
26
26
|
})
|
|
27
27
|
.join('\n')
|