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,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension system for lifecycle events and custom tools.
|
|
3
|
+
*/
|
|
4
|
+
export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions } from './loader.js';
|
|
5
|
+
export { ExtensionRunner } from './runner.js';
|
|
6
|
+
// Type guards
|
|
7
|
+
export { isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult } from './types.js';
|
|
8
|
+
export { wrapRegisteredTool, wrapRegisteredTools, wrapToolWithExtensions, wrapToolsWithExtensions } from './wrapper.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension loader - loads TypeScript extension modules using jiti.
|
|
3
|
+
*
|
|
4
|
+
* Uses @mariozechner/jiti fork with virtualModules support for compiled Bun binaries.
|
|
5
|
+
*/
|
|
6
|
+
import { createJiti } from '@mariozechner/jiti';
|
|
7
|
+
import * as _bundledPiAgentCore from '@mariozechner/pi-agent-core';
|
|
8
|
+
import * as _bundledPiAi from '@mariozechner/pi-ai';
|
|
9
|
+
import * as _bundledPiTui from '../../tui/index.js';
|
|
10
|
+
import * as fs from 'node:fs';
|
|
11
|
+
import { createRequire } from 'node:module';
|
|
12
|
+
import * as os from 'node:os';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
// Static imports of packages that extensions may use.
|
|
16
|
+
// These MUST be static so Bun bundles them into the compiled binary.
|
|
17
|
+
// The virtualModules option then makes them available to extensions.
|
|
18
|
+
import * as _bundledTypebox from '@sinclair/typebox';
|
|
19
|
+
import { getAgentDir, isBunBinary } from '../../config.js';
|
|
20
|
+
// NOTE: This import works because loader.ts exports are NOT re-exported from index.ts,
|
|
21
|
+
// avoiding a circular dependency. Extensions can import from @mariozechner/pi-coding-agent.
|
|
22
|
+
import * as _bundledPiCodingAgent from '../../index.js';
|
|
23
|
+
import { createEventBus } from '../event-bus.js';
|
|
24
|
+
import { execCommand } from '../exec.js';
|
|
25
|
+
/** Modules available to extensions via virtualModules (for compiled Bun binary) */
|
|
26
|
+
const VIRTUAL_MODULES = {
|
|
27
|
+
'@sinclair/typebox': _bundledTypebox,
|
|
28
|
+
'@mariozechner/pi-agent-core': _bundledPiAgentCore,
|
|
29
|
+
'../../tui/index.js': _bundledPiTui,
|
|
30
|
+
'@mariozechner/pi-ai': _bundledPiAi,
|
|
31
|
+
'@mariozechner/pi-coding-agent': _bundledPiCodingAgent
|
|
32
|
+
};
|
|
33
|
+
const require = createRequire(import.meta.url);
|
|
34
|
+
/**
|
|
35
|
+
* Get aliases for jiti (used in Node.js/development mode).
|
|
36
|
+
* In Bun binary mode, virtualModules is used instead.
|
|
37
|
+
*/
|
|
38
|
+
let _aliases = null;
|
|
39
|
+
function getAliases() {
|
|
40
|
+
if (_aliases)
|
|
41
|
+
return _aliases;
|
|
42
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
43
|
+
const packageIndex = path.resolve(__dirname, '../..', 'index.js');
|
|
44
|
+
const typeboxEntry = require.resolve('@sinclair/typebox');
|
|
45
|
+
const typeboxRoot = typeboxEntry.replace(/[\\/]build[\\/]cjs[\\/]index\.js$/, '');
|
|
46
|
+
_aliases = {
|
|
47
|
+
'@mariozechner/pi-coding-agent': packageIndex,
|
|
48
|
+
'@mariozechner/pi-agent-core': require.resolve('@mariozechner/pi-agent-core'),
|
|
49
|
+
'../../tui/index.js': require.resolve('../../tui/index.js'),
|
|
50
|
+
'@mariozechner/pi-ai': require.resolve('@mariozechner/pi-ai'),
|
|
51
|
+
'@sinclair/typebox': typeboxRoot
|
|
52
|
+
};
|
|
53
|
+
return _aliases;
|
|
54
|
+
}
|
|
55
|
+
const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
|
|
56
|
+
function normalizeUnicodeSpaces(str) {
|
|
57
|
+
return str.replace(UNICODE_SPACES, ' ');
|
|
58
|
+
}
|
|
59
|
+
function expandPath(p) {
|
|
60
|
+
const normalized = normalizeUnicodeSpaces(p);
|
|
61
|
+
if (normalized.startsWith('~/')) {
|
|
62
|
+
return path.join(os.homedir(), normalized.slice(2));
|
|
63
|
+
}
|
|
64
|
+
if (normalized.startsWith('~')) {
|
|
65
|
+
return path.join(os.homedir(), normalized.slice(1));
|
|
66
|
+
}
|
|
67
|
+
return normalized;
|
|
68
|
+
}
|
|
69
|
+
function resolvePath(extPath, cwd) {
|
|
70
|
+
const expanded = expandPath(extPath);
|
|
71
|
+
if (path.isAbsolute(expanded)) {
|
|
72
|
+
return expanded;
|
|
73
|
+
}
|
|
74
|
+
return path.resolve(cwd, expanded);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create a runtime with throwing stubs for action methods.
|
|
78
|
+
* Runner.bindCore() replaces these with real implementations.
|
|
79
|
+
*/
|
|
80
|
+
export function createExtensionRuntime() {
|
|
81
|
+
const notInitialized = () => {
|
|
82
|
+
throw new Error('Extension runtime not initialized. Action methods cannot be called during extension loading.');
|
|
83
|
+
};
|
|
84
|
+
const runtime = {
|
|
85
|
+
sendMessage: notInitialized,
|
|
86
|
+
sendUserMessage: notInitialized,
|
|
87
|
+
appendEntry: notInitialized,
|
|
88
|
+
setSessionName: notInitialized,
|
|
89
|
+
getSessionName: notInitialized,
|
|
90
|
+
setLabel: notInitialized,
|
|
91
|
+
getActiveTools: notInitialized,
|
|
92
|
+
getAllTools: notInitialized,
|
|
93
|
+
setActiveTools: notInitialized,
|
|
94
|
+
// registerTool() is valid during extension load; refresh is only needed post-bind.
|
|
95
|
+
refreshTools: () => { },
|
|
96
|
+
getCommands: notInitialized,
|
|
97
|
+
setModel: () => Promise.reject(new Error('Extension runtime not initialized')),
|
|
98
|
+
getThinkingLevel: notInitialized,
|
|
99
|
+
setThinkingLevel: notInitialized,
|
|
100
|
+
flagValues: new Map(),
|
|
101
|
+
pendingProviderRegistrations: [],
|
|
102
|
+
// Pre-bind: queue registrations so bindCore() can flush them once the
|
|
103
|
+
// model registry is available. bindCore() replaces both with direct calls.
|
|
104
|
+
registerProvider: (name, config) => {
|
|
105
|
+
runtime.pendingProviderRegistrations.push({ name, config });
|
|
106
|
+
},
|
|
107
|
+
unregisterProvider: (name) => {
|
|
108
|
+
runtime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
return runtime;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create the ExtensionAPI for an extension.
|
|
115
|
+
* Registration methods write to the extension object.
|
|
116
|
+
* Action methods delegate to the shared runtime.
|
|
117
|
+
*/
|
|
118
|
+
function createExtensionAPI(extension, runtime, cwd, eventBus) {
|
|
119
|
+
const api = {
|
|
120
|
+
// Registration methods - write to extension
|
|
121
|
+
on(event, handler) {
|
|
122
|
+
const list = extension.handlers.get(event) ?? [];
|
|
123
|
+
list.push(handler);
|
|
124
|
+
extension.handlers.set(event, list);
|
|
125
|
+
},
|
|
126
|
+
registerTool(tool) {
|
|
127
|
+
extension.tools.set(tool.name, {
|
|
128
|
+
definition: tool,
|
|
129
|
+
extensionPath: extension.path
|
|
130
|
+
});
|
|
131
|
+
runtime.refreshTools();
|
|
132
|
+
},
|
|
133
|
+
registerCommand(name, options) {
|
|
134
|
+
extension.commands.set(name, { name, ...options });
|
|
135
|
+
},
|
|
136
|
+
registerShortcut(shortcut, options) {
|
|
137
|
+
extension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });
|
|
138
|
+
},
|
|
139
|
+
registerFlag(name, options) {
|
|
140
|
+
extension.flags.set(name, { name, extensionPath: extension.path, ...options });
|
|
141
|
+
if (options.default !== undefined && !runtime.flagValues.has(name)) {
|
|
142
|
+
runtime.flagValues.set(name, options.default);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
registerMessageRenderer(customType, renderer) {
|
|
146
|
+
extension.messageRenderers.set(customType, renderer);
|
|
147
|
+
},
|
|
148
|
+
// Flag access - checks extension registered it, reads from runtime
|
|
149
|
+
getFlag(name) {
|
|
150
|
+
if (!extension.flags.has(name))
|
|
151
|
+
return undefined;
|
|
152
|
+
return runtime.flagValues.get(name);
|
|
153
|
+
},
|
|
154
|
+
// Action methods - delegate to shared runtime
|
|
155
|
+
sendMessage(message, options) {
|
|
156
|
+
runtime.sendMessage(message, options);
|
|
157
|
+
},
|
|
158
|
+
sendUserMessage(content, options) {
|
|
159
|
+
runtime.sendUserMessage(content, options);
|
|
160
|
+
},
|
|
161
|
+
appendEntry(customType, data) {
|
|
162
|
+
runtime.appendEntry(customType, data);
|
|
163
|
+
},
|
|
164
|
+
setSessionName(name) {
|
|
165
|
+
runtime.setSessionName(name);
|
|
166
|
+
},
|
|
167
|
+
getSessionName() {
|
|
168
|
+
return runtime.getSessionName();
|
|
169
|
+
},
|
|
170
|
+
setLabel(entryId, label) {
|
|
171
|
+
runtime.setLabel(entryId, label);
|
|
172
|
+
},
|
|
173
|
+
exec(command, args, options) {
|
|
174
|
+
return execCommand(command, args, options?.cwd ?? cwd, options);
|
|
175
|
+
},
|
|
176
|
+
getActiveTools() {
|
|
177
|
+
return runtime.getActiveTools();
|
|
178
|
+
},
|
|
179
|
+
getAllTools() {
|
|
180
|
+
return runtime.getAllTools();
|
|
181
|
+
},
|
|
182
|
+
setActiveTools(toolNames) {
|
|
183
|
+
runtime.setActiveTools(toolNames);
|
|
184
|
+
},
|
|
185
|
+
getCommands() {
|
|
186
|
+
return runtime.getCommands();
|
|
187
|
+
},
|
|
188
|
+
setModel(model) {
|
|
189
|
+
return runtime.setModel(model);
|
|
190
|
+
},
|
|
191
|
+
getThinkingLevel() {
|
|
192
|
+
return runtime.getThinkingLevel();
|
|
193
|
+
},
|
|
194
|
+
setThinkingLevel(level) {
|
|
195
|
+
runtime.setThinkingLevel(level);
|
|
196
|
+
},
|
|
197
|
+
registerProvider(name, config) {
|
|
198
|
+
runtime.registerProvider(name, config);
|
|
199
|
+
},
|
|
200
|
+
unregisterProvider(name) {
|
|
201
|
+
runtime.unregisterProvider(name);
|
|
202
|
+
},
|
|
203
|
+
events: eventBus
|
|
204
|
+
};
|
|
205
|
+
return api;
|
|
206
|
+
}
|
|
207
|
+
async function loadExtensionModule(extensionPath) {
|
|
208
|
+
const jiti = createJiti(import.meta.url, {
|
|
209
|
+
moduleCache: false,
|
|
210
|
+
// In Bun binary: use virtualModules for bundled packages (no filesystem resolution)
|
|
211
|
+
// Also disable tryNative so jiti handles ALL imports (not just the entry point)
|
|
212
|
+
// In Node.js/dev: use aliases to resolve to node_modules paths
|
|
213
|
+
...(isBunBinary
|
|
214
|
+
? { virtualModules: VIRTUAL_MODULES, tryNative: false }
|
|
215
|
+
: { alias: getAliases() })
|
|
216
|
+
});
|
|
217
|
+
// eslint-disable-next-line @next/next/no-assign-module-variable
|
|
218
|
+
const module = await jiti.import(extensionPath, { default: true });
|
|
219
|
+
const factory = module;
|
|
220
|
+
return typeof factory !== 'function' ? undefined : factory;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create an Extension object with empty collections.
|
|
224
|
+
*/
|
|
225
|
+
function createExtension(extensionPath, resolvedPath) {
|
|
226
|
+
return {
|
|
227
|
+
path: extensionPath,
|
|
228
|
+
resolvedPath,
|
|
229
|
+
handlers: new Map(),
|
|
230
|
+
tools: new Map(),
|
|
231
|
+
messageRenderers: new Map(),
|
|
232
|
+
commands: new Map(),
|
|
233
|
+
flags: new Map(),
|
|
234
|
+
shortcuts: new Map()
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
async function loadExtension(extensionPath, cwd, eventBus, runtime) {
|
|
238
|
+
const resolvedPath = resolvePath(extensionPath, cwd);
|
|
239
|
+
try {
|
|
240
|
+
const factory = await loadExtensionModule(resolvedPath);
|
|
241
|
+
if (!factory) {
|
|
242
|
+
return {
|
|
243
|
+
extension: null,
|
|
244
|
+
error: `Extension does not export a valid factory function: ${extensionPath}`
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
const extension = createExtension(extensionPath, resolvedPath);
|
|
248
|
+
const api = createExtensionAPI(extension, runtime, cwd, eventBus);
|
|
249
|
+
await factory(api);
|
|
250
|
+
return { extension, error: null };
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
254
|
+
return { extension: null, error: `Failed to load extension: ${message}` };
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Create an Extension from an inline factory function.
|
|
259
|
+
*/
|
|
260
|
+
export async function loadExtensionFromFactory(factory, cwd, eventBus, runtime, extensionPath = '<inline>') {
|
|
261
|
+
const extension = createExtension(extensionPath, extensionPath);
|
|
262
|
+
const api = createExtensionAPI(extension, runtime, cwd, eventBus);
|
|
263
|
+
await factory(api);
|
|
264
|
+
return extension;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Load extensions from paths.
|
|
268
|
+
*/
|
|
269
|
+
export async function loadExtensions(paths, cwd, eventBus) {
|
|
270
|
+
const extensions = [];
|
|
271
|
+
const errors = [];
|
|
272
|
+
const resolvedEventBus = eventBus ?? createEventBus();
|
|
273
|
+
const runtime = createExtensionRuntime();
|
|
274
|
+
for (const extPath of paths) {
|
|
275
|
+
const { extension, error } = await loadExtension(extPath, cwd, resolvedEventBus, runtime);
|
|
276
|
+
if (error) {
|
|
277
|
+
errors.push({ path: extPath, error });
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (extension) {
|
|
281
|
+
extensions.push(extension);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
extensions,
|
|
286
|
+
errors,
|
|
287
|
+
runtime
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
function readPiManifest(packageJsonPath) {
|
|
291
|
+
try {
|
|
292
|
+
const content = fs.readFileSync(packageJsonPath, 'utf-8');
|
|
293
|
+
const pkg = JSON.parse(content);
|
|
294
|
+
// SHORTCUT PATCH: renamed manifest key from "pi" to "shortcut"
|
|
295
|
+
if (pkg.shortcut && typeof pkg.shortcut === 'object') {
|
|
296
|
+
return pkg.shortcut;
|
|
297
|
+
}
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
function isExtensionFile(name) {
|
|
305
|
+
return name.endsWith('.ts') || name.endsWith('.js');
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Resolve extension entry points from a directory.
|
|
309
|
+
*
|
|
310
|
+
* Checks for:
|
|
311
|
+
* 1. package.json with "pi.extensions" field -> returns declared paths
|
|
312
|
+
* 2. index.ts or index.js -> returns the index file
|
|
313
|
+
*
|
|
314
|
+
* Returns resolved paths or null if no entry points found.
|
|
315
|
+
*/
|
|
316
|
+
function resolveExtensionEntries(dir) {
|
|
317
|
+
// Check for package.json with "pi" field first
|
|
318
|
+
const packageJsonPath = path.join(dir, 'package.json');
|
|
319
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
320
|
+
const manifest = readPiManifest(packageJsonPath);
|
|
321
|
+
if (manifest?.extensions?.length) {
|
|
322
|
+
const entries = [];
|
|
323
|
+
for (const extPath of manifest.extensions) {
|
|
324
|
+
const resolvedExtPath = path.resolve(dir, extPath);
|
|
325
|
+
if (fs.existsSync(resolvedExtPath)) {
|
|
326
|
+
entries.push(resolvedExtPath);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (entries.length > 0) {
|
|
330
|
+
return entries;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Check for index.ts or index.js
|
|
335
|
+
const indexTs = path.join(dir, 'index.ts');
|
|
336
|
+
const indexJs = path.join(dir, 'index.js');
|
|
337
|
+
if (fs.existsSync(indexTs)) {
|
|
338
|
+
return [indexTs];
|
|
339
|
+
}
|
|
340
|
+
if (fs.existsSync(indexJs)) {
|
|
341
|
+
return [indexJs];
|
|
342
|
+
}
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Discover extensions in a directory.
|
|
347
|
+
*
|
|
348
|
+
* Discovery rules:
|
|
349
|
+
* 1. Direct files: `extensions/*.ts` or `*.js` → load
|
|
350
|
+
* 2. Subdirectory with index: `extensions/* /index.ts` or `index.js` → load
|
|
351
|
+
* 3. Subdirectory with package.json: `extensions/* /package.json` with "pi" field → load what it declares
|
|
352
|
+
*
|
|
353
|
+
* No recursion beyond one level. Complex packages must use package.json manifest.
|
|
354
|
+
*/
|
|
355
|
+
function discoverExtensionsInDir(dir) {
|
|
356
|
+
if (!fs.existsSync(dir)) {
|
|
357
|
+
return [];
|
|
358
|
+
}
|
|
359
|
+
const discovered = [];
|
|
360
|
+
try {
|
|
361
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
362
|
+
for (const entry of entries) {
|
|
363
|
+
const entryPath = path.join(dir, entry.name);
|
|
364
|
+
// 1. Direct files: *.ts or *.js
|
|
365
|
+
if ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {
|
|
366
|
+
discovered.push(entryPath);
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
// 2 & 3. Subdirectories
|
|
370
|
+
if (entry.isDirectory() || entry.isSymbolicLink()) {
|
|
371
|
+
const entries = resolveExtensionEntries(entryPath);
|
|
372
|
+
if (entries) {
|
|
373
|
+
discovered.push(...entries);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
return [];
|
|
380
|
+
}
|
|
381
|
+
return discovered;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Discover and load extensions from standard locations.
|
|
385
|
+
*/
|
|
386
|
+
export async function discoverAndLoadExtensions(configuredPaths, cwd, agentDir = getAgentDir(), eventBus) {
|
|
387
|
+
const allPaths = [];
|
|
388
|
+
const seen = new Set();
|
|
389
|
+
const addPaths = (paths) => {
|
|
390
|
+
for (const p of paths) {
|
|
391
|
+
const resolved = path.resolve(p);
|
|
392
|
+
if (!seen.has(resolved)) {
|
|
393
|
+
seen.add(resolved);
|
|
394
|
+
allPaths.push(p);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
// 1. Project-local extensions: cwd/.pi/extensions/
|
|
399
|
+
const localExtDir = path.join(cwd, '.pi', 'extensions');
|
|
400
|
+
addPaths(discoverExtensionsInDir(localExtDir));
|
|
401
|
+
// 2. Global extensions: agentDir/extensions/
|
|
402
|
+
const globalExtDir = path.join(agentDir, 'extensions');
|
|
403
|
+
addPaths(discoverExtensionsInDir(globalExtDir));
|
|
404
|
+
// 3. Explicitly configured paths
|
|
405
|
+
for (const p of configuredPaths) {
|
|
406
|
+
const resolved = resolvePath(p, cwd);
|
|
407
|
+
if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {
|
|
408
|
+
// Check for package.json with pi manifest or index.ts
|
|
409
|
+
const entries = resolveExtensionEntries(resolved);
|
|
410
|
+
if (entries) {
|
|
411
|
+
addPaths(entries);
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
// No explicit entries - discover individual files in directory
|
|
415
|
+
addPaths(discoverExtensionsInDir(resolved));
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
addPaths([resolved]);
|
|
419
|
+
}
|
|
420
|
+
return loadExtensions(allPaths, cwd, eventBus);
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=loader.js.map
|