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
|
@@ -320,6 +320,21 @@ export function createEmbeddedAgentPortClient(port, options) {
|
|
|
320
320
|
}
|
|
321
321
|
const message = event.data;
|
|
322
322
|
switch (message.kind) {
|
|
323
|
+
case WorkerMessageKind.AgentCommandReceived:
|
|
324
|
+
// Awaited submits are steering. This receipt only diagnoses the initial handoff.
|
|
325
|
+
if (pendingRuntimeCommands.has(message.commandId))
|
|
326
|
+
return;
|
|
327
|
+
try {
|
|
328
|
+
options.onInitialSubmitReceived?.({
|
|
329
|
+
commandId: message.commandId,
|
|
330
|
+
receivedAt: message.receivedAt,
|
|
331
|
+
userMessageId: message.userMessageId
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
// Observability callbacks must not change worker command behavior.
|
|
336
|
+
}
|
|
337
|
+
return;
|
|
323
338
|
case WorkerMessageKind.AgentCommandAck: {
|
|
324
339
|
const pendingCommand = pendingRuntimeCommands.get(message.commandId);
|
|
325
340
|
if (!pendingCommand) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Owns request/response correlation and the abort-side detachment rule for
|
|
5
5
|
* results that arrive after the requesting tool has been cancelled.
|
|
6
6
|
*/
|
|
7
|
-
import { AgentEventKind, AgentProtocolErrorKind, toStructuredCloneSafeAgentEvent } from '../../contracts/agent-api.js';
|
|
7
|
+
import { AgentCommandKind, AgentEventKind, AgentProtocolErrorKind, toStructuredCloneSafeAgentEvent } from '../../contracts/agent-api.js';
|
|
8
8
|
import { WorkerMessageKind, isWorkerMessage } from '../../contracts/wire.js';
|
|
9
9
|
import { isOutOfCreditsError } from '../out-of-credits-error.js';
|
|
10
10
|
function createWorkerPortProtocolError(message) {
|
|
@@ -125,6 +125,22 @@ export function attachEmbeddedAgentDispatchToWorkerPort(port, controller, regist
|
|
|
125
125
|
return;
|
|
126
126
|
}
|
|
127
127
|
const message = event.data;
|
|
128
|
+
if (message.command.kind === AgentCommandKind.SubmitPrompt &&
|
|
129
|
+
message.command.submitOptions?.userMessageId) {
|
|
130
|
+
const receiptMessage = {
|
|
131
|
+
kind: WorkerMessageKind.AgentCommandReceived,
|
|
132
|
+
commandId: message.commandId,
|
|
133
|
+
receivedAt: Date.now(),
|
|
134
|
+
userMessageId: message.command.submitOptions.userMessageId
|
|
135
|
+
};
|
|
136
|
+
try {
|
|
137
|
+
// Observability is best-effort and must never block command handling.
|
|
138
|
+
port.postMessage(receiptMessage);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// The command can still run even if its diagnostic receipt cannot be posted.
|
|
142
|
+
}
|
|
143
|
+
}
|
|
128
144
|
void controller
|
|
129
145
|
.handleCommand(message.command)
|
|
130
146
|
.then(() => {
|
package/dist/main.js
CHANGED
|
@@ -84,6 +84,7 @@ import { createSessionManager } from './startup/session-selection.js';
|
|
|
84
84
|
import { applyRuntimeApiKeyAndRefreshShortcutLoggerContext, applyShortcutUserInfoToLogger, refreshShortcutUserInfoLoggerContext, resolveShortcutUserInfo } from './startup/shortcut-user-logger-context.js';
|
|
85
85
|
import { runForegroundUpdate } from './startup/update-action.js';
|
|
86
86
|
import { runStartupUpdateFlow } from './startup/update-flow.js';
|
|
87
|
+
import { refreshUpdateStatus } from './startup/update-manager.js';
|
|
87
88
|
import { runWindowsPythonRuntimeUpgradeIfNeeded } from './startup/windows-python-upgrade.js';
|
|
88
89
|
import { createWorkbookPrePromptContext } from './startup/workbook-pre-prompt.js';
|
|
89
90
|
let sessionRef = null;
|
|
@@ -691,6 +692,15 @@ export async function main(args) {
|
|
|
691
692
|
offline: offlineMode,
|
|
692
693
|
skipVersionCheck
|
|
693
694
|
});
|
|
695
|
+
const startupUpdateStatus = updatePromptOutcome.kind === 'continue' ? updatePromptOutcome.updateStatus : undefined;
|
|
696
|
+
const toInteractiveUpdate = (status) => status?.kind === 'available'
|
|
697
|
+
? {
|
|
698
|
+
currentVersion: status.currentVersion,
|
|
699
|
+
latestVersion: status.latestVersion
|
|
700
|
+
}
|
|
701
|
+
: undefined;
|
|
702
|
+
const interactiveUpdate = toInteractiveUpdate(startupUpdateStatus);
|
|
703
|
+
const updateChecksEnabled = isInteractive && !needsSetup && !offlineMode && !skipVersionCheck;
|
|
694
704
|
if (updatePromptOutcome.kind === 'run-update') {
|
|
695
705
|
console.log(chalk.green(`Installing ShortcutXL v${updatePromptOutcome.update.latestVersion}...`));
|
|
696
706
|
const updateResult = await runForegroundUpdate({
|
|
@@ -823,7 +833,7 @@ export async function main(args) {
|
|
|
823
833
|
cli_mode: cliMode
|
|
824
834
|
}
|
|
825
835
|
});
|
|
826
|
-
// Expose the sheet pool on the session
|
|
836
|
+
// Expose the sheet pool on the session for interactive workbook flows.
|
|
827
837
|
if (sheetPoolRef) {
|
|
828
838
|
session.sheetPool = sheetPoolRef;
|
|
829
839
|
}
|
|
@@ -976,6 +986,11 @@ export async function main(args) {
|
|
|
976
986
|
initialImages,
|
|
977
987
|
initialMessages: parsed.messages,
|
|
978
988
|
verbose: parsed.verbose,
|
|
989
|
+
availableUpdate: interactiveUpdate,
|
|
990
|
+
updateLastCheckedAt: startupUpdateStatus?.lastCheckedAt,
|
|
991
|
+
checkForUpdate: updateChecksEnabled
|
|
992
|
+
? async () => toInteractiveUpdate(await refreshUpdateStatus())
|
|
993
|
+
: undefined,
|
|
979
994
|
fetchCreditBalance: async (apiKey) => {
|
|
980
995
|
const model = session.model;
|
|
981
996
|
if (!model || model.provider !== SHORTCUT_PROVIDER_ID)
|
package/dist/rpc/index.d.ts
CHANGED
|
@@ -8,5 +8,5 @@ export type { ImageContent } from '../ai/types.js';
|
|
|
8
8
|
export type { FileUploadData } from '../app/file-uploads.js';
|
|
9
9
|
export { prepareRpcAttachments, type RpcAttachment } from './rpc-attachments.js';
|
|
10
10
|
export { RpcClient, type ModelInfo, type RpcClientOptions, type RpcEventListener, type RpcHostEventListener, type RpcTerminationListener } from './rpc-client.js';
|
|
11
|
-
export { RPC_PROTOCOL_VERSION, isRpcClientMessage, isRpcServerMessage, type RpcAgentTask, type RpcAuthProvider, type RpcAuthState, type RpcClientMessage, type RpcCommand, type RpcCommandResult, type RpcContextUsage, type RpcFastModeState, type RpcHostEvent, type RpcInteractionRequest, type RpcInteractionResponse, type RpcModelInfo, type RpcPermissionState, type RpcResourceSkill, type RpcServerMessage, type RpcSessionSnapshot, type RpcSessionSummary, type RpcSettingsState, type RpcSlashCommand } from './rpc-types.js';
|
|
11
|
+
export { RPC_PROTOCOL_VERSION, isRpcClientMessage, isRpcServerMessage, type RpcAgentTask, type RpcAuthProvider, type RpcAuthState, type RpcClientMessage, type RpcCommand, type RpcCommandResult, type RpcContextUsage, type RpcFastModeState, type RpcHostEvent, type RpcInteractionRequest, type RpcInteractionResponse, type RpcLocalFileOpenResult, type RpcModelInfo, type RpcPermissionState, type RpcResourceSkill, type RpcServerMessage, type RpcSessionSnapshot, type RpcSessionSummary, type RpcSettingsState, type RpcSlashCommand } from './rpc-types.js';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/rpc/rpc-host.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { AuthStorage } from '../app/auth/auth-storage.js';
|
|
|
4
4
|
import type { ExtensionUIContext } from '../app/extensions/index.js';
|
|
5
5
|
import { listAllSessions } from '../app/session/session-catalog.js';
|
|
6
6
|
import type { RemoteApprovalController } from '../remote-control/approval-controller.js';
|
|
7
|
+
import { type LocalFileOpenResult } from '../shell/links/local-file-opener.js';
|
|
7
8
|
import { type RpcClientMessage, type RpcServerMessage, type RpcSlashCommand } from './rpc-types.js';
|
|
8
9
|
export interface RpcSessionHostOptions {
|
|
9
10
|
listSessions?: typeof listAllSessions;
|
|
@@ -14,6 +15,7 @@ export interface RpcSessionHostOptions {
|
|
|
14
15
|
logout(providerId?: string): Promise<void>;
|
|
15
16
|
}) => Promise<boolean>;
|
|
16
17
|
extraCommands?: RpcSlashCommand[];
|
|
18
|
+
openLocalFileHref?: (href: string) => Promise<LocalFileOpenResult>;
|
|
17
19
|
}
|
|
18
20
|
/** One ordered command/event surface, independent of JSONL or Node IPC. */
|
|
19
21
|
export declare class RpcSessionHost {
|
|
@@ -27,11 +29,13 @@ export declare class RpcSessionHost {
|
|
|
27
29
|
private readonly authStorage?;
|
|
28
30
|
private readonly commandHandler?;
|
|
29
31
|
private readonly extraCommands;
|
|
32
|
+
private readonly openLocalFileHref;
|
|
30
33
|
private activeLogin?;
|
|
31
34
|
private loginAbortController?;
|
|
32
35
|
private pendingMode?;
|
|
33
36
|
private sequence;
|
|
34
37
|
private commandQueue;
|
|
38
|
+
private fileOpenQueue;
|
|
35
39
|
private shutdownRequested;
|
|
36
40
|
private started;
|
|
37
41
|
private closed;
|
package/dist/rpc/rpc-host.js
CHANGED
|
@@ -12,6 +12,7 @@ import { getTaskScopeId, taskManager } from '../app/tools/task/manager.js';
|
|
|
12
12
|
import { getAgentDir } from '../config.js';
|
|
13
13
|
import { getCurrentMode, onModeChange } from '../mode-names.js';
|
|
14
14
|
import { exportSessionToHtml } from '../shell/export-html/index.js';
|
|
15
|
+
import { openLocalFileLink } from '../shell/links/local-file-opener.js';
|
|
15
16
|
import { RPC_PROTOCOL_VERSION } from './rpc-types.js';
|
|
16
17
|
function errorMessage(error) {
|
|
17
18
|
return error instanceof Error ? error.message : String(error);
|
|
@@ -28,11 +29,13 @@ export class RpcSessionHost {
|
|
|
28
29
|
authStorage;
|
|
29
30
|
commandHandler;
|
|
30
31
|
extraCommands;
|
|
32
|
+
openLocalFileHref;
|
|
31
33
|
activeLogin;
|
|
32
34
|
loginAbortController;
|
|
33
35
|
pendingMode;
|
|
34
36
|
sequence = 0;
|
|
35
37
|
commandQueue = Promise.resolve();
|
|
38
|
+
fileOpenQueue = Promise.resolve();
|
|
36
39
|
shutdownRequested = false;
|
|
37
40
|
started = false;
|
|
38
41
|
closed = false;
|
|
@@ -48,6 +51,7 @@ export class RpcSessionHost {
|
|
|
48
51
|
this.authStorage = options.authStorage;
|
|
49
52
|
this.commandHandler = options.commandHandler;
|
|
50
53
|
this.extraCommands = options.extraCommands ?? [];
|
|
54
|
+
this.openLocalFileHref = options.openLocalFileHref ?? openLocalFileLink;
|
|
51
55
|
}
|
|
52
56
|
subscribe(listener) {
|
|
53
57
|
this.listeners.add(listener);
|
|
@@ -134,6 +138,11 @@ export class RpcSessionHost {
|
|
|
134
138
|
return Promise.reject(new Error('RPC session host is not started'));
|
|
135
139
|
if (this.closed)
|
|
136
140
|
return Promise.reject(new Error('RPC session host is closed'));
|
|
141
|
+
if (message.command.type === 'open_local_file') {
|
|
142
|
+
const operation = this.fileOpenQueue.then(() => this.processMessage(message));
|
|
143
|
+
this.fileOpenQueue = operation.catch(() => { });
|
|
144
|
+
return operation;
|
|
145
|
+
}
|
|
137
146
|
const operation = this.commandQueue.then(() => this.processMessage(message));
|
|
138
147
|
this.commandQueue = operation.catch(() => { });
|
|
139
148
|
return operation;
|
|
@@ -640,22 +649,16 @@ export class RpcSessionHost {
|
|
|
640
649
|
this.publishSnapshot();
|
|
641
650
|
return this.success();
|
|
642
651
|
}
|
|
643
|
-
case 'send_collab_message': {
|
|
644
|
-
const client = this.session.collabClient;
|
|
645
|
-
if (!client?.state.roomId)
|
|
646
|
-
return this.failure('Not in a collaboration session');
|
|
647
|
-
const message = command.message.trim();
|
|
648
|
-
if (!message)
|
|
649
|
-
return this.failure('Collaboration message cannot be empty');
|
|
650
|
-
client.sendChat(message);
|
|
651
|
-
return this.success();
|
|
652
|
-
}
|
|
653
652
|
case 'get_session_stats':
|
|
654
653
|
return this.success(this.session.getSessionStats());
|
|
655
654
|
case 'export_html':
|
|
656
655
|
return this.success({
|
|
657
656
|
path: await exportSessionToHtml(this.session, command.outputPath)
|
|
658
657
|
});
|
|
658
|
+
case 'open_local_file':
|
|
659
|
+
if (typeof command.href !== 'string')
|
|
660
|
+
return this.failure('File link must be a string');
|
|
661
|
+
return this.success(await this.openLocalFileHref(command.href));
|
|
659
662
|
case 'switch_session':
|
|
660
663
|
return this.success({
|
|
661
664
|
cancelled: !(await this.session.switchSession(command.sessionPath))
|
|
@@ -810,20 +813,6 @@ export class RpcSessionHost {
|
|
|
810
813
|
errorMessage: task.errorMessage
|
|
811
814
|
}));
|
|
812
815
|
})(),
|
|
813
|
-
collaboration: (() => {
|
|
814
|
-
const state = this.session.collabClient?.state;
|
|
815
|
-
return {
|
|
816
|
-
connected: state?.connected ?? false,
|
|
817
|
-
roomId: state?.roomId ?? null,
|
|
818
|
-
peers: state
|
|
819
|
-
? [...state.peers.values()].map((peer) => ({
|
|
820
|
-
id: peer.peerId,
|
|
821
|
-
displayName: peer.displayName,
|
|
822
|
-
sheets: peer.sheets
|
|
823
|
-
}))
|
|
824
|
-
: []
|
|
825
|
-
};
|
|
826
|
-
})(),
|
|
827
816
|
isStreaming: this.session.isStreaming,
|
|
828
817
|
isCompacting: this.session.isCompacting,
|
|
829
818
|
steeringMode: this.session.steeringMode,
|
package/dist/rpc/rpc-types.d.ts
CHANGED
|
@@ -97,19 +97,6 @@ export interface RpcAgentTask {
|
|
|
97
97
|
resultText?: string;
|
|
98
98
|
errorMessage?: string;
|
|
99
99
|
}
|
|
100
|
-
export interface RpcCollaborationState {
|
|
101
|
-
connected: boolean;
|
|
102
|
-
roomId: string | null;
|
|
103
|
-
peers: Array<{
|
|
104
|
-
id: string;
|
|
105
|
-
displayName: string;
|
|
106
|
-
sheets?: Array<{
|
|
107
|
-
name: string;
|
|
108
|
-
cellCount: number;
|
|
109
|
-
usedRange?: string | null;
|
|
110
|
-
}>;
|
|
111
|
-
}>;
|
|
112
|
-
}
|
|
113
100
|
export interface RpcSessionSummary {
|
|
114
101
|
id: string;
|
|
115
102
|
path?: string;
|
|
@@ -124,6 +111,9 @@ export interface RpcContextUsage {
|
|
|
124
111
|
contextWindow: number;
|
|
125
112
|
percent: number | null;
|
|
126
113
|
}
|
|
114
|
+
export interface RpcLocalFileOpenResult {
|
|
115
|
+
path: string;
|
|
116
|
+
}
|
|
127
117
|
export interface RpcSessionSnapshot {
|
|
128
118
|
session: RpcSessionSummary;
|
|
129
119
|
environment: {
|
|
@@ -143,7 +133,6 @@ export interface RpcSessionSnapshot {
|
|
|
143
133
|
settings: RpcSettingsState;
|
|
144
134
|
goal: ShortcutXLThreadGoal | null;
|
|
145
135
|
agentTasks: RpcAgentTask[];
|
|
146
|
-
collaboration: RpcCollaborationState;
|
|
147
136
|
isStreaming: boolean;
|
|
148
137
|
isCompacting: boolean;
|
|
149
138
|
steeringMode: 'all' | 'one-at-a-time';
|
|
@@ -287,14 +276,14 @@ export type RpcCommand = {
|
|
|
287
276
|
type: 'message_agent_task';
|
|
288
277
|
agentId: string;
|
|
289
278
|
message: string;
|
|
290
|
-
} | {
|
|
291
|
-
type: 'send_collab_message';
|
|
292
|
-
message: string;
|
|
293
279
|
} | {
|
|
294
280
|
type: 'get_session_stats';
|
|
295
281
|
} | {
|
|
296
282
|
type: 'export_html';
|
|
297
283
|
outputPath?: string;
|
|
284
|
+
} | {
|
|
285
|
+
type: 'open_local_file';
|
|
286
|
+
href: string;
|
|
298
287
|
} | {
|
|
299
288
|
type: 'switch_session';
|
|
300
289
|
sessionPath: string;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cross-platform "open" utility — launches files/directories in the OS default handler.
|
|
3
3
|
*/
|
|
4
|
+
export interface OpenInEditorOptions {
|
|
5
|
+
directory?: boolean;
|
|
6
|
+
}
|
|
4
7
|
/** Convert any error thrown by openInEditor into a human-readable string. */
|
|
5
8
|
export declare function formatOpenError(error: unknown): string;
|
|
6
9
|
/** Open a file or directory in the OS default editor/handler. */
|
|
7
|
-
export declare function openInEditor(path: string): Promise<void>;
|
|
10
|
+
export declare function openInEditor(path: string, options?: OpenInEditorOptions): Promise<void>;
|
|
8
11
|
//# sourceMappingURL=open.d.ts.map
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cross-platform "open" utility — launches files/directories in the OS default handler.
|
|
3
3
|
*/
|
|
4
|
-
import { execFile } from 'child_process';
|
|
4
|
+
import { execFile, spawn } from 'child_process';
|
|
5
5
|
/** Convert any error thrown by openInEditor into a human-readable string. */
|
|
6
6
|
export function formatOpenError(error) {
|
|
7
7
|
return error instanceof Error ? error.message : String(error);
|
|
8
8
|
}
|
|
9
9
|
/** Open a file or directory in the OS default editor/handler. */
|
|
10
|
-
export function openInEditor(path) {
|
|
10
|
+
export function openInEditor(path, options = {}) {
|
|
11
11
|
if (process.platform === 'win32') {
|
|
12
12
|
return new Promise((resolve, reject) => {
|
|
13
|
+
if (options.directory) {
|
|
14
|
+
const child = spawn('explorer.exe', ['/n,', path], {
|
|
15
|
+
detached: true,
|
|
16
|
+
stdio: 'ignore'
|
|
17
|
+
});
|
|
18
|
+
child.once('error', reject);
|
|
19
|
+
child.once('spawn', () => {
|
|
20
|
+
child.unref();
|
|
21
|
+
resolve();
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
13
25
|
execFile('rundll32.exe', ['url.dll,FileProtocolHandler', path], { windowsHide: true }, (error) => {
|
|
14
26
|
if (error) {
|
|
15
27
|
reject(error);
|
|
@@ -7,6 +7,8 @@ import type { SkillUploadApprovalRequest } from '../../app/sync/skills-upload.js
|
|
|
7
7
|
import type { WorkbookScopeStateRef } from '../../app/workbook-scope.js';
|
|
8
8
|
import type { SelectItem } from '../../tui/index.js';
|
|
9
9
|
import type { Terminal } from '../../tui/terminal.js';
|
|
10
|
+
import type { LocalFileOpenResult } from '../links/local-file-opener.js';
|
|
11
|
+
import type { InteractiveAvailableUpdate } from '../status/update-reminder.js';
|
|
10
12
|
import type { SlashCommandDefinition } from './slash-commands.js';
|
|
11
13
|
import type { WorkbookScopeDeps } from './workbook-scope-controller.js';
|
|
12
14
|
export type CompactionQueuedMessage = {
|
|
@@ -29,6 +31,8 @@ export interface CreditBalance {
|
|
|
29
31
|
export interface InteractiveModeOptions {
|
|
30
32
|
/** Custom terminal implementation for the interactive shell. */
|
|
31
33
|
terminal?: Terminal;
|
|
34
|
+
/** Override local file opening for deterministic shell tests. */
|
|
35
|
+
openLocalFileHref?: (href: string) => Promise<LocalFileOpenResult>;
|
|
32
36
|
skipShortcutAuth?: boolean;
|
|
33
37
|
exitProcessOnShutdown?: boolean;
|
|
34
38
|
workbookScopeRef?: WorkbookScopeStateRef;
|
|
@@ -46,6 +50,12 @@ export interface InteractiveModeOptions {
|
|
|
46
50
|
initialMessages?: string[];
|
|
47
51
|
/** Force verbose startup (overrides quietStartup setting) */
|
|
48
52
|
verbose?: boolean;
|
|
53
|
+
/** Update retained after the user skips the startup prompt. */
|
|
54
|
+
availableUpdate?: InteractiveAvailableUpdate;
|
|
55
|
+
/** Timestamp used to schedule the next non-blocking registry check. */
|
|
56
|
+
updateLastCheckedAt?: string;
|
|
57
|
+
/** Refresh available update state for the running shell. */
|
|
58
|
+
checkForUpdate?: () => Promise<InteractiveAvailableUpdate | undefined>;
|
|
49
59
|
/**
|
|
50
60
|
* Fetch credit balance for the current API key. Injected by main.ts.
|
|
51
61
|
* Returns CreditBalance when credits apply, 'not_applicable' when the model
|
|
@@ -10,6 +10,7 @@ export declare class InteractiveMode {
|
|
|
10
10
|
private options;
|
|
11
11
|
private session;
|
|
12
12
|
private ui;
|
|
13
|
+
private readonly localFileLinkInput;
|
|
13
14
|
private renderTracePath;
|
|
14
15
|
private shellLayout;
|
|
15
16
|
private mainContentContainer;
|
|
@@ -111,17 +112,15 @@ export declare class InteractiveMode {
|
|
|
111
112
|
private widgetContainerBelow;
|
|
112
113
|
private customFooter;
|
|
113
114
|
private headerContainer;
|
|
115
|
+
private updateReminderController;
|
|
114
116
|
private builtInHeader;
|
|
115
117
|
private customHeader;
|
|
116
118
|
private isBashMode;
|
|
117
|
-
private isChatMode;
|
|
118
119
|
private creditPollInterval;
|
|
119
120
|
private static readonly CREDIT_POLL_INTERVAL_MS;
|
|
120
121
|
private readonly creditGate;
|
|
121
122
|
private _commands;
|
|
122
123
|
private _resourceDisplay;
|
|
123
|
-
private _collabManager;
|
|
124
|
-
private _superFight;
|
|
125
124
|
private readonly manualMemoryCoordinator;
|
|
126
125
|
private readonly manualSkillProposalBackground;
|
|
127
126
|
/** AgentController for the current session. */
|
|
@@ -252,6 +251,7 @@ export declare class InteractiveMode {
|
|
|
252
251
|
/** Wire interactive shell key handlers via registerInteractiveActions. */
|
|
253
252
|
private setupKeyHandlers;
|
|
254
253
|
private handleEditorSelectionInput;
|
|
254
|
+
private handleLocalFileLink;
|
|
255
255
|
/**
|
|
256
256
|
* Screen-row range (1-based, inclusive) occupied by the editor, derived from
|
|
257
257
|
* geometry cached during the last frame render — no re-render per mouse event.
|
|
@@ -283,9 +283,7 @@ export declare class InteractiveMode {
|
|
|
283
283
|
private tryAttachClipboardFilePath;
|
|
284
284
|
/** Build a CommandContext for slash command handlers. */
|
|
285
285
|
private _buildCommandContext;
|
|
286
|
-
/**
|
|
287
|
-
private getCollabCommandClient;
|
|
288
|
-
/** Wire the default editor submit handler covering bash, chat, slash, and prompt dispatch. */
|
|
286
|
+
/** Wire the default editor submit handler covering bash, slash, and prompt dispatch. */
|
|
289
287
|
private setupEditorSubmitHandler;
|
|
290
288
|
/** Wire the InteractiveSessionController to all agent lifecycle events. */
|
|
291
289
|
private subscribeToAgent;
|
|
@@ -375,13 +373,9 @@ export declare class InteractiveMode {
|
|
|
375
373
|
private handleFollowUp;
|
|
376
374
|
/** Handle dequeue keybind: pull queued messages back into the editor for editing. */
|
|
377
375
|
private handleDequeue;
|
|
378
|
-
/** Refresh the editor border color based on bash/
|
|
376
|
+
/** Refresh the editor border color based on bash/thinking state. */
|
|
379
377
|
private updateEditorBorderColor;
|
|
380
|
-
/**
|
|
381
|
-
private _attachCollabEvents;
|
|
382
|
-
/** Launch the SuperFight collab mini-game UI for the current room. */
|
|
383
|
-
private launchSuperFight;
|
|
384
|
-
/** Watch editor text and toggle bash/chat-mode borders based on `!`/`:` prefixes. */
|
|
378
|
+
/** Watch editor text and toggle bash-mode borders based on the `!` prefix. */
|
|
385
379
|
private setupBashModeDetection;
|
|
386
380
|
/** Execute a `!`-prefixed bash command, streaming output into the chat container. */
|
|
387
381
|
private executeBashCommand;
|