@bastani/atomic 0.9.11-alpha.2 → 0.9.11-alpha.4
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/CHANGELOG.md +42 -0
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/runs/background/notify.ts +3 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +5 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -1
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +5 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +34 -0
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +20 -0
- package/dist/builtin/workflows/builtin/goal-prompts.ts +8 -3
- package/dist/builtin/workflows/builtin/goal.ts +4 -4
- package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +1 -1
- package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +3 -1
- package/dist/builtin/workflows/builtin/ralph-runner.ts +2 -0
- package/dist/builtin/workflows/builtin/ralph.ts +4 -4
- package/dist/builtin/workflows/builtin/shared-prompts.ts +16 -0
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/authoring/workflow.ts +1 -0
- package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +27 -1
- package/dist/builtin/workflows/src/durable/factory.ts +29 -3
- package/dist/builtin/workflows/src/durable/index.ts +2 -0
- package/dist/builtin/workflows/src/engine/run-durable-admission.ts +50 -0
- package/dist/builtin/workflows/src/engine/run.ts +12 -17
- package/dist/builtin/workflows/src/extension/extension-factory.ts +16 -1
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +16 -2
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +71724 -0
- package/dist/builtin/workflows/src/extension/runtime.ts +5 -3
- package/dist/builtin/workflows/src/extension/ui-surface.ts +4 -0
- package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +4 -1
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +3 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +1 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +1 -0
- package/dist/builtin/workflows/src/shared/types.ts +7 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +1 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +1 -0
- package/dist/builtin/workflows/src/tui/host-input-form.ts +1 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +6 -8
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +2 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +4 -0
- package/dist/cli/args.d.ts +8 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +18 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +4 -2
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +3 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +50 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/config-command-parser.d.ts +9 -0
- package/dist/config-command-parser.d.ts.map +1 -0
- package/dist/config-command-parser.js +22 -0
- package/dist/config-command-parser.js.map +1 -0
- package/dist/config-self-update.d.ts +6 -2
- package/dist/config-self-update.d.ts.map +1 -1
- package/dist/config-self-update.js +17 -10
- package/dist/config-self-update.js.map +1 -1
- package/dist/config.d.ts +3 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-export.d.ts.map +1 -1
- package/dist/core/agent-session-export.js +32 -25
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +9 -3
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +5 -0
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +8 -5
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tree.d.ts.map +1 -1
- package/dist/core/agent-session-tree.js +3 -1
- package/dist/core/agent-session-tree.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +5 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/auth-storage.d.ts +6 -2
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +5 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/cache-stats.d.ts +25 -0
- package/dist/core/cache-stats.d.ts.map +1 -0
- package/dist/core/cache-stats.js +68 -0
- package/dist/core/cache-stats.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +2 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +10 -0
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +8 -2
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/event-types.d.ts +2 -2
- package/dist/core/extensions/event-types.d.ts.map +1 -1
- package/dist/core/extensions/event-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +13 -2
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +1 -0
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
- package/dist/core/extensions/loader-runtime.js +15 -7
- package/dist/core/extensions/loader-runtime.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +5 -0
- package/dist/core/extensions/message-types.d.ts.map +1 -1
- package/dist/core/extensions/message-types.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +46 -0
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/extensions/runner-registries.d.ts +2 -1
- package/dist/core/extensions/runner-registries.d.ts.map +1 -1
- package/dist/core/extensions/runner-registries.js +8 -0
- package/dist/core/extensions/runner-registries.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -2
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +35 -13
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +8 -2
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +4 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts +1 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +16 -2
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/keybindings.d.ts +6 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +3 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry-auth.d.ts +2 -0
- package/dist/core/model-registry-auth.d.ts.map +1 -1
- package/dist/core/model-registry-auth.js +18 -1
- package/dist/core/model-registry-auth.js.map +1 -1
- package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
- package/dist/core/model-registry-custom-loader.js +14 -2
- package/dist/core/model-registry-custom-loader.js.map +1 -1
- package/dist/core/model-registry-dynamic.js +2 -2
- package/dist/core/model-registry-dynamic.js.map +1 -1
- package/dist/core/model-registry-loader.d.ts.map +1 -1
- package/dist/core/model-registry-loader.js +2 -1
- package/dist/core/model-registry-loader.js.map +1 -1
- package/dist/core/model-registry-schemas.d.ts +17 -0
- package/dist/core/model-registry-schemas.d.ts.map +1 -1
- package/dist/core/model-registry-schemas.js +2 -0
- package/dist/core/model-registry-schemas.js.map +1 -1
- package/dist/core/model-registry-types.d.ts +10 -1
- package/dist/core/model-registry-types.d.ts.map +1 -1
- package/dist/core/model-registry-types.js.map +1 -1
- package/dist/core/model-registry.d.ts +26 -36
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +72 -67
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-defaults.d.ts.map +1 -1
- package/dist/core/model-resolver-defaults.js +3 -0
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-runtime.d.ts +52 -0
- package/dist/core/model-runtime.d.ts.map +1 -0
- package/dist/core/model-runtime.js +120 -0
- package/dist/core/model-runtime.js.map +1 -0
- package/dist/core/oauth-provider-bridge.d.ts +3 -1
- package/dist/core/oauth-provider-bridge.d.ts.map +1 -1
- package/dist/core/oauth-provider-bridge.js +6 -4
- package/dist/core/oauth-provider-bridge.js.map +1 -1
- package/dist/core/package-manager-resolver.js +22 -11
- package/dist/core/package-manager-resolver.js.map +1 -1
- package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
- package/dist/core/package-manager-resource-collector.js +8 -2
- package/dist/core/package-manager-resource-collector.js.map +1 -1
- package/dist/core/package-manager-resource-patterns.d.ts +1 -0
- package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
- package/dist/core/package-manager-resource-patterns.js +15 -0
- package/dist/core/package-manager-resource-patterns.js.map +1 -1
- package/dist/core/package-manager-source.d.ts.map +1 -1
- package/dist/core/package-manager-source.js +15 -8
- package/dist/core/package-manager-source.js.map +1 -1
- package/dist/core/package-manager-types.d.ts +1 -0
- package/dist/core/package-manager-types.d.ts.map +1 -1
- package/dist/core/package-manager-types.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +4 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-extensions.d.ts.map +1 -1
- package/dist/core/resource-loader-extensions.js +5 -2
- package/dist/core/resource-loader-extensions.js.map +1 -1
- package/dist/core/resource-loader-helpers.d.ts.map +1 -1
- package/dist/core/resource-loader-helpers.js +1 -0
- package/dist/core/resource-loader-helpers.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +2 -2
- package/dist/core/resource-loader-internals.d.ts.map +1 -1
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +3 -3
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +1 -1
- package/dist/core/sdk-exports.d.ts.map +1 -1
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/sdk-types.d.ts +3 -0
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.js +6 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +1 -1
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +2 -2
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +2 -2
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js +2 -1
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-history.d.ts +5 -0
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +33 -0
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +4 -2
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +7 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +35 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-resource-accessors.d.ts +3 -0
- package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-resource-accessors.js +16 -0
- package/dist/core/settings-manager-resource-accessors.js.map +1 -1
- package/dist/core/settings-types.d.ts +8 -2
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.d.ts +1 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/usage-totals.d.ts +18 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +40 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +5 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/llama/client.d.ts +61 -0
- package/dist/extensions/llama/client.d.ts.map +1 -0
- package/dist/extensions/llama/client.js +300 -0
- package/dist/extensions/llama/client.js.map +1 -0
- package/dist/extensions/llama/huggingface-ui.d.ts +33 -0
- package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -0
- package/dist/extensions/llama/huggingface-ui.js +166 -0
- package/dist/extensions/llama/huggingface-ui.js.map +1 -0
- package/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/llama/huggingface.d.ts.map +1 -0
- package/dist/extensions/llama/huggingface.js +139 -0
- package/dist/extensions/llama/huggingface.js.map +1 -0
- package/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/llama/index.d.ts.map +1 -0
- package/dist/extensions/llama/index.js +208 -0
- package/dist/extensions/llama/index.js.map +1 -0
- package/dist/extensions/llama/provider.d.ts +11 -0
- package/dist/extensions/llama/provider.d.ts.map +1 -0
- package/dist/extensions/llama/provider.js +93 -0
- package/dist/extensions/llama/provider.js.map +1 -0
- package/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/llama/ui.d.ts.map +1 -0
- package/dist/extensions/llama/ui.js +237 -0
- package/dist/extensions/llama/ui.js.map +1 -0
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/main-first-time-setup.d.ts +6 -0
- package/dist/main-first-time-setup.d.ts.map +1 -0
- package/dist/main-first-time-setup.js +10 -0
- package/dist/main-first-time-setup.js.map +1 -0
- package/dist/main-types.d.ts +2 -2
- package/dist/main-types.d.ts.map +1 -1
- package/dist/main-types.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -7
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
- package/dist/modes/interactive/chat-input-actions.js +14 -2
- package/dist/modes/interactive/chat-input-actions.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +5 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.d.ts +6 -6
- package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js +64 -125
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-project-scope.d.ts +4 -0
- package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector-project-scope.js +61 -0
- package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +8 -5
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +46 -22
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +16 -0
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-entry.js +45 -0
- package/dist/modes/interactive/components/custom-entry.js.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts +24 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.js +69 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +7 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +55 -27
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form.d.ts +2 -0
- package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
- package/dist/modes/interactive/components/host-input-form.js +6 -3
- package/dist/modes/interactive/components/host-input-form.js.map +1 -1
- package/dist/modes/interactive/components/idle-status.d.ts +8 -0
- package/dist/modes/interactive/components/idle-status.d.ts.map +1 -0
- package/dist/modes/interactive/components/idle-status.js +13 -0
- package/dist/modes/interactive/components/idle-status.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +3 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +3 -0
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +5 -5
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +14 -6
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +10 -6
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +6 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +14 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +21 -0
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +17 -8
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
- package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +88 -40
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +6 -0
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +4 -0
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-global-clear.d.ts +10 -2
- package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-global-clear.js +3 -1
- package/dist/modes/interactive/interactive-global-clear.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +6 -4
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.d.ts +2 -1
- package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.js +6 -10
- package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +11 -2
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +69 -12
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +10 -0
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +3 -0
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +14 -0
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/login-provider-options.d.ts +21 -0
- package/dist/modes/interactive/login-provider-options.d.ts.map +1 -0
- package/dist/modes/interactive/login-provider-options.js +51 -0
- package/dist/modes/interactive/login-provider-options.js.map +1 -0
- package/dist/modes/interactive-engine/engine-input-form.d.ts +1 -1
- package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-input-form.js +10 -2
- package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
- package/dist/modes/interactive-engine/engine-monitor.d.ts +8 -1
- package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-monitor.js +13 -15
- package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
- package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -1
- package/dist/modes/interactive-engine/input-form-host.js +7 -2
- package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +5 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +9 -1
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts +2 -0
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js +33 -0
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +3 -1
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js +15 -0
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +3 -0
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +1 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts +5 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +62 -2
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts +3 -1
- package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-extension-ui.js +7 -2
- package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.js +1 -0
- package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +1 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.d.ts +1 -0
- package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +66 -43
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +31 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts +3 -3
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +55 -51
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/rpc-entry.js +6 -2
- package/dist/rpc-entry.js.map +1 -1
- package/dist/self-update-plan.d.ts +12 -0
- package/dist/self-update-plan.d.ts.map +1 -0
- package/dist/self-update-plan.js +42 -0
- package/dist/self-update-plan.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +1 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts +3 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +10 -0
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/compile-cache.d.ts +8 -0
- package/dist/utils/compile-cache.d.ts.map +1 -0
- package/dist/utils/compile-cache.js +31 -0
- package/dist/utils/compile-cache.js.map +1 -0
- package/dist/utils/version-check.d.ts +1 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +3 -3
- package/dist/utils/version-check.js.map +1 -1
- package/docs/docs.json +2 -1
- package/docs/extensions.md +56 -4
- package/docs/keybindings.md +3 -0
- package/docs/llama-cpp.md +70 -0
- package/docs/models.md +8 -3
- package/docs/packages.md +4 -2
- package/docs/providers.md +37 -3
- package/docs/sdk.md +18 -0
- package/docs/settings.md +19 -3
- package/docs/tui.md +2 -0
- package/docs/usage.md +7 -0
- package/docs/workflows.md +34 -11
- package/npm-shrinkwrap.json +23 -23
- package/package.json +2 -2
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { lazyStream } from "@earendil-works/pi-ai";
|
|
2
|
+
import { getAgentConfigPaths } from "../config.js";
|
|
3
|
+
import { AuthStorage } from "./auth-storage.js";
|
|
4
|
+
import { ModelRegistry } from "./model-registry.js";
|
|
5
|
+
function mergeHeaders(base, override) {
|
|
6
|
+
if (!base && !override)
|
|
7
|
+
return undefined;
|
|
8
|
+
const merged = { ...base };
|
|
9
|
+
for (const [name, value] of Object.entries(override ?? {})) {
|
|
10
|
+
for (const existing of Object.keys(merged)) {
|
|
11
|
+
if (existing.toLowerCase() === name.toLowerCase())
|
|
12
|
+
delete merged[existing];
|
|
13
|
+
}
|
|
14
|
+
merged[name] = value;
|
|
15
|
+
}
|
|
16
|
+
return merged;
|
|
17
|
+
}
|
|
18
|
+
/** Canonical model/auth facade for SDK consumers. */
|
|
19
|
+
export class ModelRuntime {
|
|
20
|
+
constructor(modelRegistry, authStorage = modelRegistry.authStorage) {
|
|
21
|
+
this.modelRegistry = modelRegistry;
|
|
22
|
+
this.authStorage = authStorage;
|
|
23
|
+
}
|
|
24
|
+
static async create(options = {}) {
|
|
25
|
+
const authStorage = options.authStorage ?? AuthStorage.create(options.authPath);
|
|
26
|
+
const paths = options.modelsPath === null ? [] : (options.modelsPath ?? getAgentConfigPaths("models.json"));
|
|
27
|
+
const modelRegistry = options.modelRegistry ?? (Array.isArray(paths) && paths.length === 0
|
|
28
|
+
? ModelRegistry.inMemory(authStorage)
|
|
29
|
+
: ModelRegistry.create(authStorage, paths));
|
|
30
|
+
const runtime = new ModelRuntime(modelRegistry, authStorage);
|
|
31
|
+
await modelRegistry.refresh({
|
|
32
|
+
allowNetwork: options.allowModelNetwork ?? false,
|
|
33
|
+
timeoutMs: options.modelRefreshTimeoutMs,
|
|
34
|
+
});
|
|
35
|
+
return runtime;
|
|
36
|
+
}
|
|
37
|
+
getProviders() { return this.modelRegistry.getProviders(); }
|
|
38
|
+
getProvider(providerId) { return this.modelRegistry.getProvider(providerId); }
|
|
39
|
+
getModels(providerId) {
|
|
40
|
+
return providerId ? this.modelRegistry.getAll().filter((model) => model.provider === providerId) : this.modelRegistry.getAll();
|
|
41
|
+
}
|
|
42
|
+
getModel(providerId, modelId) { return this.modelRegistry.find(providerId, modelId); }
|
|
43
|
+
checkAuth(providerId) { return this.modelRegistry.checkAuth(providerId); }
|
|
44
|
+
async getAvailable(providerId) {
|
|
45
|
+
const models = this.modelRegistry.getAvailable();
|
|
46
|
+
return providerId ? models.filter((model) => model.provider === providerId) : models;
|
|
47
|
+
}
|
|
48
|
+
getAvailableSnapshot() { return this.modelRegistry.getAvailable(); }
|
|
49
|
+
getError() {
|
|
50
|
+
const errors = [this.modelRegistry.getError(), this.authStorage.getLoadError()?.message].filter((value) => Boolean(value));
|
|
51
|
+
return errors.length ? errors.join("\n\n") : undefined;
|
|
52
|
+
}
|
|
53
|
+
getAuth(providerOrModel, overrides) {
|
|
54
|
+
return typeof providerOrModel === "string"
|
|
55
|
+
? this.modelRegistry.getAuth(providerOrModel, overrides)
|
|
56
|
+
: this.modelRegistry.getAuth(providerOrModel, overrides);
|
|
57
|
+
}
|
|
58
|
+
getProviderAuthStatus(providerId) { return this.modelRegistry.getProviderAuthStatus(providerId); }
|
|
59
|
+
isUsingOAuth(providerId) { return this.authStorage.get(providerId)?.type === "oauth"; }
|
|
60
|
+
hasConfiguredAuth(providerId) { return this.modelRegistry.getProviderAuthStatus(providerId).configured; }
|
|
61
|
+
async setRuntimeApiKey(providerId, apiKey, options = {}) {
|
|
62
|
+
this.authStorage.setRuntimeApiKey(providerId, apiKey);
|
|
63
|
+
await this.refresh(options);
|
|
64
|
+
}
|
|
65
|
+
async removeRuntimeApiKey(providerId) {
|
|
66
|
+
this.authStorage.removeRuntimeApiKey(providerId);
|
|
67
|
+
await this.refresh({ allowNetwork: false });
|
|
68
|
+
}
|
|
69
|
+
async listCredentials() { return this.authStorage.asCredentialStore().list(); }
|
|
70
|
+
async prepare(model, options) {
|
|
71
|
+
const provider = this.getProvider(model.provider);
|
|
72
|
+
if (!provider)
|
|
73
|
+
throw new Error(`Unknown provider: ${model.provider}`);
|
|
74
|
+
const auth = await this.modelRegistry.getApiKeyAndHeaders(model);
|
|
75
|
+
if (!auth.ok)
|
|
76
|
+
throw new Error(auth.error);
|
|
77
|
+
const { transformHeaders, ...providerOptions } = options ?? {};
|
|
78
|
+
let headers = mergeHeaders(auth.headers, providerOptions.headers);
|
|
79
|
+
if (transformHeaders)
|
|
80
|
+
headers = await transformHeaders(headers ?? {});
|
|
81
|
+
return {
|
|
82
|
+
provider,
|
|
83
|
+
model: auth.baseUrl ? { ...model, baseUrl: auth.baseUrl } : model,
|
|
84
|
+
options: { ...providerOptions, apiKey: providerOptions.apiKey ?? auth.apiKey, headers },
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
stream(model, context, options) {
|
|
88
|
+
return lazyStream(model, async () => {
|
|
89
|
+
const prepared = await this.prepare(model, options);
|
|
90
|
+
return prepared.provider.stream(prepared.model, context, prepared.options);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
complete(model, context, options) {
|
|
94
|
+
return this.stream(model, context, options).result();
|
|
95
|
+
}
|
|
96
|
+
streamSimple(model, context, options) {
|
|
97
|
+
return lazyStream(model, async () => {
|
|
98
|
+
const prepared = await this.prepare(model, options);
|
|
99
|
+
return prepared.provider.streamSimple(prepared.model, context, prepared.options);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
completeSimple(model, context, options) {
|
|
103
|
+
return this.streamSimple(model, context, options).result();
|
|
104
|
+
}
|
|
105
|
+
async login(providerId, type, interaction) {
|
|
106
|
+
const credential = await this.modelRegistry.login(providerId, type, interaction);
|
|
107
|
+
this.authStorage.reload();
|
|
108
|
+
await this.refresh({ allowNetwork: false });
|
|
109
|
+
return credential;
|
|
110
|
+
}
|
|
111
|
+
async logout(providerId) {
|
|
112
|
+
await this.modelRegistry.logoutProvider(providerId);
|
|
113
|
+
await this.refresh({ allowNetwork: false });
|
|
114
|
+
}
|
|
115
|
+
async reloadConfig() { await this.refresh({ allowNetwork: false }); }
|
|
116
|
+
refresh(options = {}) { return this.modelRegistry.refresh(options); }
|
|
117
|
+
registerProvider(provider) { this.modelRegistry.registerProvider(provider); }
|
|
118
|
+
unregisterProvider(providerId) { this.modelRegistry.unregisterProvider(providerId); }
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=model-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-runtime.js","sourceRoot":"","sources":["../../src/core/model-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ApiStreamOptions,\n AssistantMessage,\n AssistantMessageEventStream,\n AuthInteraction,\n AuthResult,\n AuthType,\n Context,\n Credential,\n CredentialInfo,\n Models,\n ModelsApiStreamOptions,\n ModelsRefreshOptions,\n ModelsRefreshResult,\n ModelsSimpleStreamOptions,\n Provider,\n ProviderHeaders,\n StreamOptions,\n} from \"@earendil-works/pi-ai\";\nimport { lazyStream } from \"@earendil-works/pi-ai\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport { getAgentConfigPaths } from \"../config.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport type { AuthStatus } from \"./auth-storage.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\n\nexport interface CreateModelRuntimeOptions {\n authStorage?: AuthStorage;\n authPath?: string | string[];\n modelRegistry?: ModelRegistry;\n modelsPath?: string | string[] | null;\n allowModelNetwork?: boolean;\n modelRefreshTimeoutMs?: number;\n}\n\nexport interface ModelRuntimeAuthOverrides {\n apiKey?: string;\n env?: Record<string, string>;\n}\n\nfunction mergeHeaders(base?: ProviderHeaders, override?: ProviderHeaders): ProviderHeaders | undefined {\n if (!base && !override) return undefined;\n const merged = { ...base };\n for (const [name, value] of Object.entries(override ?? {})) {\n for (const existing of Object.keys(merged)) {\n if (existing.toLowerCase() === name.toLowerCase()) delete merged[existing];\n }\n merged[name] = value;\n }\n return merged;\n}\n\n/** Canonical model/auth facade for SDK consumers. */\nexport class ModelRuntime implements Models {\n readonly modelRegistry: ModelRegistry;\n readonly authStorage: AuthStorage;\n\n constructor(modelRegistry: ModelRegistry, authStorage: AuthStorage = modelRegistry.authStorage) {\n this.modelRegistry = modelRegistry;\n this.authStorage = authStorage;\n }\n\n static async create(options: CreateModelRuntimeOptions = {}): Promise<ModelRuntime> {\n const authStorage = options.authStorage ?? AuthStorage.create(options.authPath);\n const paths = options.modelsPath === null ? [] : (options.modelsPath ?? getAgentConfigPaths(\"models.json\"));\n const modelRegistry = options.modelRegistry ?? (\n Array.isArray(paths) && paths.length === 0\n ? ModelRegistry.inMemory(authStorage)\n : ModelRegistry.create(authStorage, paths)\n );\n const runtime = new ModelRuntime(modelRegistry, authStorage);\n await modelRegistry.refresh({\n allowNetwork: options.allowModelNetwork ?? false,\n timeoutMs: options.modelRefreshTimeoutMs,\n });\n return runtime;\n }\n\n getProviders(): readonly Provider[] { return this.modelRegistry.getProviders(); }\n getProvider(providerId: string): Provider | undefined { return this.modelRegistry.getProvider(providerId); }\n getModels(providerId?: string): readonly Model<Api>[] {\n return providerId ? this.modelRegistry.getAll().filter((model) => model.provider === providerId) : this.modelRegistry.getAll();\n }\n getModel(providerId: string, modelId: string): Model<Api> | undefined { return this.modelRegistry.find(providerId, modelId); }\n checkAuth(providerId: string) { return this.modelRegistry.checkAuth(providerId); }\n async getAvailable(providerId?: string): Promise<readonly Model<Api>[]> {\n const models = this.modelRegistry.getAvailable();\n return providerId ? models.filter((model) => model.provider === providerId) : models;\n }\n getAvailableSnapshot(): readonly Model<Api>[] { return this.modelRegistry.getAvailable(); }\n getError(): string | undefined {\n const errors = [this.modelRegistry.getError(), this.authStorage.getLoadError()?.message].filter((value): value is string => Boolean(value));\n return errors.length ? errors.join(\"\\n\\n\") : undefined;\n }\n getAuth(providerId: string, overrides?: ModelRuntimeAuthOverrides): Promise<AuthResult | undefined>;\n getAuth(model: Model<Api>, overrides?: ModelRuntimeAuthOverrides): Promise<AuthResult | undefined>;\n getAuth(providerOrModel: string | Model<Api>, overrides?: ModelRuntimeAuthOverrides): Promise<AuthResult | undefined> {\n return typeof providerOrModel === \"string\"\n ? this.modelRegistry.getAuth(providerOrModel, overrides)\n : this.modelRegistry.getAuth(providerOrModel, overrides);\n }\n getProviderAuthStatus(providerId: string): AuthStatus { return this.modelRegistry.getProviderAuthStatus(providerId); }\n isUsingOAuth(providerId: string): boolean { return this.authStorage.get(providerId)?.type === \"oauth\"; }\n hasConfiguredAuth(providerId: string): boolean { return this.modelRegistry.getProviderAuthStatus(providerId).configured; }\n async setRuntimeApiKey(providerId: string, apiKey: string, options: ModelsRefreshOptions = {}): Promise<void> {\n this.authStorage.setRuntimeApiKey(providerId, apiKey);\n await this.refresh(options);\n }\n async removeRuntimeApiKey(providerId: string): Promise<void> {\n this.authStorage.removeRuntimeApiKey(providerId);\n await this.refresh({ allowNetwork: false });\n }\n async listCredentials(): Promise<readonly CredentialInfo[]> { return this.authStorage.asCredentialStore().list(); }\n\n private async prepare(\n model: Model<Api>,\n options: (StreamOptions & { transformHeaders?: (headers: ProviderHeaders) => ProviderHeaders | Promise<ProviderHeaders> }) | undefined,\n ) {\n const provider = this.getProvider(model.provider);\n if (!provider) throw new Error(`Unknown provider: ${model.provider}`);\n const auth = await this.modelRegistry.getApiKeyAndHeaders(model);\n if (!auth.ok) throw new Error(auth.error);\n const { transformHeaders, ...providerOptions } = options ?? {};\n let headers = mergeHeaders(auth.headers, providerOptions.headers);\n if (transformHeaders) headers = await transformHeaders(headers ?? {});\n return {\n provider,\n model: auth.baseUrl ? { ...model, baseUrl: auth.baseUrl } : model,\n options: { ...providerOptions, apiKey: providerOptions.apiKey ?? auth.apiKey, headers },\n };\n }\n stream<TApi extends Api>(model: Model<TApi>, context: Context, options?: ModelsApiStreamOptions<TApi>): AssistantMessageEventStream {\n return lazyStream(model, async () => {\n const prepared = await this.prepare(model, options as StreamOptions | undefined);\n return prepared.provider.stream(prepared.model as Model<TApi>, context, prepared.options as ApiStreamOptions<TApi>);\n });\n }\n complete<TApi extends Api>(model: Model<TApi>, context: Context, options?: ModelsApiStreamOptions<TApi>): Promise<AssistantMessage> {\n return this.stream(model, context, options).result();\n }\n streamSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): AssistantMessageEventStream {\n return lazyStream(model, async () => {\n const prepared = await this.prepare(model, options);\n return prepared.provider.streamSimple(prepared.model, context, prepared.options);\n });\n }\n completeSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): Promise<AssistantMessage> {\n return this.streamSimple(model, context, options).result();\n }\n async login(providerId: string, type: AuthType, interaction: AuthInteraction): Promise<Credential> {\n const credential = await this.modelRegistry.login(providerId, type, interaction);\n this.authStorage.reload();\n await this.refresh({ allowNetwork: false });\n return credential;\n }\n async logout(providerId: string): Promise<void> {\n await this.modelRegistry.logoutProvider(providerId);\n await this.refresh({ allowNetwork: false });\n }\n async reloadConfig(): Promise<void> { await this.refresh({ allowNetwork: false }); }\n refresh(options: ModelsRefreshOptions = {}): Promise<ModelsRefreshResult> { return this.modelRegistry.refresh(options); }\n registerProvider(provider: Provider): void { this.modelRegistry.registerProvider(provider); }\n unregisterProvider(providerId: string): void { this.modelRegistry.unregisterProvider(providerId); }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ModelAuth, type OAuthCredential, type OAuthCredentials, type OAuthLoginCallbacks } from "@earendil-works/pi-ai";
|
|
1
|
+
import { type AuthInfoLink, type AuthInteraction, type ModelAuth, type OAuthCredential, type OAuthCredentials, type OAuthLoginCallbacks } from "@earendil-works/pi-ai";
|
|
2
2
|
import type { Api, Model } from "@earendil-works/pi-ai/compat";
|
|
3
3
|
export interface LegacyOAuthProvider {
|
|
4
4
|
name: string;
|
|
@@ -14,7 +14,9 @@ export interface OAuthProviderDescriptor extends LegacyOAuthProvider {
|
|
|
14
14
|
}
|
|
15
15
|
export interface AtomicOAuthLoginCallbacks extends OAuthLoginCallbacks {
|
|
16
16
|
onManualCodeCancel?(): void;
|
|
17
|
+
onInfo?(message: string, links: readonly AuthInfoLink[]): void;
|
|
17
18
|
}
|
|
19
|
+
export declare function createAuthInteraction(callbacks: AtomicOAuthLoginCallbacks): AuthInteraction;
|
|
18
20
|
export declare function registerLegacyOAuthProvider(providerId: string, provider: LegacyOAuthProvider, sourceId?: string): void;
|
|
19
21
|
/** Legacy registry aliases retained for Atomic's extension/test compatibility. */
|
|
20
22
|
export declare function registerOAuthProvider(provider: LegacyOAuthProvider & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-provider-bridge.d.ts","sourceRoot":"","sources":["../../src/core/oauth-provider-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"oauth-provider-bridge.d.ts","sourceRoot":"","sources":["../../src/core/oauth-provider-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,SAAS,EAEd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjE,YAAY,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvE,SAAS,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,CAAC;IACjD,YAAY,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;CACjF;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACrE,kBAAkB,CAAC,IAAI,IAAI,CAAC;IAC5B,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC;CAC/D;AAyBD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,yBAAyB,GAAG,eAAe,CAyC3F;AAOD,wBAAgB,2BAA2B,CAC1C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,GAAE,MAA6B,GACrC,IAAI,CAKN;AACD,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAE1F;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAGxF;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKrE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAE1F;AAED,wBAAgB,iBAAiB,IAAI,uBAAuB,EAAE,CAE7D;AAED,eAAO,MAAM,mBAAmB,kCAA4B,CAAC;AAC7D,wBAAgB,2BAA2B,IAAI,uBAAuB,EAAE,CAoBvE;AAED,wBAAsB,kBAAkB,CACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,yBAAyB,GAClC,OAAO,CAAC,eAAe,CAAC,CAM1B;AAED,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,eAAe,GACzB,OAAO,CAAC;IAAE,UAAU,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAAC,CAWvE;AAED,wBAAsB,qBAAqB,CAC1C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,eAAe,GACzB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAIhC;AAED,wBAAsB,cAAc,CACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC3C,OAAO,CAAC;IAAE,cAAc,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmBtE"}
|
|
@@ -21,7 +21,7 @@ function abortable(promise, signal, onAbort) {
|
|
|
21
21
|
function builtinOAuth(providerId) {
|
|
22
22
|
return builtinProviders().find((provider) => provider.id === providerId)?.auth.oauth;
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
export function createAuthInteraction(callbacks) {
|
|
25
25
|
return {
|
|
26
26
|
signal: callbacks.signal,
|
|
27
27
|
prompt: async (prompt) => {
|
|
@@ -48,9 +48,11 @@ function toInteraction(callbacks) {
|
|
|
48
48
|
callbacks.onDeviceCode(event);
|
|
49
49
|
break;
|
|
50
50
|
case "progress":
|
|
51
|
-
case "info":
|
|
52
51
|
callbacks.onProgress?.(event.message);
|
|
53
52
|
break;
|
|
53
|
+
case "info":
|
|
54
|
+
callbacks.onInfo?.(event.message, event.links ?? []);
|
|
55
|
+
break;
|
|
54
56
|
}
|
|
55
57
|
},
|
|
56
58
|
};
|
|
@@ -101,7 +103,7 @@ export function getOAuthProviderDescriptors() {
|
|
|
101
103
|
name: oauth.name,
|
|
102
104
|
loginLabel: oauth.loginLabel,
|
|
103
105
|
usesCallbackServer: CALLBACK_SERVER_PROVIDERS.has(provider.id),
|
|
104
|
-
login: async (callbacks) => oauth.login(
|
|
106
|
+
login: async (callbacks) => oauth.login(createAuthInteraction(callbacks)),
|
|
105
107
|
refreshToken: async (credentials) => oauth.refresh({ ...credentials, type: "oauth" }),
|
|
106
108
|
getApiKey: (credentials) => credentials.access,
|
|
107
109
|
});
|
|
@@ -120,7 +122,7 @@ export async function loginOAuthProvider(providerId, callbacks) {
|
|
|
120
122
|
const oauth = builtinOAuth(providerId);
|
|
121
123
|
if (!oauth)
|
|
122
124
|
throw new Error(`Unknown OAuth provider: ${providerId}`);
|
|
123
|
-
return oauth.login(
|
|
125
|
+
return oauth.login(createAuthInteraction(callbacks));
|
|
124
126
|
}
|
|
125
127
|
export async function refreshOAuthProvider(providerId, credential) {
|
|
126
128
|
const legacy = latestLegacyProvider(providerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-provider-bridge.js","sourceRoot":"","sources":["../../src/core/oauth-provider-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AuthInteraction,\n\ttype ModelAuth,\n\ttype OAuthAuth,\n\ttype OAuthCredential,\n\ttype OAuthCredentials,\n\ttype OAuthLoginCallbacks,\n} from \"@earendil-works/pi-ai\";\nimport { builtinProviders } from \"@earendil-works/pi-ai/providers/all\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\nexport interface LegacyOAuthProvider {\n\tname: string;\n\tusesCallbackServer?: boolean;\n\tlogin(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;\n\trefreshToken(credentials: OAuthCredentials): Promise<OAuthCredentials>;\n\tgetApiKey(credentials: OAuthCredentials): string;\n\tmodifyModels?(models: Model<Api>[], credentials: OAuthCredentials): Model<Api>[];\n}\n\nexport interface OAuthProviderDescriptor extends LegacyOAuthProvider {\n\tid: string;\n\tloginLabel?: string;\n}\n\nexport interface AtomicOAuthLoginCallbacks extends OAuthLoginCallbacks {\n\tonManualCodeCancel?(): void;\n}\n\nconst GLOBAL_LEGACY_SOURCE = \"atomic:legacy-global\";\nconst legacyProviders = new Map<string, Map<string, LegacyOAuthProvider>>();\nconst CALLBACK_SERVER_PROVIDERS = new Set([\"anthropic\", \"openai-codex\"]);\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal | undefined, onAbort?: () => void): Promise<T> {\n\tif (!signal) return promise;\n\tif (signal.aborted) {\n\t\tonAbort?.();\n\t\treturn Promise.reject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t}\n\treturn new Promise<T>((resolve, reject) => {\n\t\tconst abort = () => {\n\t\t\tonAbort?.();\n\t\t\treject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tpromise.then(resolve, reject).finally(() => signal.removeEventListener(\"abort\", abort));\n\t});\n}\nfunction builtinOAuth(providerId: string): OAuthAuth | undefined {\n\treturn builtinProviders().find((provider) => provider.id === providerId)?.auth.oauth;\n}\n\nfunction toInteraction(callbacks: AtomicOAuthLoginCallbacks): AuthInteraction {\n\treturn {\n\t\tsignal: callbacks.signal,\n\t\tprompt: async (prompt) => {\n\t\t\tswitch (prompt.type) {\n\t\t\t\tcase \"select\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(await callbacks.onSelect({\n\t\t\t\t\t\t\tmessage: prompt.message,\n\t\t\t\t\t\t\toptions: prompt.options.map(({ id, label }) => ({ id, label })),\n\t\t\t\t\t\t})) ?? \"\"\n\t\t\t\t\t);\n\t\t\t\tcase \"manual_code\":\n\t\t\t\t\treturn abortable(\n\t\t\t\t\t\tcallbacks.onManualCodeInput\n\t\t\t\t\t\t\t? callbacks.onManualCodeInput()\n\t\t\t\t\t\t\t: callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder }),\n\t\t\t\t\t\tprompt.signal,\n\t\t\t\t\t\tcallbacks.onManualCodeCancel,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\treturn callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder });\n\t\t\t}\n\t\t},\n\t\tnotify: (event) => {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"auth_url\":\n\t\t\t\t\tcallbacks.onAuth({ url: event.url, instructions: event.instructions });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"device_code\":\n\t\t\t\t\tcallbacks.onDeviceCode(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"progress\":\n\t\t\t\tcase \"info\":\n\t\t\t\t\tcallbacks.onProgress?.(event.message);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction latestLegacyProvider(providerId: string): LegacyOAuthProvider | undefined {\n\tconst providers = legacyProviders.get(providerId);\n\treturn providers ? [...providers.values()].at(-1) : undefined;\n}\n\nexport function registerLegacyOAuthProvider(\n\tproviderId: string,\n\tprovider: LegacyOAuthProvider,\n\tsourceId: string = GLOBAL_LEGACY_SOURCE,\n): void {\n\tconst providers = legacyProviders.get(providerId) ?? new Map<string, LegacyOAuthProvider>();\n\tproviders.delete(sourceId);\n\tproviders.set(sourceId, provider);\n\tlegacyProviders.set(providerId, providers);\n}\n/** Legacy registry aliases retained for Atomic's extension/test compatibility. */\nexport function registerOAuthProvider(provider: LegacyOAuthProvider & { id: string }): void {\n\tregisterLegacyOAuthProvider(provider.id, provider);\n}\n\nexport function getOAuthProvider(providerId: string): OAuthProviderDescriptor | undefined {\n\tconst provider = latestLegacyProvider(providerId);\n\treturn provider ? { id: providerId, ...provider } : getOAuthProviderDescriptors().find((entry) => entry.id === providerId);\n}\n\nexport function resetLegacyOAuthProviders(): void {\n\tlegacyProviders.clear();\n}\n\nexport function unregisterLegacyOAuthProviders(sourceId: string): void {\n\tfor (const [providerId, providers] of legacyProviders) {\n\t\tproviders.delete(sourceId);\n\t\tif (providers.size === 0) legacyProviders.delete(providerId);\n\t}\n}\n\nexport function getLegacyOAuthProvider(providerId: string): LegacyOAuthProvider | undefined {\n\treturn latestLegacyProvider(providerId);\n}\n\nexport function getOAuthProviders(): OAuthProviderDescriptor[] {\n\treturn getOAuthProviderDescriptors();\n}\n\nexport const resetOAuthProviders = resetLegacyOAuthProviders;\nexport function getOAuthProviderDescriptors(): OAuthProviderDescriptor[] {\n\tconst descriptors = new Map<string, OAuthProviderDescriptor>();\n\tfor (const provider of builtinProviders()) {\n\t\tconst oauth = provider.auth.oauth;\n\t\tif (!oauth) continue;\n\t\tdescriptors.set(provider.id, {\n\t\t\tid: provider.id,\n\t\t\tname: oauth.name,\n\t\t\tloginLabel: oauth.loginLabel,\n\t\t\tusesCallbackServer: CALLBACK_SERVER_PROVIDERS.has(provider.id),\n\t\t\tlogin: async (callbacks) => oauth.login(toInteraction(callbacks)),\n\t\t\trefreshToken: async (credentials) => oauth.refresh({ ...credentials, type: \"oauth\" }),\n\t\t\tgetApiKey: (credentials) => credentials.access,\n\t\t});\n\t}\n\tfor (const [id, providers] of legacyProviders) {\n\t\tconst provider = [...providers.values()].at(-1);\n\t\tif (provider) descriptors.set(id, { id, ...provider });\n\t}\n\treturn [...descriptors.values()];\n}\n\nexport async function loginOAuthProvider(\n\tproviderId: string,\n\tcallbacks: AtomicOAuthLoginCallbacks,\n): Promise<OAuthCredential> {\n\tconst legacy = latestLegacyProvider(providerId);\n\tif (legacy) return { type: \"oauth\", ...(await legacy.login(callbacks)) };\n\tconst oauth = builtinOAuth(providerId);\n\tif (!oauth) throw new Error(`Unknown OAuth provider: ${providerId}`);\n\treturn oauth.login(toInteraction(callbacks));\n}\n\nexport async function refreshOAuthProvider(\n\tproviderId: string,\n\tcredential: OAuthCredential,\n): Promise<{ credential: OAuthCredential; auth: ModelAuth } | undefined> {\n\tconst legacy = latestLegacyProvider(providerId);\n\tif (legacy) {\n\t\tconst { type: _type, ...credentials } = credential;\n\t\tconst refreshed = { type: \"oauth\" as const, ...(await legacy.refreshToken(credentials)) };\n\t\treturn { credential: refreshed, auth: { apiKey: legacy.getApiKey(refreshed) } };\n\t}\n\tconst oauth = builtinOAuth(providerId);\n\tif (!oauth) return undefined;\n\tconst refreshed = await oauth.refresh(credential);\n\treturn { credential: refreshed, auth: await oauth.toAuth(refreshed) };\n}\n\nexport async function oauthCredentialToAuth(\n\tproviderId: string,\n\tcredential: OAuthCredential,\n): Promise<ModelAuth | undefined> {\n\tconst legacy = latestLegacyProvider(providerId);\n\tif (legacy) return { apiKey: legacy.getApiKey(credential) };\n\treturn builtinOAuth(providerId)?.toAuth(credential);\n}\n\nexport async function getOAuthApiKey(\n\tproviderId: string,\n\tcredentials: Record<string, OAuthCredentials>,\n): Promise<{ newCredentials: OAuthCredentials; apiKey: string } | null> {\n\tif (!getOAuthProvider(providerId)) throw new Error(`Unknown OAuth provider: ${providerId}`);\n\tconst selected = credentials[providerId];\n\tif (!selected) return null;\n\tconst credential: OAuthCredential = { type: \"oauth\", ...selected };\n\tlet resolved: { credential: OAuthCredential; auth: ModelAuth | undefined } | undefined;\n\tif (Date.now() >= credential.expires) {\n\t\ttry {\n\t\t\tresolved = await refreshOAuthProvider(providerId, credential);\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to refresh OAuth token for ${providerId}`);\n\t\t}\n\t} else {\n\t\tresolved = { credential, auth: await oauthCredentialToAuth(providerId, credential) };\n\t}\n\tconst apiKey = resolved?.auth?.apiKey;\n\tif (!resolved || !apiKey) return null;\n\tconst { type: _type, ...newCredentials } = resolved.credential;\n\treturn { newCredentials, apiKey };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oauth-provider-bridge.js","sourceRoot":"","sources":["../../src/core/oauth-provider-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AuthInfoLink,\n\ttype AuthInteraction,\n\ttype ModelAuth,\n\ttype OAuthAuth,\n\ttype OAuthCredential,\n\ttype OAuthCredentials,\n\ttype OAuthLoginCallbacks,\n} from \"@earendil-works/pi-ai\";\nimport { builtinProviders } from \"@earendil-works/pi-ai/providers/all\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\n\nexport interface LegacyOAuthProvider {\n\tname: string;\n\tusesCallbackServer?: boolean;\n\tlogin(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;\n\trefreshToken(credentials: OAuthCredentials): Promise<OAuthCredentials>;\n\tgetApiKey(credentials: OAuthCredentials): string;\n\tmodifyModels?(models: Model<Api>[], credentials: OAuthCredentials): Model<Api>[];\n}\n\nexport interface OAuthProviderDescriptor extends LegacyOAuthProvider {\n\tid: string;\n\tloginLabel?: string;\n}\n\nexport interface AtomicOAuthLoginCallbacks extends OAuthLoginCallbacks {\n\tonManualCodeCancel?(): void;\n\tonInfo?(message: string, links: readonly AuthInfoLink[]): void;\n}\n\nconst GLOBAL_LEGACY_SOURCE = \"atomic:legacy-global\";\nconst legacyProviders = new Map<string, Map<string, LegacyOAuthProvider>>();\nconst CALLBACK_SERVER_PROVIDERS = new Set([\"anthropic\", \"openai-codex\"]);\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal | undefined, onAbort?: () => void): Promise<T> {\n\tif (!signal) return promise;\n\tif (signal.aborted) {\n\t\tonAbort?.();\n\t\treturn Promise.reject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t}\n\treturn new Promise<T>((resolve, reject) => {\n\t\tconst abort = () => {\n\t\t\tonAbort?.();\n\t\t\treject(signal.reason ?? new Error(\"Authentication prompt cancelled\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tpromise.then(resolve, reject).finally(() => signal.removeEventListener(\"abort\", abort));\n\t});\n}\nfunction builtinOAuth(providerId: string): OAuthAuth | undefined {\n\treturn builtinProviders().find((provider) => provider.id === providerId)?.auth.oauth;\n}\n\nexport function createAuthInteraction(callbacks: AtomicOAuthLoginCallbacks): AuthInteraction {\n\treturn {\n\t\tsignal: callbacks.signal,\n\t\tprompt: async (prompt) => {\n\t\t\tswitch (prompt.type) {\n\t\t\t\tcase \"select\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(await callbacks.onSelect({\n\t\t\t\t\t\t\tmessage: prompt.message,\n\t\t\t\t\t\t\toptions: prompt.options.map(({ id, label }) => ({ id, label })),\n\t\t\t\t\t\t})) ?? \"\"\n\t\t\t\t\t);\n\t\t\t\tcase \"manual_code\":\n\t\t\t\t\treturn abortable(\n\t\t\t\t\t\tcallbacks.onManualCodeInput\n\t\t\t\t\t\t\t? callbacks.onManualCodeInput()\n\t\t\t\t\t\t\t: callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder }),\n\t\t\t\t\t\tprompt.signal,\n\t\t\t\t\t\tcallbacks.onManualCodeCancel,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\treturn callbacks.onPrompt({ message: prompt.message, placeholder: prompt.placeholder });\n\t\t\t}\n\t\t},\n\t\tnotify: (event) => {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"auth_url\":\n\t\t\t\t\tcallbacks.onAuth({ url: event.url, instructions: event.instructions });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"device_code\":\n\t\t\t\t\tcallbacks.onDeviceCode(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"progress\":\n\t\t\t\t\tcallbacks.onProgress?.(event.message);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"info\":\n\t\t\t\t\tcallbacks.onInfo?.(event.message, event.links ?? []);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction latestLegacyProvider(providerId: string): LegacyOAuthProvider | undefined {\n\tconst providers = legacyProviders.get(providerId);\n\treturn providers ? [...providers.values()].at(-1) : undefined;\n}\n\nexport function registerLegacyOAuthProvider(\n\tproviderId: string,\n\tprovider: LegacyOAuthProvider,\n\tsourceId: string = GLOBAL_LEGACY_SOURCE,\n): void {\n\tconst providers = legacyProviders.get(providerId) ?? new Map<string, LegacyOAuthProvider>();\n\tproviders.delete(sourceId);\n\tproviders.set(sourceId, provider);\n\tlegacyProviders.set(providerId, providers);\n}\n/** Legacy registry aliases retained for Atomic's extension/test compatibility. */\nexport function registerOAuthProvider(provider: LegacyOAuthProvider & { id: string }): void {\n\tregisterLegacyOAuthProvider(provider.id, provider);\n}\n\nexport function getOAuthProvider(providerId: string): OAuthProviderDescriptor | undefined {\n\tconst provider = latestLegacyProvider(providerId);\n\treturn provider ? { id: providerId, ...provider } : getOAuthProviderDescriptors().find((entry) => entry.id === providerId);\n}\n\nexport function resetLegacyOAuthProviders(): void {\n\tlegacyProviders.clear();\n}\n\nexport function unregisterLegacyOAuthProviders(sourceId: string): void {\n\tfor (const [providerId, providers] of legacyProviders) {\n\t\tproviders.delete(sourceId);\n\t\tif (providers.size === 0) legacyProviders.delete(providerId);\n\t}\n}\n\nexport function getLegacyOAuthProvider(providerId: string): LegacyOAuthProvider | undefined {\n\treturn latestLegacyProvider(providerId);\n}\n\nexport function getOAuthProviders(): OAuthProviderDescriptor[] {\n\treturn getOAuthProviderDescriptors();\n}\n\nexport const resetOAuthProviders = resetLegacyOAuthProviders;\nexport function getOAuthProviderDescriptors(): OAuthProviderDescriptor[] {\n\tconst descriptors = new Map<string, OAuthProviderDescriptor>();\n\tfor (const provider of builtinProviders()) {\n\t\tconst oauth = provider.auth.oauth;\n\t\tif (!oauth) continue;\n\t\tdescriptors.set(provider.id, {\n\t\t\tid: provider.id,\n\t\t\tname: oauth.name,\n\t\t\tloginLabel: oauth.loginLabel,\n\t\t\tusesCallbackServer: CALLBACK_SERVER_PROVIDERS.has(provider.id),\n\t\t\tlogin: async (callbacks) => oauth.login(createAuthInteraction(callbacks)),\n\t\t\trefreshToken: async (credentials) => oauth.refresh({ ...credentials, type: \"oauth\" }),\n\t\t\tgetApiKey: (credentials) => credentials.access,\n\t\t});\n\t}\n\tfor (const [id, providers] of legacyProviders) {\n\t\tconst provider = [...providers.values()].at(-1);\n\t\tif (provider) descriptors.set(id, { id, ...provider });\n\t}\n\treturn [...descriptors.values()];\n}\n\nexport async function loginOAuthProvider(\n\tproviderId: string,\n\tcallbacks: AtomicOAuthLoginCallbacks,\n): Promise<OAuthCredential> {\n\tconst legacy = latestLegacyProvider(providerId);\n\tif (legacy) return { type: \"oauth\", ...(await legacy.login(callbacks)) };\n\tconst oauth = builtinOAuth(providerId);\n\tif (!oauth) throw new Error(`Unknown OAuth provider: ${providerId}`);\n\treturn oauth.login(createAuthInteraction(callbacks));\n}\n\nexport async function refreshOAuthProvider(\n\tproviderId: string,\n\tcredential: OAuthCredential,\n): Promise<{ credential: OAuthCredential; auth: ModelAuth } | undefined> {\n\tconst legacy = latestLegacyProvider(providerId);\n\tif (legacy) {\n\t\tconst { type: _type, ...credentials } = credential;\n\t\tconst refreshed = { type: \"oauth\" as const, ...(await legacy.refreshToken(credentials)) };\n\t\treturn { credential: refreshed, auth: { apiKey: legacy.getApiKey(refreshed) } };\n\t}\n\tconst oauth = builtinOAuth(providerId);\n\tif (!oauth) return undefined;\n\tconst refreshed = await oauth.refresh(credential);\n\treturn { credential: refreshed, auth: await oauth.toAuth(refreshed) };\n}\n\nexport async function oauthCredentialToAuth(\n\tproviderId: string,\n\tcredential: OAuthCredential,\n): Promise<ModelAuth | undefined> {\n\tconst legacy = latestLegacyProvider(providerId);\n\tif (legacy) return { apiKey: legacy.getApiKey(credential) };\n\treturn builtinOAuth(providerId)?.toAuth(credential);\n}\n\nexport async function getOAuthApiKey(\n\tproviderId: string,\n\tcredentials: Record<string, OAuthCredentials>,\n): Promise<{ newCredentials: OAuthCredentials; apiKey: string } | null> {\n\tif (!getOAuthProvider(providerId)) throw new Error(`Unknown OAuth provider: ${providerId}`);\n\tconst selected = credentials[providerId];\n\tif (!selected) return null;\n\tconst credential: OAuthCredential = { type: \"oauth\", ...selected };\n\tlet resolved: { credential: OAuthCredential; auth: ModelAuth | undefined } | undefined;\n\tif (Date.now() >= credential.expires) {\n\t\ttry {\n\t\t\tresolved = await refreshOAuthProvider(providerId, credential);\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to refresh OAuth token for ${providerId}`);\n\t\t}\n\t} else {\n\t\tresolved = { credential, auth: await oauthCredentialToAuth(providerId, credential) };\n\t}\n\tconst apiKey = resolved?.auth?.apiKey;\n\tif (!resolved || !apiKey) return null;\n\tconst { type: _type, ...newCredentials } = resolved.credential;\n\treturn { newCredentials, apiKey };\n}\n"]}
|
|
@@ -10,7 +10,7 @@ import { getBaseDirsForScope, resolvePathFromBase } from "./package-manager-path
|
|
|
10
10
|
import { createAccumulator, addResource, getTargetMap, toResolvedPaths } from "./package-manager-resource-accumulator.js";
|
|
11
11
|
import { collectPackageResources, resolveLocalEntries } from "./package-manager-resource-collector.js";
|
|
12
12
|
import { resolveExtensionEntries } from "./package-manager-resource-files.js";
|
|
13
|
-
import { dedupePackages, getPackageSourceString, parseSource } from "./package-manager-source.js";
|
|
13
|
+
import { dedupePackages, getPackageIdentity, getPackageSourceString, parseSource } from "./package-manager-source.js";
|
|
14
14
|
import { installParsedSource } from "./package-manager-operations.js";
|
|
15
15
|
async function exists(path) {
|
|
16
16
|
try {
|
|
@@ -65,10 +65,13 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
|
|
|
65
65
|
for (const { pkg, scope } of sources) {
|
|
66
66
|
const sourceStr = getPackageSourceString(pkg);
|
|
67
67
|
const filter = typeof pkg === "object" ? pkg : undefined;
|
|
68
|
-
const
|
|
68
|
+
const deltaBase = findAutoloadDeltaBase(context, pkg, scope, sources);
|
|
69
|
+
const resolvedSource = deltaBase?.source ?? sourceStr;
|
|
70
|
+
const resolvedScope = deltaBase?.scope ?? scope;
|
|
71
|
+
const parsed = parseSource(resolvedSource);
|
|
69
72
|
const metadata = { source: sourceStr, scope, origin: "package" };
|
|
70
73
|
if (parsed.type === "local") {
|
|
71
|
-
for (const baseDir of getBaseDirsForScope(context,
|
|
74
|
+
for (const baseDir of getBaseDirsForScope(context, resolvedScope)) {
|
|
72
75
|
await resolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {
|
|
73
76
|
includeProjectLocalResources: options?.includeProjectLocalResources === true,
|
|
74
77
|
});
|
|
@@ -80,9 +83,9 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
|
|
|
80
83
|
return false;
|
|
81
84
|
if (!onMissing) {
|
|
82
85
|
if (context.driver)
|
|
83
|
-
await context.driver.installParsedSource(parsed,
|
|
86
|
+
await context.driver.installParsedSource(parsed, resolvedScope);
|
|
84
87
|
else
|
|
85
|
-
await installParsedSource(context, parsed,
|
|
88
|
+
await installParsedSource(context, parsed, resolvedScope);
|
|
86
89
|
return true;
|
|
87
90
|
}
|
|
88
91
|
const action = await onMissing(sourceStr);
|
|
@@ -91,19 +94,19 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
|
|
|
91
94
|
if (action === "error")
|
|
92
95
|
throw new Error(`Missing source: ${sourceStr}`);
|
|
93
96
|
if (context.driver)
|
|
94
|
-
await context.driver.installParsedSource(parsed,
|
|
97
|
+
await context.driver.installParsedSource(parsed, resolvedScope);
|
|
95
98
|
else
|
|
96
|
-
await installParsedSource(context, parsed,
|
|
99
|
+
await installParsedSource(context, parsed, resolvedScope);
|
|
97
100
|
return true;
|
|
98
101
|
};
|
|
99
102
|
if (parsed.type === "npm") {
|
|
100
|
-
let installedPath = getExistingNpmInstallPath(context, parsed,
|
|
103
|
+
let installedPath = getExistingNpmInstallPath(context, parsed, resolvedScope);
|
|
101
104
|
const needsInstall = !installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath));
|
|
102
105
|
if (needsInstall) {
|
|
103
106
|
const installed = await installMissing();
|
|
104
107
|
if (!installed)
|
|
105
108
|
continue;
|
|
106
|
-
installedPath = getExistingNpmInstallPath(context, parsed,
|
|
109
|
+
installedPath = getExistingNpmInstallPath(context, parsed, resolvedScope);
|
|
107
110
|
if (!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath))) {
|
|
108
111
|
continue;
|
|
109
112
|
}
|
|
@@ -114,13 +117,13 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
|
|
|
114
117
|
await collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
115
118
|
continue;
|
|
116
119
|
}
|
|
117
|
-
let installedPath = getExistingGitInstallPath(context, parsed,
|
|
120
|
+
let installedPath = getExistingGitInstallPath(context, parsed, resolvedScope) ?? getGitInstallPath(context, parsed, resolvedScope);
|
|
118
121
|
if (!(await exists(installedPath))) {
|
|
119
122
|
const installed = await installMissing();
|
|
120
123
|
if (!installed)
|
|
121
124
|
continue;
|
|
122
125
|
}
|
|
123
|
-
else if (
|
|
126
|
+
else if (resolvedScope === "temporary" && !parsed.pinned && !isOfflineModeEnabled()) {
|
|
124
127
|
if (context.driver)
|
|
125
128
|
await context.driver.refreshTemporaryGitSource(parsed, sourceStr);
|
|
126
129
|
else
|
|
@@ -130,6 +133,14 @@ async function resolvePackageSources(context, sources, accumulator, onMissing, o
|
|
|
130
133
|
await collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
131
134
|
}
|
|
132
135
|
}
|
|
136
|
+
function findAutoloadDeltaBase(context, pkg, scope, sources) {
|
|
137
|
+
if (scope !== "project" || typeof pkg !== "object" || pkg.autoload !== false)
|
|
138
|
+
return undefined;
|
|
139
|
+
const identity = getPackageIdentity(context, pkg.source, scope);
|
|
140
|
+
const userEntry = sources.find((entry) => entry.scope === "user"
|
|
141
|
+
&& getPackageIdentity(context, getPackageSourceString(entry.pkg), "user") === identity);
|
|
142
|
+
return userEntry ? { source: getPackageSourceString(userEntry.pkg), scope: "user" } : undefined;
|
|
143
|
+
}
|
|
133
144
|
async function resolveLocalExtensionSource(source, accumulator, filter, metadata, baseDir, options) {
|
|
134
145
|
const resolved = resolvePathFromBase(source.path, baseDir);
|
|
135
146
|
if (!(await exists(resolved)))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-resolver.js","sourceRoot":"","sources":["../../src/core/package-manager-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, stat } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { getGitInstallPath } from \"./package-manager-paths.ts\";\nimport { addAutoDiscoveredResources, collectProjectLocalResources } from \"./package-manager-auto-resources.ts\";\nimport { getExistingGitInstallPath, refreshTemporaryGitSource } from \"./package-manager-git.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getExistingNpmInstallPath, installedNpmMatchesConfiguredVersion } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { createAccumulator, addResource, getTargetMap, toResolvedPaths } from \"./package-manager-resource-accumulator.ts\";\nimport { collectPackageResources, resolveLocalEntries } from \"./package-manager-resource-collector.ts\";\nimport { resolveExtensionEntries } from \"./package-manager-resource-files.ts\";\nimport { dedupePackages, getPackageSourceString, parseSource } from \"./package-manager-source.ts\";\nimport { installParsedSource } from \"./package-manager-operations.ts\";\nimport type {\n\tMissingSourceAction,\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tResourceAccumulator,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\n\nexport async function resolvePackages(\n\tcontext: PackageManagerContext,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst allPackages: Array<{ pkg: PackageSource; scope: SourceScope }> = [];\n\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"project\" });\n\t}\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"user\" });\n\t}\n\n\tconst packageSources = dedupePackages(context, allPackages);\n\tawait resolvePackageSources(context, packageSources, accumulator, onMissing);\n\n\tconst globalBaseDir = context.agentDir;\n\tconst projectBaseDir = join(context.cwd, CONFIG_DIR_NAME);\n\tconst globalBaseDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectBaseDirs = getBaseDirsForScope(context, \"project\");\n\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst globalEntries = (globalSettings[resourceType] ?? []) as string[];\n\t\tconst projectEntries = (projectSettings[resourceType] ?? []) as string[];\n\t\tfor (const baseDir of projectBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tprojectEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"project\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t\tfor (const baseDir of globalBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tglobalEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"user\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t}\n\n\tawait addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);\n\treturn toResolvedPaths(accumulator);\n}\n\nexport async function resolveExtensionSources(\n\tcontext: PackageManagerContext,\n\tsources: PackageSource[],\n\toptions?: ResolveExtensionSourcesOptions,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst scope: SourceScope = options?.temporary ? \"temporary\" : options?.local ? \"project\" : \"user\";\n\tconst packageSources = sources.map((source) => ({ pkg: source, scope }));\n\tawait resolvePackageSources(context, packageSources, accumulator, undefined, {\n\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t});\n\treturn toResolvedPaths(accumulator);\n}\n\nasync function resolvePackageSources(\n\tcontext: PackageManagerContext,\n\tsources: Array<{ pkg: PackageSource; scope: SourceScope }>,\n\taccumulator: ResourceAccumulator,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tfor (const { pkg, scope } of sources) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tconst filter = typeof pkg === \"object\" ? pkg : undefined;\n\t\tconst parsed = parseSource(sourceStr);\n\t\tconst metadata: PathMetadata = { source: sourceStr, scope, origin: \"package\" };\n\n\t\tif (parsed.type === \"local\") {\n\t\t\tfor (const baseDir of getBaseDirsForScope(context, scope)) {\n\t\t\t\tawait resolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {\n\t\t\t\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst installMissing = async (): Promise<boolean> => {\n\t\t\tif (isOfflineModeEnabled()) return false;\n\t\t\tif (!onMissing) {\n\t\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst action = await onMissing(sourceStr);\n\t\t\tif (action === \"skip\") return false;\n\t\t\tif (action === \"error\") throw new Error(`Missing source: ${sourceStr}`);\n\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, scope);\n\t\t\telse await installParsedSource(context, parsed, scope);\n\t\t\treturn true;\n\t\t};\n\n\t\tif (parsed.type === \"npm\") {\n\t\t\tlet installedPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\tconst needsInstall =\n\t\t\t\t!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath));\n\t\t\tif (needsInstall) {\n\t\t\t\tconst installed = await installMissing();\n\t\t\t\tif (!installed) continue;\n\t\t\t\tinstalledPath = getExistingNpmInstallPath(context, parsed, scope);\n\t\t\t\tif (!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!installedPath) continue;\n\t\t\tmetadata.baseDir = installedPath;\n\t\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet installedPath = getExistingGitInstallPath(context, parsed, scope) ?? getGitInstallPath(context, parsed, scope);\n\t\tif (!(await exists(installedPath))) {\n\t\t\tconst installed = await installMissing();\n\t\t\tif (!installed) continue;\n\t\t} else if (scope === \"temporary\" && !parsed.pinned && !isOfflineModeEnabled()) {\n\t\t\tif (context.driver) await context.driver.refreshTemporaryGitSource(parsed, sourceStr);\n\t\t\telse await refreshTemporaryGitSource(context, parsed, sourceStr);\n\t\t}\n\t\tmetadata.baseDir = installedPath;\n\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t}\n}\n\nasync function resolveLocalExtensionSource(\n\tsource: { type: \"local\"; path: string },\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n\tbaseDir: string,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tconst resolved = resolvePathFromBase(source.path, baseDir);\n\tif (!(await exists(resolved))) return;\n\n\ttry {\n\t\tconst stats = await stat(resolved);\n\t\tif (stats.isFile()) {\n\t\t\taddResource(accumulator.extensions, resolved, { ...metadata, baseDir: dirname(resolved) }, true);\n\t\t\treturn;\n\t\t}\n\t\tif (stats.isDirectory()) {\n\t\t\tconst packageMetadata: PathMetadata = { ...metadata, baseDir: resolved };\n\t\t\tconst packageResources = await collectPackageResources(resolved, accumulator, filter, packageMetadata);\n\t\t\tconst projectLocalResources = options?.includeProjectLocalResources\n\t\t\t\t? await collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)\n\t\t\t\t: false;\n\t\t\tconst extensionEntries = await resolveExtensionEntries(resolved);\n\t\t\tconst shouldAddDirectoryFallback =\n\t\t\t\textensionEntries !== null || (options?.includeProjectLocalResources === true && !projectLocalResources);\n\t\t\tif (!packageResources && shouldAddDirectoryFallback) {\n\t\t\t\taddResource(accumulator.extensions, resolved, packageMetadata, true);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"package-manager-resolver.js","sourceRoot":"","sources":["../../src/core/package-manager-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, stat } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { getGitInstallPath } from \"./package-manager-paths.ts\";\nimport { addAutoDiscoveredResources, collectProjectLocalResources } from \"./package-manager-auto-resources.ts\";\nimport { getExistingGitInstallPath, refreshTemporaryGitSource } from \"./package-manager-git.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getExistingNpmInstallPath, installedNpmMatchesConfiguredVersion } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { createAccumulator, addResource, getTargetMap, toResolvedPaths } from \"./package-manager-resource-accumulator.ts\";\nimport { collectPackageResources, resolveLocalEntries } from \"./package-manager-resource-collector.ts\";\nimport { resolveExtensionEntries } from \"./package-manager-resource-files.ts\";\nimport { dedupePackages, getPackageIdentity, getPackageSourceString, parseSource } from \"./package-manager-source.ts\";\nimport { installParsedSource } from \"./package-manager-operations.ts\";\nimport type {\n\tMissingSourceAction,\n\tPackageFilter,\n\tPackageManagerContext,\n\tPathMetadata,\n\tResolvedPaths,\n\tResolveExtensionSourcesOptions,\n\tResourceAccumulator,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\nimport type { PackageSource } from \"./settings-manager.ts\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\n\nexport async function resolvePackages(\n\tcontext: PackageManagerContext,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst globalSettings = context.settingsManager.getGlobalSettings();\n\tconst projectSettings = context.settingsManager.getProjectSettings();\n\tconst allPackages: Array<{ pkg: PackageSource; scope: SourceScope }> = [];\n\n\tfor (const pkg of projectSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"project\" });\n\t}\n\tfor (const pkg of globalSettings.packages ?? []) {\n\t\tallPackages.push({ pkg, scope: \"user\" });\n\t}\n\n\tconst packageSources = dedupePackages(context, allPackages);\n\tawait resolvePackageSources(context, packageSources, accumulator, onMissing);\n\n\tconst globalBaseDir = context.agentDir;\n\tconst projectBaseDir = join(context.cwd, CONFIG_DIR_NAME);\n\tconst globalBaseDirs = getBaseDirsForScope(context, \"user\");\n\tconst projectBaseDirs = getBaseDirsForScope(context, \"project\");\n\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\tconst globalEntries = (globalSettings[resourceType] ?? []) as string[];\n\t\tconst projectEntries = (projectSettings[resourceType] ?? []) as string[];\n\t\tfor (const baseDir of projectBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tprojectEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"project\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t\tfor (const baseDir of globalBaseDirs) {\n\t\t\tawait resolveLocalEntries(\n\t\t\t\tglobalEntries,\n\t\t\t\tresourceType,\n\t\t\t\ttarget,\n\t\t\t\t{ source: \"local\", scope: \"user\", origin: \"top-level\", baseDir },\n\t\t\t\tbaseDir,\n\t\t\t);\n\t\t}\n\t}\n\n\tawait addAutoDiscoveredResources(context, accumulator, globalSettings, projectSettings, globalBaseDir, projectBaseDir);\n\treturn toResolvedPaths(accumulator);\n}\n\nexport async function resolveExtensionSources(\n\tcontext: PackageManagerContext,\n\tsources: PackageSource[],\n\toptions?: ResolveExtensionSourcesOptions,\n): Promise<ResolvedPaths> {\n\tconst accumulator = createAccumulator();\n\tconst scope: SourceScope = options?.temporary ? \"temporary\" : options?.local ? \"project\" : \"user\";\n\tconst packageSources = sources.map((source) => ({ pkg: source, scope }));\n\tawait resolvePackageSources(context, packageSources, accumulator, undefined, {\n\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t});\n\treturn toResolvedPaths(accumulator);\n}\n\nasync function resolvePackageSources(\n\tcontext: PackageManagerContext,\n\tsources: Array<{ pkg: PackageSource; scope: SourceScope }>,\n\taccumulator: ResourceAccumulator,\n\tonMissing?: (source: string) => Promise<MissingSourceAction>,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tfor (const { pkg, scope } of sources) {\n\t\tconst sourceStr = getPackageSourceString(pkg);\n\t\tconst filter = typeof pkg === \"object\" ? pkg : undefined;\n\t\tconst deltaBase = findAutoloadDeltaBase(context, pkg, scope, sources);\n\t\tconst resolvedSource = deltaBase?.source ?? sourceStr;\n\t\tconst resolvedScope = deltaBase?.scope ?? scope;\n\t\tconst parsed = parseSource(resolvedSource);\n\t\tconst metadata: PathMetadata = { source: sourceStr, scope, origin: \"package\" };\n\n\t\tif (parsed.type === \"local\") {\n\t\t\tfor (const baseDir of getBaseDirsForScope(context, resolvedScope)) {\n\t\t\t\tawait resolveLocalExtensionSource(parsed, accumulator, filter, { ...metadata, baseDir }, baseDir, {\n\t\t\t\t\tincludeProjectLocalResources: options?.includeProjectLocalResources === true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst installMissing = async (): Promise<boolean> => {\n\t\t\tif (isOfflineModeEnabled()) return false;\n\t\t\tif (!onMissing) {\n\t\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, resolvedScope);\n\t\t\t\telse await installParsedSource(context, parsed, resolvedScope);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst action = await onMissing(sourceStr);\n\t\t\tif (action === \"skip\") return false;\n\t\t\tif (action === \"error\") throw new Error(`Missing source: ${sourceStr}`);\n\t\t\tif (context.driver) await context.driver.installParsedSource(parsed, resolvedScope);\n\t\t\telse await installParsedSource(context, parsed, resolvedScope);\n\t\t\treturn true;\n\t\t};\n\n\t\tif (parsed.type === \"npm\") {\n\t\t\tlet installedPath = getExistingNpmInstallPath(context, parsed, resolvedScope);\n\t\t\tconst needsInstall =\n\t\t\t\t!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath));\n\t\t\tif (needsInstall) {\n\t\t\t\tconst installed = await installMissing();\n\t\t\t\tif (!installed) continue;\n\t\t\t\tinstalledPath = getExistingNpmInstallPath(context, parsed, resolvedScope);\n\t\t\t\tif (!installedPath || !(await installedNpmMatchesConfiguredVersion(context, parsed, installedPath))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!installedPath) continue;\n\t\t\tmetadata.baseDir = installedPath;\n\t\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet installedPath = getExistingGitInstallPath(context, parsed, resolvedScope) ?? getGitInstallPath(context, parsed, resolvedScope);\n\t\tif (!(await exists(installedPath))) {\n\t\t\tconst installed = await installMissing();\n\t\t\tif (!installed) continue;\n\t\t} else if (resolvedScope === \"temporary\" && !parsed.pinned && !isOfflineModeEnabled()) {\n\t\t\tif (context.driver) await context.driver.refreshTemporaryGitSource(parsed, sourceStr);\n\t\t\telse await refreshTemporaryGitSource(context, parsed, sourceStr);\n\t\t}\n\t\tmetadata.baseDir = installedPath;\n\t\tawait collectPackageResources(installedPath, accumulator, filter, metadata);\n\t}\n}\n\nfunction findAutoloadDeltaBase(\n\tcontext: PackageManagerContext,\n\tpkg: PackageSource,\n\tscope: SourceScope,\n\tsources: Array<{ pkg: PackageSource; scope: SourceScope }>,\n): { source: string; scope: SourceScope } | undefined {\n\tif (scope !== \"project\" || typeof pkg !== \"object\" || pkg.autoload !== false) return undefined;\n\tconst identity = getPackageIdentity(context, pkg.source, scope);\n\tconst userEntry = sources.find((entry) => entry.scope === \"user\"\n\t\t&& getPackageIdentity(context, getPackageSourceString(entry.pkg), \"user\") === identity);\n\treturn userEntry ? { source: getPackageSourceString(userEntry.pkg), scope: \"user\" } : undefined;\n}\n\nasync function resolveLocalExtensionSource(\n\tsource: { type: \"local\"; path: string },\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n\tbaseDir: string,\n\toptions?: { includeProjectLocalResources?: boolean },\n): Promise<void> {\n\tconst resolved = resolvePathFromBase(source.path, baseDir);\n\tif (!(await exists(resolved))) return;\n\n\ttry {\n\t\tconst stats = await stat(resolved);\n\t\tif (stats.isFile()) {\n\t\t\taddResource(accumulator.extensions, resolved, { ...metadata, baseDir: dirname(resolved) }, true);\n\t\t\treturn;\n\t\t}\n\t\tif (stats.isDirectory()) {\n\t\t\tconst packageMetadata: PathMetadata = { ...metadata, baseDir: resolved };\n\t\t\tconst packageResources = await collectPackageResources(resolved, accumulator, filter, packageMetadata);\n\t\t\tconst projectLocalResources = options?.includeProjectLocalResources\n\t\t\t\t? await collectProjectLocalResources(resolved, accumulator, filter, packageMetadata)\n\t\t\t\t: false;\n\t\t\tconst extensionEntries = await resolveExtensionEntries(resolved);\n\t\t\tconst shouldAddDirectoryFallback =\n\t\t\t\textensionEntries !== null || (options?.includeProjectLocalResources === true && !projectLocalResources);\n\t\t\tif (!packageResources && shouldAddDirectoryFallback) {\n\t\t\t\taddResource(accumulator.extensions, resolved, packageMetadata, true);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-resource-collector.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-collector.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAe9H,wBAAsB,uBAAuB,CAC5C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"package-manager-resource-collector.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-collector.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAe9H,wBAAsB,uBAAuB,CAC5C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,QAAQ,EAAE,YAAY,GACpB,OAAO,CAAC,OAAO,CAAC,CAmClB;AA0DD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpK;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW1G"}
|
|
@@ -4,7 +4,7 @@ import { resolve } from "node:path";
|
|
|
4
4
|
import { addResource, getTargetMap } from "./package-manager-resource-accumulator.js";
|
|
5
5
|
import { collectResourceFiles } from "./package-manager-resource-files.js";
|
|
6
6
|
import { conventionDirsForResource, getManifestFromPackageJson, manifestEntriesForResource } from "./package-manager-manifest.js";
|
|
7
|
-
import { applyPatterns, hasGlobPattern, isOverridePattern, splitPatterns } from "./package-manager-resource-patterns.js";
|
|
7
|
+
import { applyAutoloadDisabledPatterns, applyPatterns, hasGlobPattern, isOverridePattern, splitPatterns } from "./package-manager-resource-patterns.js";
|
|
8
8
|
import { resolvePathFromBase } from "./package-manager-paths.js";
|
|
9
9
|
async function exists(path) {
|
|
10
10
|
try {
|
|
@@ -29,7 +29,13 @@ export async function collectPackageResources(packageRoot, accumulator, filter,
|
|
|
29
29
|
for (const resourceType of ["extensions", "skills", "prompts", "themes", "workflows"]) {
|
|
30
30
|
const patterns = filter[resourceType];
|
|
31
31
|
const target = getTargetMap(accumulator, resourceType);
|
|
32
|
-
if (
|
|
32
|
+
if (filter.autoload === false) {
|
|
33
|
+
const { allFiles } = await collectManifestFiles(packageRoot, resourceType);
|
|
34
|
+
const selected = applyAutoloadDisabledPatterns(allFiles, patterns ?? [], packageRoot);
|
|
35
|
+
for (const [filePath, enabled] of selected)
|
|
36
|
+
addResource(target, filePath, metadata, enabled);
|
|
37
|
+
}
|
|
38
|
+
else if (patterns !== undefined)
|
|
33
39
|
await applyPackageFilter(packageRoot, patterns, resourceType, target, metadata);
|
|
34
40
|
else
|
|
35
41
|
await collectDefaultResources(packageRoot, resourceType, target, metadata);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-resource-collector.js","sourceRoot":"","sources":["../../src/core/package-manager-resource-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAClI,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,KAAK,UAAU,MAAM,CAAC,IAAY;IACjC,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,WAAmB;IAChD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,WAAmB,EACnB,WAAgC,EAChC,MAAiC,EACjC,QAAsB;IAEtB,IAAI,MAAM,EAAE,CAAC;QACZ,KAAK,MAAM,YAAY,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAU,EAAE,CAAC;YAChG,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAmC,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACvD,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;;gBACvG,MAAM,uBAAuB,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACd,KAAK,MAAM,YAAY,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAU,EAAE,CAAC;YAChG,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACnE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAChH,SAAS;YACV,CAAC;YACD,IAAI,YAAY,KAAK,WAAW;gBAAE,MAAM,uBAAuB,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/I,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,YAAY,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAU,EAAE,CAAC;QAChG,KAAK,MAAM,GAAG,IAAI,yBAAyB,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;gBAAE,SAAS;YACnC,KAAK,MAAM,CAAC,IAAI,MAAM,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC;gBAAE,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACvI,SAAS,GAAG,IAAI,CAAC;QAClB,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,WAAmB,EAAE,YAA0B,EAAE,MAAmB,EAAE,QAAsB;IAClI,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/E,OAAO;IACR,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,yBAAyB,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;YAAE,SAAS;QACnC,KAAK,MAAM,CAAC,IAAI,MAAM,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC;YAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvG,CAAC;AACF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,YAAsB,EAAE,YAA0B,EAAE,MAAmB,EAAE,QAAsB;IACrJ,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3E,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO;IACR,CAAC;IACD,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,YAA0B;IAClF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3F,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnI,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACvE,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,yBAAyB,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;QACxE,IAAI,MAAM,MAAM,CAAC,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAA6B,EAAE,IAAY,EAAE,YAA0B,EAAE,MAAmB,EAAE,QAAsB;IACrJ,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,+BAA+B,CAAC,OAAiB,EAAE,IAAY,EAAE,YAA0B;IACzG,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpI,CAAC;IACD,OAAO,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAiB,EAAE,YAA0B,EAAE,MAAmB,EAAE,QAAsB,EAAE,OAAe;IACpJ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAe,EAAE,YAA0B;IACtF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC7B,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,oBAAoB,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAC1F,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["import { access, readFile, stat } from \"node:fs/promises\";\nimport { glob } from \"glob\";\nimport { resolve } from \"node:path\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport { collectResourceFiles } from \"./package-manager-resource-files.ts\";\nimport { conventionDirsForResource, getManifestFromPackageJson, manifestEntriesForResource } from \"./package-manager-manifest.ts\";\nimport { applyPatterns, hasGlobPattern, isOverridePattern, splitPatterns } from \"./package-manager-resource-patterns.ts\";\nimport { resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport type { PackageFilter, PathMetadata, ResourceAccumulator, ResourceMap, ResourceType } from \"./package-manager-types.ts\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\nasync function readPiManifest(packageRoot: string): Promise<ReturnType<typeof getManifestFromPackageJson> | null> {\n\ttry {\n\t\tconst content = await readFile(resolve(packageRoot, \"package.json\"), \"utf-8\");\n\t\treturn getManifestFromPackageJson(JSON.parse(content) as Record<string, unknown>);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport async function collectPackageResources(\n\tpackageRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): Promise<boolean> {\n\tif (filter) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst patterns = filter[resourceType as keyof PackageFilter];\n\t\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\t\tif (patterns !== undefined) await applyPackageFilter(packageRoot, patterns, resourceType, target, metadata);\n\t\t\telse await collectDefaultResources(packageRoot, resourceType, target, metadata);\n\t\t}\n\t\treturn true;\n\t}\n\tconst manifest = await readPiManifest(packageRoot);\n\tif (manifest) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\t\t\tif (entries !== undefined) {\n\t\t\t\tawait addManifestEntries(entries, packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (resourceType === \"workflows\") await collectDefaultResources(packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t}\n\t\treturn true;\n\t}\n\tlet hasAnyDir = false;\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\t\tif (!(await exists(dir))) continue;\n\t\t\tfor (const f of await collectResourceFiles(dir, resourceType)) addResource(getTargetMap(accumulator, resourceType), f, metadata, true);\n\t\t\thasAnyDir = true;\n\t\t}\n\t}\n\treturn hasAnyDir;\n}\n\nasync function collectDefaultResources(packageRoot: string, resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tconst manifest = await readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries !== undefined) {\n\t\tawait addManifestEntries(entries, packageRoot, resourceType, target, metadata);\n\t\treturn;\n\t}\n\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\tif (!(await exists(dir))) continue;\n\t\tfor (const f of await collectResourceFiles(dir, resourceType)) addResource(target, f, metadata, true);\n\t}\n}\n\nasync function applyPackageFilter(packageRoot: string, userPatterns: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tconst { allFiles } = await collectManifestFiles(packageRoot, resourceType);\n\tif (userPatterns.length === 0) {\n\t\tfor (const f of allFiles) addResource(target, f, metadata, false);\n\t\treturn;\n\t}\n\tconst enabledByUser = applyPatterns(allFiles, userPatterns, packageRoot);\n\tfor (const f of allFiles) addResource(target, f, metadata, enabledByUser.has(f));\n}\n\nasync function collectManifestFiles(packageRoot: string, resourceType: ResourceType): Promise<{ allFiles: string[]; enabledByManifest: Set<string> }> {\n\tconst manifest = await readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries && entries.length > 0) {\n\t\tconst allFiles = await collectFilesFromManifestEntries(entries, packageRoot, resourceType);\n\t\tconst manifestPatterns = entries.filter(isOverridePattern);\n\t\tconst enabledByManifest = manifestPatterns.length > 0 ? applyPatterns(allFiles, manifestPatterns, packageRoot) : new Set(allFiles);\n\t\treturn { allFiles: Array.from(enabledByManifest), enabledByManifest };\n\t}\n\tconst allFiles: string[] = [];\n\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\tif (await exists(dir)) allFiles.push(...await collectResourceFiles(dir, resourceType));\n\t}\n\treturn { allFiles, enabledByManifest: new Set(allFiles) };\n}\n\nasync function addManifestEntries(entries: string[] | undefined, root: string, resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tif (!entries) return;\n\tconst allFiles = await collectFilesFromManifestEntries(entries, root, resourceType);\n\tconst patterns = entries.filter(isOverridePattern);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, root);\n\tfor (const f of allFiles) if (enabledPaths.has(f)) addResource(target, f, metadata, true);\n}\n\nasync function collectFilesFromManifestEntries(entries: string[], root: string, resourceType: ResourceType): Promise<string[]> {\n\tconst resolved: string[] = [];\n\tfor (const entry of entries.filter((entry) => !isOverridePattern(entry))) {\n\t\tif (!hasGlobPattern(entry)) resolved.push(resolve(root, entry));\n\t\telse resolved.push(...(await glob(entry, { cwd: root, absolute: true, dot: false, nodir: false })).map((match) => resolve(match)));\n\t}\n\treturn collectFilesFromPaths(resolved, resourceType);\n}\n\nexport async function resolveLocalEntries(entries: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata, baseDir: string): Promise<void> {\n\tif (entries.length === 0) return;\n\tconst { plain, patterns } = splitPatterns(entries);\n\tconst resolvedPlain = plain.map((p) => resolvePathFromBase(p, baseDir));\n\tconst allFiles = await collectFilesFromPaths(resolvedPlain, resourceType);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, baseDir);\n\tfor (const f of allFiles) addResource(target, f, metadata, enabledPaths.has(f));\n}\n\nexport async function collectFilesFromPaths(paths: string[], resourceType: ResourceType): Promise<string[]> {\n\tconst files: string[] = [];\n\tfor (const p of paths) {\n\t\tif (!(await exists(p))) continue;\n\t\ttry {\n\t\t\tconst stats = await stat(p);\n\t\t\tif (stats.isFile()) files.push(p);\n\t\t\telse if (stats.isDirectory()) files.push(...await collectResourceFiles(p, resourceType));\n\t\t} catch {}\n\t}\n\treturn files;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"package-manager-resource-collector.js","sourceRoot":"","sources":["../../src/core/package-manager-resource-collector.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, readFile, stat } from \"node:fs/promises\";\nimport { glob } from \"glob\";\nimport { resolve } from \"node:path\";\nimport { addResource, getTargetMap } from \"./package-manager-resource-accumulator.ts\";\nimport { collectResourceFiles } from \"./package-manager-resource-files.ts\";\nimport { conventionDirsForResource, getManifestFromPackageJson, manifestEntriesForResource } from \"./package-manager-manifest.ts\";\nimport { applyAutoloadDisabledPatterns, applyPatterns, hasGlobPattern, isOverridePattern, splitPatterns } from \"./package-manager-resource-patterns.ts\";\nimport { resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport type { PackageFilter, PathMetadata, ResourceAccumulator, ResourceMap, ResourceType } from \"./package-manager-types.ts\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry { await access(path); return true; } catch { return false; }\n}\n\nasync function readPiManifest(packageRoot: string): Promise<ReturnType<typeof getManifestFromPackageJson> | null> {\n\ttry {\n\t\tconst content = await readFile(resolve(packageRoot, \"package.json\"), \"utf-8\");\n\t\treturn getManifestFromPackageJson(JSON.parse(content) as Record<string, unknown>);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport async function collectPackageResources(\n\tpackageRoot: string,\n\taccumulator: ResourceAccumulator,\n\tfilter: PackageFilter | undefined,\n\tmetadata: PathMetadata,\n): Promise<boolean> {\n\tif (filter) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst patterns = filter[resourceType];\n\t\t\tconst target = getTargetMap(accumulator, resourceType);\n\t\t\tif (filter.autoload === false) {\n\t\t\t\tconst { allFiles } = await collectManifestFiles(packageRoot, resourceType);\n\t\t\t\tconst selected = applyAutoloadDisabledPatterns(allFiles, patterns ?? [], packageRoot);\n\t\t\t\tfor (const [filePath, enabled] of selected) addResource(target, filePath, metadata, enabled);\n\t\t\t} else if (patterns !== undefined) await applyPackageFilter(packageRoot, patterns, resourceType, target, metadata);\n\t\t\telse await collectDefaultResources(packageRoot, resourceType, target, metadata);\n\t\t}\n\t\treturn true;\n\t}\n\tconst manifest = await readPiManifest(packageRoot);\n\tif (manifest) {\n\t\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\t\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\t\t\tif (entries !== undefined) {\n\t\t\t\tawait addManifestEntries(entries, packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (resourceType === \"workflows\") await collectDefaultResources(packageRoot, resourceType, getTargetMap(accumulator, resourceType), metadata);\n\t\t}\n\t\treturn true;\n\t}\n\tlet hasAnyDir = false;\n\tfor (const resourceType of [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"] as const) {\n\t\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\t\tif (!(await exists(dir))) continue;\n\t\t\tfor (const f of await collectResourceFiles(dir, resourceType)) addResource(getTargetMap(accumulator, resourceType), f, metadata, true);\n\t\t\thasAnyDir = true;\n\t\t}\n\t}\n\treturn hasAnyDir;\n}\n\nasync function collectDefaultResources(packageRoot: string, resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tconst manifest = await readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries !== undefined) {\n\t\tawait addManifestEntries(entries, packageRoot, resourceType, target, metadata);\n\t\treturn;\n\t}\n\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\tif (!(await exists(dir))) continue;\n\t\tfor (const f of await collectResourceFiles(dir, resourceType)) addResource(target, f, metadata, true);\n\t}\n}\n\nasync function applyPackageFilter(packageRoot: string, userPatterns: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tconst { allFiles } = await collectManifestFiles(packageRoot, resourceType);\n\tif (userPatterns.length === 0) {\n\t\tfor (const f of allFiles) addResource(target, f, metadata, false);\n\t\treturn;\n\t}\n\tconst enabledByUser = applyPatterns(allFiles, userPatterns, packageRoot);\n\tfor (const f of allFiles) addResource(target, f, metadata, enabledByUser.has(f));\n}\n\nasync function collectManifestFiles(packageRoot: string, resourceType: ResourceType): Promise<{ allFiles: string[]; enabledByManifest: Set<string> }> {\n\tconst manifest = await readPiManifest(packageRoot);\n\tconst entries = manifestEntriesForResource(manifest, resourceType);\n\tif (entries && entries.length > 0) {\n\t\tconst allFiles = await collectFilesFromManifestEntries(entries, packageRoot, resourceType);\n\t\tconst manifestPatterns = entries.filter(isOverridePattern);\n\t\tconst enabledByManifest = manifestPatterns.length > 0 ? applyPatterns(allFiles, manifestPatterns, packageRoot) : new Set(allFiles);\n\t\treturn { allFiles: Array.from(enabledByManifest), enabledByManifest };\n\t}\n\tconst allFiles: string[] = [];\n\tfor (const dir of conventionDirsForResource(packageRoot, resourceType)) {\n\t\tif (await exists(dir)) allFiles.push(...await collectResourceFiles(dir, resourceType));\n\t}\n\treturn { allFiles, enabledByManifest: new Set(allFiles) };\n}\n\nasync function addManifestEntries(entries: string[] | undefined, root: string, resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata): Promise<void> {\n\tif (!entries) return;\n\tconst allFiles = await collectFilesFromManifestEntries(entries, root, resourceType);\n\tconst patterns = entries.filter(isOverridePattern);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, root);\n\tfor (const f of allFiles) if (enabledPaths.has(f)) addResource(target, f, metadata, true);\n}\n\nasync function collectFilesFromManifestEntries(entries: string[], root: string, resourceType: ResourceType): Promise<string[]> {\n\tconst resolved: string[] = [];\n\tfor (const entry of entries.filter((entry) => !isOverridePattern(entry))) {\n\t\tif (!hasGlobPattern(entry)) resolved.push(resolve(root, entry));\n\t\telse resolved.push(...(await glob(entry, { cwd: root, absolute: true, dot: false, nodir: false })).map((match) => resolve(match)));\n\t}\n\treturn collectFilesFromPaths(resolved, resourceType);\n}\n\nexport async function resolveLocalEntries(entries: string[], resourceType: ResourceType, target: ResourceMap, metadata: PathMetadata, baseDir: string): Promise<void> {\n\tif (entries.length === 0) return;\n\tconst { plain, patterns } = splitPatterns(entries);\n\tconst resolvedPlain = plain.map((p) => resolvePathFromBase(p, baseDir));\n\tconst allFiles = await collectFilesFromPaths(resolvedPlain, resourceType);\n\tconst enabledPaths = applyPatterns(allFiles, patterns, baseDir);\n\tfor (const f of allFiles) addResource(target, f, metadata, enabledPaths.has(f));\n}\n\nexport async function collectFilesFromPaths(paths: string[], resourceType: ResourceType): Promise<string[]> {\n\tconst files: string[] = [];\n\tfor (const p of paths) {\n\t\tif (!(await exists(p))) continue;\n\t\ttry {\n\t\t\tconst stats = await stat(p);\n\t\t\tif (stats.isFile()) files.push(p);\n\t\t\telse if (stats.isDirectory()) files.push(...await collectResourceFiles(p, resourceType));\n\t\t} catch {}\n\t}\n\treturn files;\n}\n"]}
|
|
@@ -9,4 +9,5 @@ export declare function splitPatterns(entries: string[]): {
|
|
|
9
9
|
export declare function matchesAnyPattern(filePath: string, patterns: string[], baseDir: string): boolean;
|
|
10
10
|
export declare function isEnabledByOverrides(filePath: string, patterns: string[], baseDir: string): boolean;
|
|
11
11
|
export declare function applyPatterns(allPaths: string[], patterns: string[], baseDir: string): Set<string>;
|
|
12
|
+
export declare function applyAutoloadDisabledPatterns(allPaths: string[], patterns: string[], baseDir: string): Map<string, boolean>;
|
|
12
13
|
//# sourceMappingURL=package-manager-resource-patterns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-resource-patterns.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-patterns.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAWxF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA0BhG;AA+BD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAiBnG;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAuClG"}
|
|
1
|
+
{"version":3,"file":"package-manager-resource-patterns.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-resource-patterns.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAWxF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA0BhG;AA+BD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAiBnG;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAuClG;AAED,wBAAgB,6BAA6B,CAC5C,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,MAAM,GACb,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CActB"}
|
|
@@ -133,4 +133,19 @@ export function applyPatterns(allPaths, patterns, baseDir) {
|
|
|
133
133
|
}
|
|
134
134
|
return new Set(result);
|
|
135
135
|
}
|
|
136
|
+
export function applyAutoloadDisabledPatterns(allPaths, patterns, baseDir) {
|
|
137
|
+
const result = new Map();
|
|
138
|
+
for (const pattern of patterns) {
|
|
139
|
+
const prefixed = pattern.startsWith("+") || pattern.startsWith("-") || pattern.startsWith("!");
|
|
140
|
+
const target = prefixed ? pattern.slice(1) : pattern;
|
|
141
|
+
const enabled = !pattern.startsWith("-") && !pattern.startsWith("!");
|
|
142
|
+
const exact = pattern.startsWith("+") || pattern.startsWith("-");
|
|
143
|
+
for (const filePath of allPaths) {
|
|
144
|
+
if (exact ? matchesAnyExactPattern(filePath, [target], baseDir) : matchesAnyPattern(filePath, [target], baseDir)) {
|
|
145
|
+
result.set(filePath, enabled);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
136
151
|
//# sourceMappingURL=package-manager-resource-patterns.js.map
|