shortcutxl 0.2.0
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/README.md +59 -0
- package/agent-docs/README.md +397 -0
- package/agent-docs/docs/compaction.md +390 -0
- package/agent-docs/docs/custom-provider.md +580 -0
- package/agent-docs/docs/development.md +69 -0
- package/agent-docs/docs/extensions.md +1971 -0
- package/agent-docs/docs/json.md +79 -0
- package/agent-docs/docs/keybindings.md +174 -0
- package/agent-docs/docs/models.md +293 -0
- package/agent-docs/docs/packages.md +209 -0
- package/agent-docs/docs/prompt-templates.md +67 -0
- package/agent-docs/docs/providers.md +186 -0
- package/agent-docs/docs/rpc.md +1317 -0
- package/agent-docs/docs/sdk.md +962 -0
- package/agent-docs/docs/session.md +412 -0
- package/agent-docs/docs/settings.md +223 -0
- package/agent-docs/docs/shell-aliases.md +13 -0
- package/agent-docs/docs/skills.md +231 -0
- package/agent-docs/docs/terminal-setup.md +70 -0
- package/agent-docs/docs/termux.md +127 -0
- package/agent-docs/docs/themes.md +295 -0
- package/agent-docs/docs/tree.md +219 -0
- package/agent-docs/docs/tui.md +887 -0
- package/agent-docs/docs/windows.md +17 -0
- package/agent-docs/examples/README.md +25 -0
- package/agent-docs/examples/extensions/README.md +205 -0
- package/agent-docs/examples/extensions/antigravity-image-gen.ts +447 -0
- package/agent-docs/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/agent-docs/examples/extensions/bash-spawn-hook.ts +30 -0
- package/agent-docs/examples/extensions/bookmark.ts +50 -0
- package/agent-docs/examples/extensions/built-in-tool-renderer.ts +256 -0
- package/agent-docs/examples/extensions/claude-rules.ts +86 -0
- package/agent-docs/examples/extensions/commands.ts +75 -0
- package/agent-docs/examples/extensions/confirm-destructive.ts +59 -0
- package/agent-docs/examples/extensions/custom-compaction.ts +126 -0
- package/agent-docs/examples/extensions/custom-footer.ts +63 -0
- package/agent-docs/examples/extensions/custom-header.ts +73 -0
- package/agent-docs/examples/extensions/custom-provider-anthropic/index.ts +660 -0
- package/agent-docs/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/agent-docs/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/agent-docs/examples/extensions/custom-provider-gitlab-duo/index.ts +362 -0
- package/agent-docs/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/agent-docs/examples/extensions/custom-provider-gitlab-duo/test.ts +88 -0
- package/agent-docs/examples/extensions/custom-provider-qwen-cli/index.ts +349 -0
- package/agent-docs/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/agent-docs/examples/extensions/dirty-repo-guard.ts +56 -0
- package/agent-docs/examples/extensions/doom-overlay/README.md +46 -0
- package/agent-docs/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/agent-docs/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/agent-docs/examples/extensions/doom-overlay/doom-component.ts +133 -0
- package/agent-docs/examples/extensions/doom-overlay/doom-engine.ts +186 -0
- package/agent-docs/examples/extensions/doom-overlay/doom-keys.ts +108 -0
- package/agent-docs/examples/extensions/doom-overlay/index.ts +74 -0
- package/agent-docs/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/agent-docs/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/agent-docs/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/agent-docs/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/agent-docs/examples/extensions/dynamic-resources/index.ts +15 -0
- package/agent-docs/examples/extensions/dynamic-tools.ts +77 -0
- package/agent-docs/examples/extensions/event-bus.ts +43 -0
- package/agent-docs/examples/extensions/file-trigger.ts +41 -0
- package/agent-docs/examples/extensions/git-checkpoint.ts +53 -0
- package/agent-docs/examples/extensions/handoff.ts +155 -0
- package/agent-docs/examples/extensions/hello.ts +25 -0
- package/agent-docs/examples/extensions/inline-bash.ts +94 -0
- package/agent-docs/examples/extensions/input-transform.ts +43 -0
- package/agent-docs/examples/extensions/interactive-shell.ts +209 -0
- package/agent-docs/examples/extensions/mac-system-theme.ts +47 -0
- package/agent-docs/examples/extensions/message-renderer.ts +59 -0
- package/agent-docs/examples/extensions/minimal-mode.ts +430 -0
- package/agent-docs/examples/extensions/modal-editor.ts +90 -0
- package/agent-docs/examples/extensions/model-status.ts +31 -0
- package/agent-docs/examples/extensions/notify.ts +55 -0
- package/agent-docs/examples/extensions/overlay-qa-tests.ts +936 -0
- package/agent-docs/examples/extensions/overlay-test.ts +159 -0
- package/agent-docs/examples/extensions/permission-gate.ts +37 -0
- package/agent-docs/examples/extensions/pirate.ts +47 -0
- package/agent-docs/examples/extensions/plan-mode/README.md +65 -0
- package/agent-docs/examples/extensions/plan-mode/index.ts +363 -0
- package/agent-docs/examples/extensions/plan-mode/utils.ts +173 -0
- package/agent-docs/examples/extensions/preset.ts +418 -0
- package/agent-docs/examples/extensions/protected-paths.ts +30 -0
- package/agent-docs/examples/extensions/qna.ts +122 -0
- package/agent-docs/examples/extensions/question.ts +278 -0
- package/agent-docs/examples/extensions/questionnaire.ts +440 -0
- package/agent-docs/examples/extensions/rainbow-editor.ts +90 -0
- package/agent-docs/examples/extensions/reload-runtime.ts +37 -0
- package/agent-docs/examples/extensions/rpc-demo.ts +124 -0
- package/agent-docs/examples/extensions/sandbox/index.ts +324 -0
- package/agent-docs/examples/extensions/sandbox/package-lock.json +92 -0
- package/agent-docs/examples/extensions/sandbox/package.json +19 -0
- package/agent-docs/examples/extensions/send-user-message.ts +97 -0
- package/agent-docs/examples/extensions/session-name.ts +27 -0
- package/agent-docs/examples/extensions/shutdown-command.ts +69 -0
- package/agent-docs/examples/extensions/snake.ts +343 -0
- package/agent-docs/examples/extensions/space-invaders.ts +566 -0
- package/agent-docs/examples/extensions/ssh.ts +233 -0
- package/agent-docs/examples/extensions/status-line.ts +40 -0
- package/agent-docs/examples/extensions/subagent/README.md +172 -0
- package/agent-docs/examples/extensions/subagent/agents/planner.md +37 -0
- package/agent-docs/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/agent-docs/examples/extensions/subagent/agents/scout.md +50 -0
- package/agent-docs/examples/extensions/subagent/agents/worker.md +24 -0
- package/agent-docs/examples/extensions/subagent/agents.ts +130 -0
- package/agent-docs/examples/extensions/subagent/index.ts +1068 -0
- package/agent-docs/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/agent-docs/examples/extensions/subagent/prompts/implement.md +10 -0
- package/agent-docs/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/agent-docs/examples/extensions/summarize.ts +206 -0
- package/agent-docs/examples/extensions/system-prompt-header.ts +17 -0
- package/agent-docs/examples/extensions/timed-confirm.ts +72 -0
- package/agent-docs/examples/extensions/titlebar-spinner.ts +58 -0
- package/agent-docs/examples/extensions/todo.ts +314 -0
- package/agent-docs/examples/extensions/tool-override.ts +146 -0
- package/agent-docs/examples/extensions/tools.ts +145 -0
- package/agent-docs/examples/extensions/trigger-compact.ts +40 -0
- package/agent-docs/examples/extensions/truncated-tool.ts +194 -0
- package/agent-docs/examples/extensions/widget-placement.ts +17 -0
- package/agent-docs/examples/extensions/with-deps/index.ts +37 -0
- package/agent-docs/examples/extensions/with-deps/package-lock.json +31 -0
- package/agent-docs/examples/extensions/with-deps/package.json +22 -0
- package/agent-docs/examples/rpc-extension-ui.ts +654 -0
- package/agent-docs/examples/sdk/01-minimal.ts +22 -0
- package/agent-docs/examples/sdk/02-custom-model.ts +48 -0
- package/agent-docs/examples/sdk/03-custom-prompt.ts +55 -0
- package/agent-docs/examples/sdk/04-skills.ts +53 -0
- package/agent-docs/examples/sdk/05-tools.ts +56 -0
- package/agent-docs/examples/sdk/06-extensions.ts +88 -0
- package/agent-docs/examples/sdk/07-context-files.ts +40 -0
- package/agent-docs/examples/sdk/08-prompt-templates.ts +47 -0
- package/agent-docs/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/agent-docs/examples/sdk/10-settings.ts +54 -0
- package/agent-docs/examples/sdk/11-sessions.ts +48 -0
- package/agent-docs/examples/sdk/12-full-control.ts +82 -0
- package/agent-docs/examples/sdk/README.md +144 -0
- package/agent-docs/xll-skill.md +61 -0
- package/agent-docs/xll-spec.md +110 -0
- package/dist/cli/args.js +290 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/file-processor.js +79 -0
- package/dist/cli/list-models.js +92 -0
- package/dist/cli/package-commands.js +210 -0
- package/dist/cli/report-settings-errors.js +11 -0
- package/dist/cli/session-picker.js +34 -0
- package/dist/cli.js +19 -0
- package/dist/config.js +288 -0
- package/dist/core/abort.js +15 -0
- package/dist/core/agent-loop.js +352 -0
- package/dist/core/agent-session.js +2019 -0
- package/dist/core/agent.js +410 -0
- package/dist/core/auth-storage.js +456 -0
- package/dist/core/bash-executor.js +222 -0
- package/dist/core/compaction/branch-summarization.js +242 -0
- package/dist/core/compaction/compaction.js +610 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/utils.js +139 -0
- package/dist/core/defaults.js +6 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/exec.js +71 -0
- package/dist/core/export-html/ansi-to-html.js +256 -0
- package/dist/core/export-html/index.js +238 -0
- package/dist/core/export-html/session-view-model.js +342 -0
- package/dist/core/export-html/template.css +1110 -0
- package/dist/core/export-html/template.html +76 -0
- package/dist/core/export-html/template.js +1990 -0
- package/dist/core/export-html/tool-renderer.js +63 -0
- package/dist/core/export-html/vendor/highlight.min.js +7725 -0
- package/dist/core/export-html/vendor/marked.min.js +1803 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/loader.js +422 -0
- package/dist/core/extensions/runner.js +651 -0
- package/dist/core/extensions/types.js +35 -0
- package/dist/core/extensions/wrapper.js +102 -0
- package/dist/core/footer-data-provider.js +162 -0
- package/dist/core/index.js +9 -0
- package/dist/core/keybindings.js +153 -0
- package/dist/core/messages.js +133 -0
- package/dist/core/model-registry.js +539 -0
- package/dist/core/model-resolver.js +370 -0
- package/dist/core/package-manager.js +1485 -0
- package/dist/core/prompt-templates.js +253 -0
- package/dist/core/resolve-config-value.js +59 -0
- package/dist/core/resource-loader.js +700 -0
- package/dist/core/sdk.js +197 -0
- package/dist/core/session-bash.js +99 -0
- package/dist/core/session-compaction.js +165 -0
- package/dist/core/session-manager.js +1153 -0
- package/dist/core/session-models.js +99 -0
- package/dist/core/session-retry.js +155 -0
- package/dist/core/settings-manager.js +572 -0
- package/dist/core/skills.js +382 -0
- package/dist/core/slash-commands.js +31 -0
- package/dist/core/system-prompt.js +161 -0
- package/dist/core/theme.js +770 -0
- package/dist/core/timings.js +26 -0
- package/dist/core/tools/bash.js +258 -0
- package/dist/core/tools/edit-diff.js +245 -0
- package/dist/core/tools/edit.js +148 -0
- package/dist/core/tools/find.js +208 -0
- package/dist/core/tools/grep.js +246 -0
- package/dist/core/tools/index.js +67 -0
- package/dist/core/tools/ls.js +123 -0
- package/dist/core/tools/path-utils.js +81 -0
- package/dist/core/tools/read.js +160 -0
- package/dist/core/tools/truncate.js +70 -0
- package/dist/core/tools/write.js +82 -0
- package/dist/custom/agents/action.js +13 -0
- package/dist/custom/agents/document-reader.js +70 -0
- package/dist/custom/agents/general.js +26 -0
- package/dist/custom/agents/index.js +49 -0
- package/dist/custom/agents/installation.js +13 -0
- package/dist/custom/agents/types.js +7 -0
- package/dist/custom/auth/refresh-timer.js +33 -0
- package/dist/custom/auth/shortcut-oauth.js +145 -0
- package/dist/custom/constants.js +21 -0
- package/dist/custom/context/workbook-summary.js +73 -0
- package/dist/custom/credits/shortcut-credits.js +29 -0
- package/dist/custom/cron/cron-daemon-entry.js +18 -0
- package/dist/custom/cron/daemon-ipc.js +131 -0
- package/dist/custom/cron/daemon.js +224 -0
- package/dist/custom/cron/jobs.js +226 -0
- package/dist/custom/cron/run-log.js +51 -0
- package/dist/custom/cron/schedule.js +72 -0
- package/dist/custom/cron/status-line.js +98 -0
- package/dist/custom/cron/store.js +87 -0
- package/dist/custom/cron/types.js +8 -0
- package/dist/custom/dev/index.js +59 -0
- package/dist/custom/dev/trace-export.js +58 -0
- package/dist/custom/ensure-excel.js +63 -0
- package/dist/custom/excel-config.js +36 -0
- package/dist/custom/preflight.js +422 -0
- package/dist/custom/prompts/action.js +100 -0
- package/dist/custom/prompts/api.js +66 -0
- package/dist/custom/prompts/installation.js +124 -0
- package/dist/custom/prompts/shared.js +138 -0
- package/dist/custom/providers/llm-usage.js +42 -0
- package/dist/custom/providers/message-converter.js +74 -0
- package/dist/custom/providers/provider-ids.js +9 -0
- package/dist/custom/providers/register-openai-codex-provider.js +27 -0
- package/dist/custom/providers/register-shortcut-provider.js +52 -0
- package/dist/custom/providers/shortcut-invoke.js +117 -0
- package/dist/custom/providers/shortcut-stream.js +252 -0
- package/dist/custom/providers/sse-protocol.js +38 -0
- package/dist/custom/sync-xll.js +130 -0
- package/dist/custom/tools/cron.js +413 -0
- package/dist/custom/tools/excel-exec.js +167 -0
- package/dist/custom/tools/excel-range.js +50 -0
- package/dist/custom/tools/llm-analysis.js +265 -0
- package/dist/custom/tools/render-helpers.js +38 -0
- package/dist/custom/tools/switch-mode.js +94 -0
- package/dist/custom/tools/task/agents.js +6 -0
- package/dist/custom/tools/task/index.js +8 -0
- package/dist/custom/tools/task/render.js +348 -0
- package/dist/custom/tools/task/subprocess.js +320 -0
- package/dist/custom/tools/task/task.js +205 -0
- package/dist/custom/tools/todo-list.js +195 -0
- package/dist/custom/tracing/session-upload.js +93 -0
- package/dist/index.js +45 -0
- package/dist/main.js +613 -0
- package/dist/migrations.js +265 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/interactive/components/armin.js +337 -0
- package/dist/modes/interactive/components/assistant-message.js +94 -0
- package/dist/modes/interactive/components/bash-execution.js +171 -0
- package/dist/modes/interactive/components/bordered-loader.js +51 -0
- package/dist/modes/interactive/components/branch-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +46 -0
- package/dist/modes/interactive/components/config-selector.js +488 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/custom-editor.js +93 -0
- package/dist/modes/interactive/components/custom-message.js +81 -0
- package/dist/modes/interactive/components/daxnuts.js +140 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/extension-editor.js +105 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-selector.js +78 -0
- package/dist/modes/interactive/components/footer.js +309 -0
- package/dist/modes/interactive/components/index.js +33 -0
- package/dist/modes/interactive/components/keybinding-hints.js +61 -0
- package/dist/modes/interactive/components/layout.js +64 -0
- package/dist/modes/interactive/components/login-dialog.js +148 -0
- package/dist/modes/interactive/components/model-selector.js +237 -0
- package/dist/modes/interactive/components/oauth-selector.js +111 -0
- package/dist/modes/interactive/components/session-selector-search.js +157 -0
- package/dist/modes/interactive/components/session-selector.js +860 -0
- package/dist/modes/interactive/components/settings-selector.js +123 -0
- package/dist/modes/interactive/components/show-images-selector.js +35 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +48 -0
- package/dist/modes/interactive/components/theme-selector.js +47 -0
- package/dist/modes/interactive/components/thinking-selector.js +47 -0
- package/dist/modes/interactive/components/tool-execution.js +789 -0
- package/dist/modes/interactive/components/tool-group.js +106 -0
- package/dist/modes/interactive/components/tree-selector.js +962 -0
- package/dist/modes/interactive/components/user-message-selector.js +115 -0
- package/dist/modes/interactive/components/user-message.js +48 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/file-attachments.js +135 -0
- package/dist/modes/interactive/interactive-mode.js +3775 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +85 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.js +177 -0
- package/dist/modes/print-mode.js +101 -0
- package/dist/modes/rpc/rpc-client.js +387 -0
- package/dist/modes/rpc/rpc-mode.js +509 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/subagent-entry.js +145 -0
- package/dist/tool-names.js +34 -0
- package/dist/tui/autocomplete.js +596 -0
- package/dist/tui/components/box.js +104 -0
- package/dist/tui/components/cancellable-loader.js +35 -0
- package/dist/tui/components/editor.js +1679 -0
- package/dist/tui/components/image.js +69 -0
- package/dist/tui/components/input.js +433 -0
- package/dist/tui/components/loader.js +49 -0
- package/dist/tui/components/markdown.js +629 -0
- package/dist/tui/components/select-list.js +152 -0
- package/dist/tui/components/settings-list.js +185 -0
- package/dist/tui/components/spacer.js +23 -0
- package/dist/tui/components/text.js +89 -0
- package/dist/tui/components/truncated-text.js +51 -0
- package/dist/tui/editor-component.js +2 -0
- package/dist/tui/fuzzy.js +107 -0
- package/dist/tui/get-east-asian-width/index.js +32 -0
- package/dist/tui/get-east-asian-width/lookup.js +404 -0
- package/dist/tui/index.js +32 -0
- package/dist/tui/keybindings.js +114 -0
- package/dist/tui/keys.js +959 -0
- package/dist/tui/kill-ring.js +44 -0
- package/dist/tui/stdin-buffer.js +317 -0
- package/dist/tui/terminal-image.js +288 -0
- package/dist/tui/terminal.js +249 -0
- package/dist/tui/tui/autocomplete.js +596 -0
- package/dist/tui/tui/components/box.js +106 -0
- package/dist/tui/tui/components/cancellable-loader.js +35 -0
- package/dist/tui/tui/components/editor.js +1679 -0
- package/dist/tui/tui/components/image.js +69 -0
- package/dist/tui/tui/components/input.js +433 -0
- package/dist/tui/tui/components/loader.js +49 -0
- package/dist/tui/tui/components/markdown.js +629 -0
- package/dist/tui/tui/components/select-list.js +152 -0
- package/dist/tui/tui/components/settings-list.js +185 -0
- package/dist/tui/tui/components/spacer.js +23 -0
- package/dist/tui/tui/components/text.js +91 -0
- package/dist/tui/tui/components/truncated-text.js +51 -0
- package/dist/tui/tui/editor-component.js +2 -0
- package/dist/tui/tui/fuzzy.js +107 -0
- package/dist/tui/tui/get-east-asian-width/index.js +32 -0
- package/dist/tui/tui/get-east-asian-width/lookup.js +404 -0
- package/dist/tui/tui/index.js +32 -0
- package/dist/tui/tui/keybindings.js +114 -0
- package/dist/tui/tui/keys.js +959 -0
- package/dist/tui/tui/kill-ring.js +44 -0
- package/dist/tui/tui/stdin-buffer.js +317 -0
- package/dist/tui/tui/terminal-image.js +288 -0
- package/dist/tui/tui/terminal.js +249 -0
- package/dist/tui/tui/tui.js +955 -0
- package/dist/tui/tui/undo-stack.js +25 -0
- package/dist/tui/tui/utils.js +800 -0
- package/dist/tui/tui.js +955 -0
- package/dist/tui/undo-stack.js +25 -0
- package/dist/tui/utils.js +800 -0
- package/dist/utils/changelog.js +87 -0
- package/dist/utils/clipboard-image.js +164 -0
- package/dist/utils/clipboard-native.js +14 -0
- package/dist/utils/clipboard.js +67 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/git.js +166 -0
- package/dist/utils/image-convert.js +35 -0
- package/dist/utils/image-resize.js +183 -0
- package/dist/utils/mime.js +26 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/shell.js +217 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/tools-manager.js +259 -0
- package/package.json +78 -0
- package/skills/excel-com-api/SKILL.md +74 -0
- package/skills/excel-com-api/excel-type-library.py +27767 -0
- package/skills/excel-com-api/office-type-library.py +10867 -0
- package/skills/integrations/SKILL.md +138 -0
- package/skills/integrations/alphasense.md +457 -0
- package/skills/integrations/bloomberg.md +803 -0
- package/skills/integrations/calcbench.md +315 -0
- package/skills/integrations/capiq.md +848 -0
- package/skills/integrations/dynamics-365-finance.md +354 -0
- package/skills/integrations/earnings_transcripts.md +387 -0
- package/skills/integrations/factset.md +758 -0
- package/skills/integrations/ice-fixed-income.md +344 -0
- package/skills/integrations/moodys-analytics.md +313 -0
- package/skills/integrations/morningstar.md +433 -0
- package/skills/integrations/nasdaq-data-link.md +249 -0
- package/skills/integrations/pitchbook.md +413 -0
- package/skills/integrations/preqin.md +422 -0
- package/skills/integrations/quickbooks.md +289 -0
- package/skills/integrations/quickfs.md +314 -0
- package/skills/integrations/refinitiv.md +473 -0
- package/skills/integrations/sage-intacct.md +401 -0
- package/skills/integrations/visible-alpha.md +320 -0
- package/skills/integrations/xero.md +393 -0
- package/skills/integrations/ycharts.md +306 -0
- package/skills/pdf-creation/SKILL.md +93 -0
- package/skills/pdf-extraction/SKILL.md +32 -0
- package/skills/powerpoint-creation/SKILL.md +110 -0
- package/skills/sec-edgar/SKILL.md +127 -0
- package/skills/sec-edgar/sec_to_pdf.py +109 -0
- package/xll/ShortcutXL.xll +0 -0
- package/xll/modules/debug_render.py +272 -0
- package/xll/modules/gameboy.py +241 -0
- package/xll/modules/pong.py +188 -0
- package/xll/modules/shortcut_xl/__init__.py +18 -0
- package/xll/modules/shortcut_xl/_categorize.py +200 -0
- package/xll/modules/shortcut_xl/_com.py +108 -0
- package/xll/modules/shortcut_xl/_format.py +252 -0
- package/xll/modules/shortcut_xl/_log.py +12 -0
- package/xll/modules/shortcut_xl/_managed.py +116 -0
- package/xll/modules/shortcut_xl/_registry.py +44 -0
- package/xll/modules/shortcut_xl/_threading.py +161 -0
- package/xll/modules/shortcut_xl/_tracking.py +283 -0
- package/xll/modules/stocks.py +100 -0
- package/xll/python3.dll +0 -0
- package/xll/python312.dll +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Container, getEditorKeybindings, Spacer, Text, truncateToWidth } from '../../../tui/index.js';
|
|
2
|
+
import { theme } from '../../../core/theme.js';
|
|
3
|
+
import { DynamicBorder } from './dynamic-border.js';
|
|
4
|
+
/**
|
|
5
|
+
* Custom user message list component with selection
|
|
6
|
+
*/
|
|
7
|
+
class UserMessageList {
|
|
8
|
+
messages = [];
|
|
9
|
+
selectedIndex = 0;
|
|
10
|
+
onSelect;
|
|
11
|
+
onCancel;
|
|
12
|
+
maxVisible = 10; // Max messages visible
|
|
13
|
+
constructor(messages) {
|
|
14
|
+
// Store messages in chronological order (oldest to newest)
|
|
15
|
+
this.messages = messages;
|
|
16
|
+
// Start with the last (most recent) message selected
|
|
17
|
+
this.selectedIndex = Math.max(0, messages.length - 1);
|
|
18
|
+
}
|
|
19
|
+
invalidate() {
|
|
20
|
+
// No cached state to invalidate currently
|
|
21
|
+
}
|
|
22
|
+
render(width) {
|
|
23
|
+
const lines = [];
|
|
24
|
+
if (this.messages.length === 0) {
|
|
25
|
+
lines.push(theme.fg('muted', ' No user messages found'));
|
|
26
|
+
return lines;
|
|
27
|
+
}
|
|
28
|
+
// Calculate visible range with scrolling
|
|
29
|
+
const startIndex = Math.max(0, Math.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.messages.length - this.maxVisible));
|
|
30
|
+
const endIndex = Math.min(startIndex + this.maxVisible, this.messages.length);
|
|
31
|
+
// Render visible messages (2 lines per message + blank line)
|
|
32
|
+
for (let i = startIndex; i < endIndex; i++) {
|
|
33
|
+
const message = this.messages[i];
|
|
34
|
+
const isSelected = i === this.selectedIndex;
|
|
35
|
+
// Normalize message to single line
|
|
36
|
+
const normalizedMessage = message.text.replace(/\n/g, ' ').trim();
|
|
37
|
+
// First line: cursor + message
|
|
38
|
+
const cursor = isSelected ? theme.fg('accent', '› ') : ' ';
|
|
39
|
+
const maxMsgWidth = width - 2; // Account for cursor (2 chars)
|
|
40
|
+
const truncatedMsg = truncateToWidth(normalizedMessage, maxMsgWidth);
|
|
41
|
+
const messageLine = cursor + (isSelected ? theme.bold(truncatedMsg) : truncatedMsg);
|
|
42
|
+
lines.push(messageLine);
|
|
43
|
+
// Second line: metadata (position in history)
|
|
44
|
+
const position = i + 1;
|
|
45
|
+
const metadata = ` Message ${position} of ${this.messages.length}`;
|
|
46
|
+
const metadataLine = theme.fg('muted', metadata);
|
|
47
|
+
lines.push(metadataLine);
|
|
48
|
+
lines.push(''); // Blank line between messages
|
|
49
|
+
}
|
|
50
|
+
// Add scroll indicator if needed
|
|
51
|
+
if (startIndex > 0 || endIndex < this.messages.length) {
|
|
52
|
+
const scrollInfo = theme.fg('muted', ` (${this.selectedIndex + 1}/${this.messages.length})`);
|
|
53
|
+
lines.push(scrollInfo);
|
|
54
|
+
}
|
|
55
|
+
return lines;
|
|
56
|
+
}
|
|
57
|
+
handleInput(keyData) {
|
|
58
|
+
const kb = getEditorKeybindings();
|
|
59
|
+
// Up arrow - go to previous (older) message, wrap to bottom when at top
|
|
60
|
+
if (kb.matches(keyData, 'selectUp')) {
|
|
61
|
+
this.selectedIndex =
|
|
62
|
+
this.selectedIndex === 0 ? this.messages.length - 1 : this.selectedIndex - 1;
|
|
63
|
+
}
|
|
64
|
+
// Down arrow - go to next (newer) message, wrap to top when at bottom
|
|
65
|
+
else if (kb.matches(keyData, 'selectDown')) {
|
|
66
|
+
this.selectedIndex =
|
|
67
|
+
this.selectedIndex === this.messages.length - 1 ? 0 : this.selectedIndex + 1;
|
|
68
|
+
}
|
|
69
|
+
// Enter - select message and branch
|
|
70
|
+
else if (kb.matches(keyData, 'selectConfirm')) {
|
|
71
|
+
const selected = this.messages[this.selectedIndex];
|
|
72
|
+
if (selected && this.onSelect) {
|
|
73
|
+
this.onSelect(selected.id);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Escape - cancel
|
|
77
|
+
else if (kb.matches(keyData, 'selectCancel')) {
|
|
78
|
+
if (this.onCancel) {
|
|
79
|
+
this.onCancel();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Component that renders a user message selector for branching
|
|
86
|
+
*/
|
|
87
|
+
export class UserMessageSelectorComponent extends Container {
|
|
88
|
+
messageList;
|
|
89
|
+
constructor(messages, onSelect, onCancel) {
|
|
90
|
+
super();
|
|
91
|
+
// Add header
|
|
92
|
+
this.addChild(new Spacer(1));
|
|
93
|
+
this.addChild(new Text(theme.bold('Branch from Message'), 1, 0));
|
|
94
|
+
this.addChild(new Text(theme.fg('muted', 'Select a message to create a new branch from that point'), 1, 0));
|
|
95
|
+
this.addChild(new Spacer(1));
|
|
96
|
+
this.addChild(new DynamicBorder());
|
|
97
|
+
this.addChild(new Spacer(1));
|
|
98
|
+
// Create message list
|
|
99
|
+
this.messageList = new UserMessageList(messages);
|
|
100
|
+
this.messageList.onSelect = onSelect;
|
|
101
|
+
this.messageList.onCancel = onCancel;
|
|
102
|
+
this.addChild(this.messageList);
|
|
103
|
+
// Add bottom border
|
|
104
|
+
this.addChild(new Spacer(1));
|
|
105
|
+
this.addChild(new DynamicBorder());
|
|
106
|
+
// Auto-cancel if no messages
|
|
107
|
+
if (messages.length === 0) {
|
|
108
|
+
setTimeout(() => onCancel(), 100);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
getMessageList() {
|
|
112
|
+
return this.messageList;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=user-message-selector.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Box, Container, Markdown, Spacer, Text } from '../../../tui/index.js';
|
|
2
|
+
import { theme } from '../../../core/theme.js';
|
|
3
|
+
import { formatAttachmentLabels } from '../file-attachments.js';
|
|
4
|
+
import { getMarkdownTheme } from '../theme/theme.js';
|
|
5
|
+
import { CONTENT_PAD_X, CONTENT_PAD_Y } from './layout.js';
|
|
6
|
+
/**
|
|
7
|
+
* Component that renders a user message with an optional right-aligned annotation
|
|
8
|
+
* and file attachment labels.
|
|
9
|
+
*/
|
|
10
|
+
export class UserMessageComponent extends Container {
|
|
11
|
+
_annotation;
|
|
12
|
+
_attachments;
|
|
13
|
+
box;
|
|
14
|
+
constructor(text, markdownTheme = getMarkdownTheme()) {
|
|
15
|
+
super();
|
|
16
|
+
this.addChild(new Spacer(1));
|
|
17
|
+
this.box = new Box(CONTENT_PAD_X, CONTENT_PAD_Y, (t) => theme.bg('userMessageBg', t));
|
|
18
|
+
this.box.addChild(new Markdown(text, 0, 0, markdownTheme, {
|
|
19
|
+
color: (text) => theme.fg('userMessageText', text)
|
|
20
|
+
}));
|
|
21
|
+
this.addChild(this.box);
|
|
22
|
+
}
|
|
23
|
+
/** Set a dim annotation shown above the message (e.g. workbook names). */
|
|
24
|
+
setAnnotation(text) {
|
|
25
|
+
if (!this._annotation) {
|
|
26
|
+
this._annotation = new Text(theme.fg('dim', text), 0, 0);
|
|
27
|
+
// Insert between Spacer and Box
|
|
28
|
+
this.children.splice(1, 0, this._annotation);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this._annotation.setText(theme.fg('dim', text));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** Set file attachment labels shown below the message with ⎿ glyph. */
|
|
35
|
+
setAttachments(filePaths) {
|
|
36
|
+
if (filePaths.length === 0)
|
|
37
|
+
return;
|
|
38
|
+
const labels = formatAttachmentLabels(filePaths);
|
|
39
|
+
if (!this._attachments) {
|
|
40
|
+
this._attachments = new Text(labels, 0, 0);
|
|
41
|
+
this.box.addChild(this._attachments);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this._attachments.setText(labels);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=user-message.js.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility for truncating text to visual lines (accounting for line wrapping).
|
|
3
|
+
* Used by both tool-execution.ts and bash-execution.ts for consistent behavior.
|
|
4
|
+
*/
|
|
5
|
+
import { Text } from '../../../tui/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Truncate text to a maximum number of visual lines (from the end).
|
|
8
|
+
* This accounts for line wrapping based on terminal width.
|
|
9
|
+
*
|
|
10
|
+
* @param text - The text content (may contain newlines)
|
|
11
|
+
* @param maxVisualLines - Maximum number of visual lines to show
|
|
12
|
+
* @param width - Terminal/render width
|
|
13
|
+
* @param paddingX - Horizontal padding for Text component (default 0).
|
|
14
|
+
* Use 0 when result will be placed in a Box (Box adds its own padding).
|
|
15
|
+
* Use 1 when result will be placed in a plain Container.
|
|
16
|
+
* @returns The truncated visual lines and count of skipped lines
|
|
17
|
+
*/
|
|
18
|
+
export function truncateToVisualLines(text, maxVisualLines, width, paddingX = 0) {
|
|
19
|
+
if (!text) {
|
|
20
|
+
return { visualLines: [], skippedCount: 0 };
|
|
21
|
+
}
|
|
22
|
+
// Create a temporary Text component to render and get visual lines
|
|
23
|
+
const tempText = new Text(text, paddingX, 0);
|
|
24
|
+
const allVisualLines = tempText.render(width);
|
|
25
|
+
if (allVisualLines.length <= maxVisualLines) {
|
|
26
|
+
return { visualLines: allVisualLines, skippedCount: 0 };
|
|
27
|
+
}
|
|
28
|
+
// Take the last N visual lines
|
|
29
|
+
const truncatedLines = allVisualLines.slice(-maxVisualLines);
|
|
30
|
+
const skippedCount = allVisualLines.length - maxVisualLines;
|
|
31
|
+
return { visualLines: truncatedLines, skippedCount };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=visual-truncate.js.map
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File attachment utilities and state manager for the interactive mode.
|
|
3
|
+
* Handles serialization/deserialization of attached file paths in messages,
|
|
4
|
+
* display formatting, input helpers, and stdin file-drop interception.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { Text } from '../../tui/index.js';
|
|
9
|
+
import { theme } from '../../core/theme.js';
|
|
10
|
+
/** Header sent to the LLM when files are attached. Used for both serialization and parsing. */
|
|
11
|
+
const ATTACHMENT_HEADER = 'the user attached the following files:';
|
|
12
|
+
/** Strip surrounding single or double quotes from a string. */
|
|
13
|
+
export function stripQuotes(s) {
|
|
14
|
+
if ((s.startsWith("'") && s.endsWith("'")) ||
|
|
15
|
+
(s.startsWith('"') && s.endsWith('"'))) {
|
|
16
|
+
return s.slice(1, -1);
|
|
17
|
+
}
|
|
18
|
+
return s;
|
|
19
|
+
}
|
|
20
|
+
/** Check if a path points to a non-empty file. */
|
|
21
|
+
function isAttachableFile(filePath) {
|
|
22
|
+
try {
|
|
23
|
+
const stats = fs.statSync(filePath);
|
|
24
|
+
return stats.isFile() && stats.size > 0;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Append attached file paths to the user's message text for the LLM. */
|
|
31
|
+
export function appendAttachedFiles(text, files) {
|
|
32
|
+
if (files.length === 0)
|
|
33
|
+
return text;
|
|
34
|
+
const attachment = `${ATTACHMENT_HEADER}\n${files.join('\n')}`;
|
|
35
|
+
return text ? `${text}\n${attachment}` : attachment;
|
|
36
|
+
}
|
|
37
|
+
/** Parse attached file paths from a message that was serialized with appendAttachedFiles. */
|
|
38
|
+
export function parseAttachedFiles(textContent) {
|
|
39
|
+
const headerWithNewline = `${ATTACHMENT_HEADER}\n`;
|
|
40
|
+
const headerIdx = textContent.indexOf(headerWithNewline);
|
|
41
|
+
if (headerIdx === -1) {
|
|
42
|
+
return { displayText: textContent, attachedFiles: [] };
|
|
43
|
+
}
|
|
44
|
+
const attachedFiles = [];
|
|
45
|
+
const afterHeader = textContent.substring(headerIdx + headerWithNewline.length);
|
|
46
|
+
for (const line of afterHeader.split('\n')) {
|
|
47
|
+
const trimmed = line.trim();
|
|
48
|
+
if (trimmed.length > 0) {
|
|
49
|
+
attachedFiles.push(trimmed);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const displayText = textContent.substring(0, headerIdx).trim();
|
|
56
|
+
return { displayText, attachedFiles };
|
|
57
|
+
}
|
|
58
|
+
/** Format file paths for chat history display with ⎿ glyph and underlined basenames. */
|
|
59
|
+
export function formatAttachmentLabels(filePaths) {
|
|
60
|
+
return filePaths
|
|
61
|
+
.map((fp) => ` ⎿ ${theme.underline(path.basename(fp))}`)
|
|
62
|
+
.join('\n');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Manages file attachment state, display, and stdin interception.
|
|
66
|
+
* InteractiveMode creates one instance and wires its `displayComponent` into the editor container.
|
|
67
|
+
*/
|
|
68
|
+
export class AttachmentManager {
|
|
69
|
+
files = [];
|
|
70
|
+
/** Text component showing attachment previews above the editor. */
|
|
71
|
+
displayComponent;
|
|
72
|
+
onChanged;
|
|
73
|
+
constructor(onChanged) {
|
|
74
|
+
this.displayComponent = new Text('', 1, 0);
|
|
75
|
+
this.onChanged = onChanged;
|
|
76
|
+
}
|
|
77
|
+
/** Validate and add a file. Returns true if added. */
|
|
78
|
+
add(filePath) {
|
|
79
|
+
if (this.files.includes(filePath))
|
|
80
|
+
return true;
|
|
81
|
+
if (!isAttachableFile(filePath))
|
|
82
|
+
return false;
|
|
83
|
+
this.files.push(filePath);
|
|
84
|
+
this.updateDisplay();
|
|
85
|
+
this.onChanged();
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
/** Take all files and clear. Returns the file paths that were attached. */
|
|
89
|
+
take() {
|
|
90
|
+
const taken = this.files;
|
|
91
|
+
this.files = [];
|
|
92
|
+
this.updateDisplay();
|
|
93
|
+
return taken;
|
|
94
|
+
}
|
|
95
|
+
/** Whether any files are currently attached. */
|
|
96
|
+
get hasFiles() {
|
|
97
|
+
return this.files.length > 0;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Intercept file drops on macOS.
|
|
101
|
+
* macOS terminals send dropped files as raw quoted paths on stdin without
|
|
102
|
+
* bracketed paste markers. We monkey-patch the terminal's stdin handler
|
|
103
|
+
* to detect and redirect them to the attachment system.
|
|
104
|
+
*/
|
|
105
|
+
interceptStdinFileDrops(terminal) {
|
|
106
|
+
const originalHandler = terminal.stdinDataHandler;
|
|
107
|
+
if (!originalHandler)
|
|
108
|
+
return;
|
|
109
|
+
terminal.stdinDataHandler = (data) => {
|
|
110
|
+
const trimmed = data.trim();
|
|
111
|
+
if (trimmed.length >= 2) {
|
|
112
|
+
const candidate = stripQuotes(trimmed);
|
|
113
|
+
if (candidate.startsWith('/') && !/[\x00-\x1f]/.test(candidate)) {
|
|
114
|
+
if (this.add(candidate)) {
|
|
115
|
+
return; // Swallow — don't pass to terminal
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
originalHandler(data);
|
|
120
|
+
};
|
|
121
|
+
process.stdin.removeListener('data', originalHandler);
|
|
122
|
+
process.stdin.on('data', terminal.stdinDataHandler);
|
|
123
|
+
}
|
|
124
|
+
updateDisplay() {
|
|
125
|
+
if (this.files.length === 0) {
|
|
126
|
+
this.displayComponent.setText('');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const lines = this.files
|
|
130
|
+
.map((fp) => theme.underline(path.basename(fp)))
|
|
131
|
+
.join('\n');
|
|
132
|
+
this.displayComponent.setText(lines);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=file-attachments.js.map
|