@ai-agent-forge/agent-forge 0.86.7 → 0.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/README.md +10 -11
- package/dist/artifacts/artifact-store.d.ts.map +1 -1
- package/dist/artifacts/artifact-store.js +9 -5
- package/dist/artifacts/artifact-store.js.map +1 -1
- package/dist/bundle/.build-manifest.json +430 -413
- package/dist/bundle/chunks/{chunk-A7GUOX2H.js → chunk-6ZKDNZHA.js} +5 -1
- package/dist/bundle/chunks/chunk-HLJEVRWP.js +13 -0
- package/dist/bundle/chunks/chunk-YGHQME4V.js +1456 -0
- package/dist/bundle/chunks/image-resize-worker.js +12 -1
- package/dist/bundle/chunks/{virtual-modules-3IZ4MYSQ.js → virtual-modules-KZ5DRH7Q.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/client.js +1 -1
- package/dist/bundle/index.js +2 -2
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +231 -185
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts.map +1 -1
- package/dist/cli/auth-check.js +17 -4
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/auth-command.d.ts.map +1 -1
- package/dist/cli/auth-command.js +15 -9
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +14 -7
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/experimental/command.d.ts.map +1 -1
- package/dist/cli/experimental/command.js +6 -5
- package/dist/cli/experimental/command.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +9 -8
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/plugin-manager-controller.d.ts.map +1 -1
- package/dist/cli/plugin-manager-controller.js +2 -1
- package/dist/cli/plugin-manager-controller.js.map +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +8 -5
- package/dist/cli/serve.js.map +1 -1
- package/dist/client/remote-session.d.ts.map +1 -1
- package/dist/client/remote-session.js +16 -9
- package/dist/client/remote-session.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -3
- package/dist/config.js.map +1 -1
- package/dist/core/agent-capability-contract.d.ts +0 -7
- package/dist/core/agent-capability-contract.d.ts.map +1 -1
- package/dist/core/agent-capability-contract.js +72 -68
- package/dist/core/agent-capability-contract.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +5 -4
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts +6 -10
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +35 -133
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-context.d.ts.map +1 -1
- package/dist/core/agent-session-context.js +18 -13
- package/dist/core/agent-session-context.js.map +1 -1
- package/dist/core/agent-session-internal.d.ts +0 -6
- package/dist/core/agent-session-internal.d.ts.map +1 -1
- package/dist/core/agent-session-internal.js.map +1 -1
- package/dist/core/agent-session-model.d.ts.map +1 -1
- package/dist/core/agent-session-model.js +2 -1
- package/dist/core/agent-session-model.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +3 -3
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +7 -6
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tools.d.ts.map +1 -1
- package/dist/core/agent-session-tools.js +3 -2
- package/dist/core/agent-session-tools.js.map +1 -1
- package/dist/core/agent-session.d.ts +40 -22
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +147 -67
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js +11 -5
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +9 -6
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +2 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/embedded-sdk.d.ts.map +1 -1
- package/dist/core/embedded-sdk.js +10 -6
- package/dist/core/embedded-sdk.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +9 -4
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/extensions/agent-composition.d.ts.map +1 -1
- package/dist/core/extensions/agent-composition.js +26 -19
- package/dist/core/extensions/agent-composition.js.map +1 -1
- package/dist/core/extensions/bootstrap-agent-loop.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-agent-loop.js +3 -2
- package/dist/core/extensions/bootstrap-agent-loop.js.map +1 -1
- package/dist/core/extensions/bootstrap-compaction-policy.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-compaction-policy.js +0 -34
- package/dist/core/extensions/bootstrap-compaction-policy.js.map +1 -1
- package/dist/core/extensions/bootstrap-lifecycle.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-lifecycle.js +20 -17
- package/dist/core/extensions/bootstrap-lifecycle.js.map +1 -1
- package/dist/core/extensions/bootstrap-overflow-policy.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-overflow-policy.js +2 -1
- package/dist/core/extensions/bootstrap-overflow-policy.js.map +1 -1
- package/dist/core/extensions/bootstrap-retry-policy.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-retry-policy.js +4 -3
- package/dist/core/extensions/bootstrap-retry-policy.js.map +1 -1
- package/dist/core/extensions/bootstrap-skills.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-skills.js +7 -6
- package/dist/core/extensions/bootstrap-skills.js.map +1 -1
- package/dist/core/extensions/bootstrap-tools.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-tools.js +2 -1
- package/dist/core/extensions/bootstrap-tools.js.map +1 -1
- package/dist/core/extensions/capability-plugin.d.ts.map +1 -1
- package/dist/core/extensions/capability-plugin.js +37 -13
- package/dist/core/extensions/capability-plugin.js.map +1 -1
- package/dist/core/extensions/capability-runtime-events.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-events.js +17 -13
- package/dist/core/extensions/capability-runtime-events.js.map +1 -1
- package/dist/core/extensions/capability-runtime-guards.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-guards.js +16 -15
- package/dist/core/extensions/capability-runtime-guards.js.map +1 -1
- package/dist/core/extensions/capability-runtime-manifest.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-manifest.js +52 -30
- package/dist/core/extensions/capability-runtime-manifest.js.map +1 -1
- package/dist/core/extensions/capability-runtime-validation.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-validation.js +66 -65
- package/dist/core/extensions/capability-runtime-validation.js.map +1 -1
- package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime.js +147 -127
- package/dist/core/extensions/capability-runtime.js.map +1 -1
- package/dist/core/extensions/compaction-memory-failure-mode.d.ts.map +1 -1
- package/dist/core/extensions/compaction-memory-failure-mode.js +3 -2
- package/dist/core/extensions/compaction-memory-failure-mode.js.map +1 -1
- package/dist/core/extensions/context-strategy-binding.d.ts.map +1 -1
- package/dist/core/extensions/context-strategy-binding.js +7 -4
- package/dist/core/extensions/context-strategy-binding.js.map +1 -1
- package/dist/core/extensions/lifecycle-catalog.d.ts.map +1 -1
- package/dist/core/extensions/lifecycle-catalog.js +290 -279
- package/dist/core/extensions/lifecycle-catalog.js.map +1 -1
- package/dist/core/extensions/lifecycle-delivery-queue.d.ts.map +1 -1
- package/dist/core/extensions/lifecycle-delivery-queue.js +3 -2
- package/dist/core/extensions/lifecycle-delivery-queue.js.map +1 -1
- package/dist/core/extensions/provider-failover.d.ts +7 -3
- package/dist/core/extensions/provider-failover.d.ts.map +1 -1
- package/dist/core/extensions/provider-failover.js +9 -8
- package/dist/core/extensions/provider-failover.js.map +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts +6 -6
- package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
- package/dist/core/facade/coding-agent-facade.js +2 -3
- package/dist/core/facade/coding-agent-facade.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +2 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/i18n/index.d.ts +14 -0
- package/dist/core/i18n/index.d.ts.map +1 -0
- package/dist/core/i18n/index.js +67 -0
- package/dist/core/i18n/index.js.map +1 -0
- package/dist/core/i18n/locales/en/example.d.ts +7 -0
- package/dist/core/i18n/locales/en/example.d.ts.map +1 -0
- package/dist/core/i18n/locales/en/example.js +7 -0
- package/dist/core/i18n/locales/en/example.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/cli.d.ts +8 -0
- package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/cli.js +229 -0
- package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/common.d.ts +6 -0
- package/dist/core/i18n/locales/zh-cn/common.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/common.js +6 -0
- package/dist/core/i18n/locales/zh-cn/common.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts +13 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.js +173 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-core.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts +12 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js +582 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +9 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js +55 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts +11 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +455 -0
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.d.ts +9 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.js +191 -0
- package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/example.d.ts +7 -0
- package/dist/core/i18n/locales/zh-cn/example.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/example.js +10 -0
- package/dist/core/i18n/locales/zh-cn/example.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/index.d.ts +2 -0
- package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/index.js +41 -0
- package/dist/core/i18n/locales/zh-cn/index.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts +10 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js +267 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.d.ts +11 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.js +67 -0
- package/dist/core/i18n/locales/zh-cn/keybindings.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts +7 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.js +39 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts +10 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.js +15 -0
- package/dist/core/i18n/locales/zh-cn/tui-builtin.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts +13 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +102 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts +12 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js +286 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts +9 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js +79 -0
- package/dist/core/i18n/locales/zh-cn/tui-interactive-misc.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts +8 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.js +72 -0
- package/dist/core/i18n/locales/zh-cn/tui-self-owned.js.map +1 -0
- package/dist/core/keybindings.d.ts +15 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +18 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +5 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/model-config.d.ts +0 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +9 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +11 -7
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/package-install-host.d.ts.map +1 -1
- package/dist/core/package-install-host.js +4 -3
- package/dist/core/package-install-host.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +15 -10
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/package-resource-collection.d.ts.map +1 -1
- package/dist/core/package-resource-collection.js +2 -1
- package/dist/core/package-resource-collection.js.map +1 -1
- package/dist/core/package-source.d.ts.map +1 -1
- package/dist/core/package-source.js +3 -2
- package/dist/core/package-source.js.map +1 -1
- package/dist/core/provider-composer.d.ts +2 -2
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +29 -21
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +6 -2
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +15 -5
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/sdk.d.ts +27 -5
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +80 -55
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +5 -2
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-export.d.ts.map +1 -1
- package/dist/core/session-export.js +2 -1
- package/dist/core/session-export.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +39 -29
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-storage.d.ts.map +1 -1
- package/dist/core/session-storage.js +3 -3
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/settings-manager.d.ts +20 -20
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +47 -59
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +53 -32
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +25 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +11 -7
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +9 -4
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +4 -3
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +3 -2
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +2 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +6 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +2 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/durable/durable-service.d.ts.map +1 -1
- package/dist/durable/durable-service.js +25 -18
- package/dist/durable/durable-service.js.map +1 -1
- package/dist/host/checkpoint-commit.d.ts.map +1 -1
- package/dist/host/checkpoint-commit.js +2 -1
- package/dist/host/checkpoint-commit.js.map +1 -1
- package/dist/host/manual-compaction.d.ts.map +1 -1
- package/dist/host/manual-compaction.js +2 -1
- package/dist/host/manual-compaction.js.map +1 -1
- package/dist/host/output-projection.d.ts +0 -13
- package/dist/host/output-projection.d.ts.map +1 -1
- package/dist/host/output-projection.js +16 -2
- package/dist/host/output-projection.js.map +1 -1
- package/dist/host/summary-retry.d.ts.map +1 -1
- package/dist/host/summary-retry.js +3 -2
- package/dist/host/summary-retry.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +97 -60
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/agents-view.js +18 -15
- package/dist/modes/interactive/components/agents-view.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +6 -5
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +12 -7
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +2 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +6 -5
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +9 -5
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +18 -15
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +2 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.js +5 -4
- package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
- package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-input.js +2 -1
- package/dist/modes/interactive/components/dialog-input.js.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.js +4 -3
- package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +11 -10
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +0 -2
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +8 -10
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -0
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +3 -2
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +12 -11
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js +6 -2
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +28 -16
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +10 -9
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.js +22 -13
- package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.js +27 -12
- package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.d.ts +60 -0
- package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/queue-manager-selector.js +166 -0
- package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +16 -14
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +43 -31
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -6
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +115 -120
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.js +5 -4
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +3 -2
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +4 -3
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +14 -5
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +2 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +11 -4
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +8 -3
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-list.js +7 -6
- package/dist/modes/interactive/components/tree-list.js.map +1 -1
- package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-render.js +28 -23
- package/dist/modes/interactive/components/tree-render.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +9 -7
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +5 -4
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/workflow-view.js +36 -21
- package/dist/modes/interactive/components/workflow-view.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth.js +71 -40
- package/dist/modes/interactive/interactive-auth.js.map +1 -1
- package/dist/modes/interactive/interactive-commands.d.ts +1 -0
- package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-commands.js +3 -0
- package/dist/modes/interactive/interactive-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-dialog-ui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-dialog-ui.js +5 -5
- package/dist/modes/interactive/interactive-dialog-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-format.js +34 -18
- package/dist/modes/interactive/interactive-format.js.map +1 -1
- package/dist/modes/interactive/interactive-helpers.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-helpers.js +7 -2
- package/dist/modes/interactive/interactive-helpers.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +4 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +350 -279
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.d.ts +9 -0
- package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +79 -25
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +5 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +26 -23
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +3 -2
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +3 -2
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +0 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +3 -14
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +0 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +0 -19
- 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.map +1 -1
- package/dist/package-manager-cli.js +28 -13
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/plugins/ecosystem/catalog.d.ts.map +1 -1
- package/dist/plugins/ecosystem/catalog.js +3 -2
- package/dist/plugins/ecosystem/catalog.js.map +1 -1
- package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
- package/dist/plugins/ecosystem/cli.js +2 -1
- package/dist/plugins/ecosystem/cli.js.map +1 -1
- package/dist/plugins/ecosystem/default-plugin-market.d.ts.map +1 -1
- package/dist/plugins/ecosystem/default-plugin-market.js +3 -2
- package/dist/plugins/ecosystem/default-plugin-market.js.map +1 -1
- package/dist/plugins/ecosystem/distribution.d.ts.map +1 -1
- package/dist/plugins/ecosystem/distribution.js +2 -1
- package/dist/plugins/ecosystem/distribution.js.map +1 -1
- package/dist/plugins/ecosystem/installer.d.ts.map +1 -1
- package/dist/plugins/ecosystem/installer.js +3 -2
- package/dist/plugins/ecosystem/installer.js.map +1 -1
- package/dist/plugins/ecosystem/node-disk-registry-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-disk-registry-source.js +20 -17
- package/dist/plugins/ecosystem/node-disk-registry-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-distribution-host.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-distribution-host.js +35 -34
- package/dist/plugins/ecosystem/node-distribution-host.js.map +1 -1
- package/dist/plugins/ecosystem/node-npm-registry-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-npm-registry-source.js +35 -34
- package/dist/plugins/ecosystem/node-npm-registry-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-host.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-host.js +9 -8
- package/dist/plugins/ecosystem/node-package-install-host.js.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-persistence.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-package-install-persistence.js +4 -3
- package/dist/plugins/ecosystem/node-package-install-persistence.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +9 -2
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js +44 -5
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-trust-root.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-trust-root.js +10 -9
- package/dist/plugins/ecosystem/node-plugin-trust-root.js.map +1 -1
- package/dist/plugins/ecosystem/node-registry-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-registry-source.js +31 -30
- package/dist/plugins/ecosystem/node-registry-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-release-package-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-release-package-source.js +30 -29
- package/dist/plugins/ecosystem/node-release-package-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-tar-writer.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-tar-writer.js +11 -10
- package/dist/plugins/ecosystem/node-tar-writer.js.map +1 -1
- package/dist/plugins/ecosystem/node-url-package-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-url-package-source.js +21 -20
- package/dist/plugins/ecosystem/node-url-package-source.js.map +1 -1
- package/dist/plugins/ecosystem/plugin-acquisition.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-acquisition.js +3 -2
- package/dist/plugins/ecosystem/plugin-acquisition.js.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +9 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.js +5 -0
- package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
- package/dist/plugins/ecosystem/registry-cli-adapter.d.ts.map +1 -1
- package/dist/plugins/ecosystem/registry-cli-adapter.js +2 -1
- package/dist/plugins/ecosystem/registry-cli-adapter.js.map +1 -1
- package/dist/plugins/ecosystem/registry.d.ts.map +1 -1
- package/dist/plugins/ecosystem/registry.js +35 -32
- package/dist/plugins/ecosystem/registry.js.map +1 -1
- package/dist/plugins/ecosystem/resolver.d.ts.map +1 -1
- package/dist/plugins/ecosystem/resolver.js +3 -2
- package/dist/plugins/ecosystem/resolver.js.map +1 -1
- package/dist/plugins/ecosystem/selection-store.d.ts.map +1 -1
- package/dist/plugins/ecosystem/selection-store.js +11 -10
- package/dist/plugins/ecosystem/selection-store.js.map +1 -1
- package/dist/plugins/ecosystem/selection.d.ts.map +1 -1
- package/dist/plugins/ecosystem/selection.js +8 -7
- package/dist/plugins/ecosystem/selection.js.map +1 -1
- package/dist/plugins/ecosystem/state.d.ts.map +1 -1
- package/dist/plugins/ecosystem/state.js +24 -23
- package/dist/plugins/ecosystem/state.js.map +1 -1
- package/dist/plugins/ecosystem/updates.d.ts.map +1 -1
- package/dist/plugins/ecosystem/updates.js +5 -4
- package/dist/plugins/ecosystem/updates.js.map +1 -1
- package/dist/plugins/mcp-http.d.ts +0 -17
- package/dist/plugins/mcp-http.d.ts.map +1 -1
- package/dist/plugins/mcp-http.js +30 -7
- package/dist/plugins/mcp-http.js.map +1 -1
- package/dist/plugins/plugin-supervisor.d.ts.map +1 -1
- package/dist/plugins/plugin-supervisor.js +19 -1
- package/dist/plugins/plugin-supervisor.js.map +1 -1
- package/dist/profile/first-roles.d.ts.map +1 -1
- package/dist/profile/first-roles.js +10 -1
- package/dist/profile/first-roles.js.map +1 -1
- package/dist/profile/goal-plugin.d.ts.map +1 -1
- package/dist/profile/goal-plugin.js +24 -5
- package/dist/profile/goal-plugin.js.map +1 -1
- package/dist/profile/identity.d.ts.map +1 -1
- package/dist/profile/identity.js +7 -6
- package/dist/profile/identity.js.map +1 -1
- package/dist/profile/lock.d.ts.map +1 -1
- package/dist/profile/lock.js +15 -1
- package/dist/profile/lock.js.map +1 -1
- package/dist/profile/plan-plugin.d.ts.map +1 -1
- package/dist/profile/plan-plugin.js +26 -13
- package/dist/profile/plan-plugin.js.map +1 -1
- package/dist/profile/plugin-profiles.d.ts.map +1 -1
- package/dist/profile/plugin-profiles.js +2 -1
- package/dist/profile/plugin-profiles.js.map +1 -1
- package/dist/profile/policy-manifest.d.ts.map +1 -1
- package/dist/profile/policy-manifest.js +5 -4
- package/dist/profile/policy-manifest.js.map +1 -1
- package/dist/profile/profile-registry.d.ts +0 -12
- package/dist/profile/profile-registry.d.ts.map +1 -1
- package/dist/profile/profile-registry.js +14 -1
- package/dist/profile/profile-registry.js.map +1 -1
- package/dist/profile/role-catalog.d.ts +0 -1
- package/dist/profile/role-catalog.d.ts.map +1 -1
- package/dist/profile/role-catalog.js +17 -15
- package/dist/profile/role-catalog.js.map +1 -1
- package/dist/profile/role-orchestrator.d.ts.map +1 -1
- package/dist/profile/role-orchestrator.js +8 -7
- package/dist/profile/role-orchestrator.js.map +1 -1
- package/dist/profile/role-runner.d.ts.map +1 -1
- package/dist/profile/role-runner.js +3 -2
- package/dist/profile/role-runner.js.map +1 -1
- package/dist/profile/root-facade.d.ts.map +1 -1
- package/dist/profile/root-facade.js +2 -1
- package/dist/profile/root-facade.js.map +1 -1
- package/dist/profile/skill-discovery-wiring.d.ts.map +1 -1
- package/dist/profile/skill-discovery-wiring.js +7 -2
- package/dist/profile/skill-discovery-wiring.js.map +1 -1
- package/dist/profile/state-store.d.ts.map +1 -1
- package/dist/profile/state-store.js +13 -9
- package/dist/profile/state-store.js.map +1 -1
- package/dist/profile/todo-plugin.d.ts.map +1 -1
- package/dist/profile/todo-plugin.js +9 -4
- package/dist/profile/todo-plugin.js.map +1 -1
- package/dist/profiles/builtin-suites.d.ts +13 -6
- package/dist/profiles/builtin-suites.d.ts.map +1 -1
- package/dist/profiles/builtin-suites.js +15 -6
- package/dist/profiles/builtin-suites.js.map +1 -1
- package/dist/profiles/suite-loader.d.ts +25 -1
- package/dist/profiles/suite-loader.d.ts.map +1 -1
- package/dist/profiles/suite-loader.js +34 -9
- package/dist/profiles/suite-loader.js.map +1 -1
- package/dist/remote/server-entry.d.ts.map +1 -1
- package/dist/remote/server-entry.js +3 -2
- package/dist/remote/server-entry.js.map +1 -1
- package/dist/remote/session-source.d.ts.map +1 -1
- package/dist/remote/session-source.js +8 -4
- package/dist/remote/session-source.js.map +1 -1
- package/dist/share/session-share.d.ts.map +1 -1
- package/dist/share/session-share.js +14 -2
- package/dist/share/session-share.js.map +1 -1
- package/dist/testing/plugin-testkit.d.ts.map +1 -1
- package/dist/testing/plugin-testkit.js +4 -3
- package/dist/testing/plugin-testkit.js.map +1 -1
- package/dist/testing/runtime-delivery-queue.d.ts.map +1 -1
- package/dist/testing/runtime-delivery-queue.js +2 -1
- package/dist/testing/runtime-delivery-queue.js.map +1 -1
- package/dist/testing/session-plugin-testkit.d.ts.map +1 -1
- package/dist/testing/session-plugin-testkit.js +10 -7
- package/dist/testing/session-plugin-testkit.js.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js +2 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +7 -6
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js +3 -2
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/photon.d.ts +2 -2
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js +2 -2
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +9 -8
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +23 -13
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +5 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +1 -3
- package/docs/docs.json +4 -0
- package/docs/index.md +1 -0
- package/docs/keybindings.md +3 -0
- package/docs/mcp.md +103 -0
- package/docs/models.md +14 -22
- package/docs/providers.md +0 -1
- package/docs/quickstart.md +1 -1
- package/docs/rpc.md +1 -26
- package/docs/sdk.md +4 -6
- package/docs/settings.md +10 -12
- package/docs/skills.md +1 -9
- package/docs/terminal-setup.md +2 -3
- package/docs/usage.md +7 -6
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/with-deps/plugin.json +1 -1
- package/examples/sdk/10-settings.ts +2 -4
- package/examples/sdk/12-full-control.ts +1 -2
- package/package.json +1 -3
- package/dist/bundle/chunks/chunk-EALJ5DDX.js +0 -1452
- package/dist/core/extensions/microcompact.d.ts +0 -80
- package/dist/core/extensions/microcompact.d.ts.map +0 -1
- package/dist/core/extensions/microcompact.js +0 -134
- package/dist/core/extensions/microcompact.js.map +0 -1
- package/dist/server/create-harness.d.ts +0 -26
- package/dist/server/create-harness.d.ts.map +0 -1
- package/dist/server/create-harness.js +0 -106
- package/dist/server/create-harness.js.map +0 -1
|
@@ -5,6 +5,7 @@ import { homedir } from "node:os";
|
|
|
5
5
|
import { basename, dirname, join, relative } from "node:path";
|
|
6
6
|
import { Container, getKeybindings, Input, Spacer, truncateToWidth, visibleWidth, } from "@agent-forge/tui";
|
|
7
7
|
import { CONFIG_DIR_NAME } from "../../../config.js";
|
|
8
|
+
import { t } from "../../../core/i18n/index.js";
|
|
8
9
|
import { canonicalizePath, isLocalPath, resolvePath } from "../../../utils/paths.js";
|
|
9
10
|
import { theme } from "../theme/theme.js";
|
|
10
11
|
import { DynamicBorder } from "./dynamic-border.js";
|
|
@@ -41,12 +42,14 @@ function getGroupLabel(metadata, agentDir) {
|
|
|
41
42
|
if (metadata.source === "auto") {
|
|
42
43
|
if (metadata.baseDir) {
|
|
43
44
|
return metadata.scope === "user"
|
|
44
|
-
?
|
|
45
|
-
:
|
|
45
|
+
? t("User ({dir})", { dir: formatBaseDir(metadata.baseDir) })
|
|
46
|
+
: t("Project ({dir})", { dir: formatBaseDir(metadata.baseDir) });
|
|
46
47
|
}
|
|
47
|
-
return metadata.scope === "user"
|
|
48
|
+
return metadata.scope === "user"
|
|
49
|
+
? t("User ({dir})", { dir: formatBaseDir(agentDir) })
|
|
50
|
+
: t("Project ({dir})", { dir: `${CONFIG_DIR_NAME}/` });
|
|
48
51
|
}
|
|
49
|
-
return metadata.scope === "user" ? "User settings" : "Project settings";
|
|
52
|
+
return metadata.scope === "user" ? t("User settings") : t("Project settings");
|
|
50
53
|
}
|
|
51
54
|
function buildGroups(resolved, agentDir) {
|
|
52
55
|
const groupMap = new Map();
|
|
@@ -70,7 +73,7 @@ function buildGroups(resolved, agentDir) {
|
|
|
70
73
|
if (!subgroup) {
|
|
71
74
|
subgroup = {
|
|
72
75
|
type: resourceType,
|
|
73
|
-
label: RESOURCE_TYPE_LABELS[resourceType],
|
|
76
|
+
label: t(RESOURCE_TYPE_LABELS[resourceType]),
|
|
74
77
|
items: [],
|
|
75
78
|
};
|
|
76
79
|
group.subgroups.push(subgroup);
|
|
@@ -131,14 +134,14 @@ class ConfigSelectorHeader {
|
|
|
131
134
|
}
|
|
132
135
|
invalidate() { }
|
|
133
136
|
render(width) {
|
|
134
|
-
const title = theme.bold(this.writeScope === "project" ? "Project Local Resources" : "Global Resources");
|
|
137
|
+
const title = theme.bold(this.writeScope === "project" ? t("Project Local Resources") : t("Global Resources"));
|
|
135
138
|
const sep = theme.fg("muted", " · ");
|
|
136
|
-
const switchHint = this.projectModeAvailable ? keyHint("tui.input.tab", "switch mode") + sep : "";
|
|
137
|
-
const actionHint = this.writeScope === "project" ? rawKeyHint("space", "cycle inherit/+/-") : rawKeyHint("space", "toggle");
|
|
138
|
-
const hint = switchHint + actionHint + sep + rawKeyHint("esc", "close");
|
|
139
|
+
const switchHint = this.projectModeAvailable ? keyHint("tui.input.tab", t("switch mode")) + sep : "";
|
|
140
|
+
const actionHint = this.writeScope === "project" ? rawKeyHint("space", t("cycle inherit/+/-")) : rawKeyHint("space", t("toggle"));
|
|
141
|
+
const hint = switchHint + actionHint + sep + rawKeyHint("esc", t("close"));
|
|
139
142
|
const spacing = Math.max(1, width - visibleWidth(title) - visibleWidth(hint));
|
|
140
143
|
const scopeHint = this.writeScope === "project"
|
|
141
|
-
? theme.fg("muted",
|
|
144
|
+
? theme.fg("muted", t("{config}/settings.json · inherited global resources are dimmed", { config: CONFIG_DIR_NAME }))
|
|
142
145
|
: theme.fg("muted", `~/${CONFIG_DIR_NAME}/agent/settings.json`);
|
|
143
146
|
return [
|
|
144
147
|
truncateToWidth(`${title}${" ".repeat(spacing)}${hint}`, width, ""),
|
|
@@ -312,7 +315,7 @@ class ResourceList {
|
|
|
312
315
|
lines.push(...this.searchInput.render(width));
|
|
313
316
|
lines.push("");
|
|
314
317
|
if (this.filteredItems.length === 0) {
|
|
315
|
-
lines.push(theme.fg("muted", "
|
|
318
|
+
lines.push(theme.fg("muted", ` ${t("No resources found")}`));
|
|
316
319
|
return lines;
|
|
317
320
|
}
|
|
318
321
|
// Calculate visible range
|
|
@@ -324,7 +327,7 @@ class ResourceList {
|
|
|
324
327
|
if (entry.type === "group") {
|
|
325
328
|
// Main group header (no cursor)
|
|
326
329
|
const inherited = this.writeScope === "project" && entry.group.scope === "user";
|
|
327
|
-
const label = theme.bold(`${entry.group.label}${inherited ?
|
|
330
|
+
const label = theme.bold(`${entry.group.label}${inherited ? ` · ${t("inherited global")}` : ""}`);
|
|
328
331
|
const groupLine = theme.fg(inherited ? "dim" : "accent", label);
|
|
329
332
|
lines.push(truncateToWidth(` ${groupLine}`, width, ""));
|
|
330
333
|
}
|
|
@@ -583,10 +586,10 @@ class ResourceList {
|
|
|
583
586
|
return "";
|
|
584
587
|
const state = this.getProjectOverrideState(item);
|
|
585
588
|
if (state === "load")
|
|
586
|
-
return theme.fg("muted", "
|
|
589
|
+
return theme.fg("muted", ` ${t("project load")}`);
|
|
587
590
|
if (state === "unload")
|
|
588
|
-
return theme.fg("muted", "
|
|
589
|
-
return this.isInheritedGlobalItem(item) ? theme.fg("dim", "
|
|
591
|
+
return theme.fg("muted", ` ${t("project unload")}`);
|
|
592
|
+
return this.isInheritedGlobalItem(item) ? theme.fg("dim", ` ${t("inherited global")}`) : "";
|
|
590
593
|
}
|
|
591
594
|
isDimmedItem(item) {
|
|
592
595
|
return (this.writeScope === "project" &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TUI component for managing package resources (enable/disable)\n */\n\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, relative } from \"node:path\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@agent-forge/tui\";\nimport { CONFIG_DIR_NAME } from \"../../../config.ts\";\nimport type { PathMetadata, ResolvedPaths, ResolvedResource } from \"../../../core/package-manager.ts\";\nimport type { PackageSource, SettingsManager } from \"../../../core/settings-manager.ts\";\nimport { canonicalizePath, isLocalPath, resolvePath } from \"../../../utils/paths.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint, rawKeyHint } from \"./keybinding-hints.ts\";\nimport {\n\tPluginManagerEntryComponent,\n\ttype PluginManagerEntryOpenResultV1,\n\ttype PluginManagerEntryOptionsV1,\n} from \"./plugin-manager-entry.ts\";\nimport {\n\tPluginSelectionEntryComponent,\n\ttype PluginSelectionEntryOpenResultV1,\n\ttype PluginSelectionEntryOptionsV1,\n} from \"./plugin-selection-entry.ts\";\n\ntype ResourceType = \"skills\" | \"prompts\" | \"themes\";\ntype ConfigWriteScope = \"global\" | \"project\";\ntype SettingsScope = \"user\" | \"project\";\ntype ProjectOverrideState = \"inherit\" | \"load\" | \"unload\";\nexport type ScopedResolvedPaths = Record<ConfigWriteScope, ResolvedPaths>;\n\nconst RESOURCE_TYPES = [\"skills\", \"prompts\", \"themes\"] as const satisfies readonly ResourceType[];\n\nconst RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\tskills: \"Skills\",\n\tprompts: \"Prompts\",\n\tthemes: \"Themes\",\n};\n\ninterface ResourceItem {\n\tpath: string;\n\tenabled: boolean;\n\tmetadata: PathMetadata;\n\tresourceType: ResourceType;\n\tdisplayName: string;\n\tgroupKey: string;\n\tsubgroupKey: string;\n}\n\ninterface ResourceSubgroup {\n\ttype: ResourceType;\n\tlabel: string;\n\titems: ResourceItem[];\n}\n\ninterface ResourceGroup {\n\tkey: string;\n\tlabel: string;\n\tscope: \"user\" | \"project\" | \"temporary\";\n\torigin: \"package\" | \"top-level\";\n\tsource: string;\n\tsubgroups: ResourceSubgroup[];\n}\n\nfunction formatBaseDir(baseDir: string): string {\n\tconst homeDir = homedir();\n\tlet displayPath: string;\n\n\tif (baseDir === homeDir) {\n\t\tdisplayPath = \"~\";\n\t} else if (baseDir.startsWith(homeDir)) {\n\t\t// Replace home prefix with ~, normalize separators for display\n\t\tconst rest = baseDir.slice(homeDir.length);\n\t\tdisplayPath = `~${rest.replace(/\\\\/g, \"/\")}`;\n\t} else {\n\t\tdisplayPath = baseDir.replace(/\\\\/g, \"/\");\n\t}\n\n\treturn displayPath.endsWith(\"/\") ? displayPath : `${displayPath}/`;\n}\n\nfunction getGroupLabel(metadata: PathMetadata, agentDir: string): string {\n\tif (metadata.origin === \"package\") {\n\t\treturn `${metadata.source} (${metadata.scope})`;\n\t}\n\t// Top-level resources\n\tif (metadata.source === \"auto\") {\n\t\tif (metadata.baseDir) {\n\t\t\treturn metadata.scope === \"user\"\n\t\t\t\t? `User (${formatBaseDir(metadata.baseDir)})`\n\t\t\t\t: `Project (${formatBaseDir(metadata.baseDir)})`;\n\t\t}\n\t\treturn metadata.scope === \"user\" ? `User (${formatBaseDir(agentDir)})` : `Project (${CONFIG_DIR_NAME}/)`;\n\t}\n\treturn metadata.scope === \"user\" ? \"User settings\" : \"Project settings\";\n}\n\nfunction buildGroups(resolved: ResolvedPaths, agentDir: string): ResourceGroup[] {\n\tconst groupMap = new Map<string, ResourceGroup>();\n\n\tconst addToGroup = (resources: ResolvedResource[], resourceType: ResourceType) => {\n\t\tfor (const res of resources) {\n\t\t\tconst { path, enabled, metadata } = res;\n\t\t\tconst groupKey = `${metadata.origin}:${metadata.scope}:${metadata.source}:${metadata.baseDir ?? \"\"}`;\n\n\t\t\tif (!groupMap.has(groupKey)) {\n\t\t\t\tgroupMap.set(groupKey, {\n\t\t\t\t\tkey: groupKey,\n\t\t\t\t\tlabel: getGroupLabel(metadata, agentDir),\n\t\t\t\t\tscope: metadata.scope,\n\t\t\t\t\torigin: metadata.origin,\n\t\t\t\t\tsource: metadata.source,\n\t\t\t\t\tsubgroups: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst group = groupMap.get(groupKey)!;\n\t\t\tconst subgroupKey = `${groupKey}:${resourceType}`;\n\n\t\t\tlet subgroup = group.subgroups.find((sg) => sg.type === resourceType);\n\t\t\tif (!subgroup) {\n\t\t\t\tsubgroup = {\n\t\t\t\t\ttype: resourceType,\n\t\t\t\t\tlabel: RESOURCE_TYPE_LABELS[resourceType],\n\t\t\t\t\titems: [],\n\t\t\t\t};\n\t\t\t\tgroup.subgroups.push(subgroup);\n\t\t\t}\n\n\t\t\tconst fileName = basename(path);\n\t\t\tconst parentFolder = basename(dirname(path));\n\t\t\tlet displayName: string;\n\t\t\tif (resourceType === \"skills\" && fileName === \"SKILL.md\") {\n\t\t\t\tdisplayName = parentFolder;\n\t\t\t} else {\n\t\t\t\tdisplayName = fileName;\n\t\t\t}\n\t\t\tsubgroup.items.push({\n\t\t\t\tpath,\n\t\t\t\tenabled,\n\t\t\t\tmetadata,\n\t\t\t\tresourceType,\n\t\t\t\tdisplayName,\n\t\t\t\tgroupKey,\n\t\t\t\tsubgroupKey,\n\t\t\t});\n\t\t}\n\t};\n\n\taddToGroup(resolved.skills, \"skills\");\n\taddToGroup(resolved.prompts, \"prompts\");\n\taddToGroup(resolved.themes, \"themes\");\n\n\t// Sort groups: packages first, then top-level; user before project\n\tconst groups = Array.from(groupMap.values());\n\tgroups.sort((a, b) => {\n\t\tif (a.origin !== b.origin) {\n\t\t\treturn a.origin === \"package\" ? -1 : 1;\n\t\t}\n\t\tif (a.scope !== b.scope) {\n\t\t\treturn a.scope === \"user\" ? -1 : 1;\n\t\t}\n\t\treturn a.source.localeCompare(b.source);\n\t});\n\n\t// Sort subgroups within each group by type order, and items by name\n\tconst typeOrder: Record<ResourceType, number> = { skills: 0, prompts: 1, themes: 2 };\n\tfor (const group of groups) {\n\t\tgroup.subgroups.sort((a, b) => typeOrder[a.type] - typeOrder[b.type]);\n\t\tfor (const subgroup of group.subgroups) {\n\t\t\tsubgroup.items.sort((a, b) => a.displayName.localeCompare(b.displayName));\n\t\t}\n\t}\n\n\treturn groups;\n}\n\ntype FlatEntry =\n\t| { type: \"group\"; group: ResourceGroup }\n\t| { type: \"subgroup\"; subgroup: ResourceSubgroup; group: ResourceGroup }\n\t| { type: \"item\"; item: ResourceItem }\n\t| { type: \"plugin\"; entry: PluginSelectionEntryComponent }\n\t| { type: \"plugin-manager\"; entry: PluginManagerEntryComponent };\n\nclass ConfigSelectorHeader implements Component {\n\tprivate writeScope: ConfigWriteScope;\n\tprivate projectModeAvailable: boolean;\n\n\tconstructor(writeScope: ConfigWriteScope, projectModeAvailable: boolean) {\n\t\tthis.writeScope = writeScope;\n\t\tthis.projectModeAvailable = projectModeAvailable;\n\t}\n\n\tsetWriteScope(writeScope: ConfigWriteScope): void {\n\t\tthis.writeScope = writeScope;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst title = theme.bold(this.writeScope === \"project\" ? \"Project Local Resources\" : \"Global Resources\");\n\t\tconst sep = theme.fg(\"muted\", \" · \");\n\t\tconst switchHint = this.projectModeAvailable ? keyHint(\"tui.input.tab\", \"switch mode\") + sep : \"\";\n\t\tconst actionHint =\n\t\t\tthis.writeScope === \"project\" ? rawKeyHint(\"space\", \"cycle inherit/+/-\") : rawKeyHint(\"space\", \"toggle\");\n\t\tconst hint = switchHint + actionHint + sep + rawKeyHint(\"esc\", \"close\");\n\t\tconst spacing = Math.max(1, width - visibleWidth(title) - visibleWidth(hint));\n\t\tconst scopeHint =\n\t\t\tthis.writeScope === \"project\"\n\t\t\t\t? theme.fg(\"muted\", `${CONFIG_DIR_NAME}/settings.json · inherited global resources are dimmed`)\n\t\t\t\t: theme.fg(\"muted\", `~/${CONFIG_DIR_NAME}/agent/settings.json`);\n\n\t\treturn [\n\t\t\ttruncateToWidth(`${title}${\" \".repeat(spacing)}${hint}`, width, \"\"),\n\t\t\ttruncateToWidth(scopeHint, width, \"\"),\n\t\t];\n\t}\n}\n\nclass ResourceList implements Component, Focusable {\n\tprivate groupsByScope: Record<ConfigWriteScope, ResourceGroup[]>;\n\tprivate flatItems: FlatEntry[] = [];\n\tprivate filteredItems: FlatEntry[] = [];\n\tprivate selectedIndex = 0;\n\tprivate searchInput: Input;\n\tprivate maxVisible: number;\n\tprivate settingsManager: SettingsManager;\n\tprivate cwd: string;\n\tprivate agentDir: string;\n\tprivate writeScope: ConfigWriteScope;\n\tprivate inheritedEnabledByKey: Map<string, boolean>;\n\tprivate readonly pluginSelectionEntry?: PluginSelectionEntryComponent;\n\tprivate readonly pluginManagerEntry?: PluginManagerEntryComponent;\n\tprivate readonly pluginManagerScope: ConfigWriteScope;\n\n\tpublic onCancel?: () => void;\n\tpublic onExit?: () => void;\n\tpublic onToggle?: (item: ResourceItem, newEnabled: boolean) => void;\n\tpublic onSwitchMode?: () => void;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tconstructor(\n\t\tgroupsByScope: Record<ConfigWriteScope, ResourceGroup[]>,\n\t\tsettingsManager: SettingsManager,\n\t\tcwd: string,\n\t\tagentDir: string,\n\t\tterminalHeight?: number,\n\t\twriteScope: ConfigWriteScope = \"global\",\n\t\tpluginSelectionEntry?: PluginSelectionEntryComponent,\n\t\tpluginManagerEntry?: PluginManagerEntryComponent,\n\t\tpluginManagerScope: ConfigWriteScope = \"global\",\n\t) {\n\t\tthis.groupsByScope = groupsByScope;\n\t\tthis.settingsManager = settingsManager;\n\t\tthis.cwd = cwd;\n\t\tthis.agentDir = agentDir;\n\t\tthis.writeScope = writeScope;\n\t\tthis.pluginSelectionEntry = pluginSelectionEntry;\n\t\tthis.pluginManagerEntry = pluginManagerEntry;\n\t\tthis.pluginManagerScope = pluginManagerScope;\n\t\tthis.inheritedEnabledByKey = this.buildInheritedEnabledMap(groupsByScope.global);\n\t\tthis.searchInput = new Input();\n\t\t// 8 lines of chrome: top spacer + top border + spacer + header (2 lines) + spacer + bottom spacer + bottom border\n\t\tconst chrome = 8;\n\t\tthis.maxVisible = Math.max(5, (terminalHeight ?? 24) - chrome);\n\t\tthis.buildFlatList();\n\t\tthis.filteredItems = [...this.flatItems];\n\t}\n\n\tsetWriteScope(writeScope: ConfigWriteScope): void {\n\t\tthis.writeScope = writeScope;\n\t\tthis.buildFlatList();\n\t\tthis.filterItems(this.searchInput.getValue());\n\t}\n\n\tprivate get groups(): ResourceGroup[] {\n\t\treturn this.groupsByScope[this.writeScope];\n\t}\n\n\tprivate buildInheritedEnabledMap(groups: ResourceGroup[]): Map<string, boolean> {\n\t\tconst result = new Map<string, boolean>();\n\t\tfor (const group of groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tresult.set(this.getResourceItemKey(item), item.enabled);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate buildFlatList(): void {\n\t\tthis.flatItems = [];\n\t\tfor (const group of this.groups) {\n\t\t\tthis.flatItems.push({ type: \"group\", group });\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tthis.flatItems.push({ type: \"subgroup\", subgroup, group });\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tthis.flatItems.push({ type: \"item\", item });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.pluginSelectionEntry !== undefined) {\n\t\t\tthis.flatItems.push({ type: \"plugin\", entry: this.pluginSelectionEntry });\n\t\t}\n\t\tif (this.pluginManagerEntry !== undefined && this.writeScope === this.pluginManagerScope) {\n\t\t\tthis.flatItems.push({ type: \"plugin-manager\", entry: this.pluginManagerEntry });\n\t\t}\n\t\t// Start selection on first item (not header)\n\t\tthis.selectedIndex = this.flatItems.findIndex(\n\t\t\t(e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\",\n\t\t);\n\t\tif (this.selectedIndex < 0) this.selectedIndex = 0;\n\t}\n\n\tprivate findNextItem(fromIndex: number, direction: 1 | -1): number {\n\t\tlet idx = fromIndex + direction;\n\t\twhile (idx >= 0 && idx < this.filteredItems.length) {\n\t\t\tif (\n\t\t\t\tthis.filteredItems[idx].type === \"item\" ||\n\t\t\t\tthis.filteredItems[idx].type === \"plugin\" ||\n\t\t\t\tthis.filteredItems[idx].type === \"plugin-manager\"\n\t\t\t) {\n\t\t\t\treturn idx;\n\t\t\t}\n\t\t\tidx += direction;\n\t\t}\n\t\treturn fromIndex; // Stay at current if no item found\n\t}\n\n\tprivate filterItems(query: string): void {\n\t\tif (!query.trim()) {\n\t\t\tthis.filteredItems = [...this.flatItems];\n\t\t\tthis.selectFirstItem();\n\t\t\treturn;\n\t\t}\n\n\t\tconst lowerQuery = query.toLowerCase();\n\t\tconst matchingItems = new Set<ResourceItem>();\n\t\tconst matchingSubgroups = new Set<ResourceSubgroup>();\n\t\tconst matchingGroups = new Set<ResourceGroup>();\n\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"item\") {\n\t\t\t\tconst item = entry.item;\n\t\t\t\tif (\n\t\t\t\t\titem.displayName.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.resourceType.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.path.toLowerCase().includes(lowerQuery)\n\t\t\t\t) {\n\t\t\t\t\tmatchingItems.add(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find which subgroups and groups contain matching items\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tif (matchingItems.has(item)) {\n\t\t\t\t\t\tmatchingSubgroups.add(subgroup);\n\t\t\t\t\t\tmatchingGroups.add(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.filteredItems = [];\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"group\" && matchingGroups.has(entry.group)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"subgroup\" && matchingSubgroups.has(entry.subgroup)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"item\" && matchingItems.has(entry.item)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t}\n\t\t}\n\n\t\tthis.selectFirstItem();\n\t}\n\n\tprivate selectFirstItem(): void {\n\t\tconst firstItemIndex = this.filteredItems.findIndex(\n\t\t\t(e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\",\n\t\t);\n\t\tthis.selectedIndex = firstItemIndex >= 0 ? firstItemIndex : 0;\n\t}\n\n\tupdateItem(item: ResourceItem, enabled: boolean): void {\n\t\titem.enabled = enabled;\n\t\t// Update in groups too\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tconst found = subgroup.items.find((i) => i.path === item.path && i.resourceType === item.resourceType);\n\t\t\t\tif (found) {\n\t\t\t\t\tfound.enabled = enabled;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst lines: string[] = [];\n\n\t\t// Search input\n\t\tlines.push(...this.searchInput.render(width));\n\t\tlines.push(\"\");\n\n\t\tif (this.filteredItems.length === 0) {\n\t\t\tlines.push(theme.fg(\"muted\", \" No resources found\"));\n\t\t\treturn lines;\n\t\t}\n\n\t\t// Calculate visible range\n\t\tconst startIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredItems.length - this.maxVisible),\n\t\t);\n\t\tconst endIndex = Math.min(startIndex + this.maxVisible, this.filteredItems.length);\n\n\t\tfor (let i = startIndex; i < endIndex; i++) {\n\t\t\tconst entry = this.filteredItems[i];\n\t\t\tconst isSelected = i === this.selectedIndex;\n\n\t\t\tif (entry.type === \"group\") {\n\t\t\t\t// Main group header (no cursor)\n\t\t\t\tconst inherited = this.writeScope === \"project\" && entry.group.scope === \"user\";\n\t\t\t\tconst label = theme.bold(`${entry.group.label}${inherited ? \" · inherited global\" : \"\"}`);\n\t\t\t\tconst groupLine = theme.fg(inherited ? \"dim\" : \"accent\", label);\n\t\t\t\tlines.push(truncateToWidth(` ${groupLine}`, width, \"\"));\n\t\t\t} else if (entry.type === \"subgroup\") {\n\t\t\t\t// Subgroup header (indented, no cursor)\n\t\t\t\tconst color = this.writeScope === \"project\" && entry.group.scope === \"user\" ? \"dim\" : \"muted\";\n\t\t\t\tconst subgroupLine = theme.fg(color, entry.subgroup.label);\n\t\t\t\tlines.push(truncateToWidth(` ${subgroupLine}`, width, \"\"));\n\t\t\t} else if (entry.type === \"plugin\") {\n\t\t\t\tconst prefix = isSelected ? \"> \" : \" \";\n\t\t\t\tfor (const line of entry.entry.render(width)) {\n\t\t\t\t\tlines.push(truncateToWidth(`${prefix}${line.trimStart()}`, width, \"...\"));\n\t\t\t\t}\n\t\t\t} else if (entry.type === \"plugin-manager\") {\n\t\t\t\tconst prefix = isSelected ? \"> \" : \" \";\n\t\t\t\tfor (const line of entry.entry.render(width)) {\n\t\t\t\t\tlines.push(truncateToWidth(`${prefix}${line.trimStart()}`, width, \"...\"));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Resource item (cursor only on items)\n\t\t\t\tconst item = entry.item;\n\t\t\t\tconst cursor = isSelected ? \"> \" : \" \";\n\t\t\t\tconst dimmed = this.isDimmedItem(item);\n\t\t\t\tconst nameText = isSelected && !dimmed ? theme.bold(item.displayName) : item.displayName;\n\t\t\t\tconst name = dimmed ? theme.fg(\"dim\", nameText) : nameText;\n\t\t\t\tlines.push(\n\t\t\t\t\ttruncateToWidth(\n\t\t\t\t\t\t`${cursor} ${this.renderCheckbox(item)} ${name}${this.getItemSuffix(item)}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\"...\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Scroll indicator\n\t\tif (startIndex > 0 || endIndex < this.filteredItems.length) {\n\t\t\tconst itemCount = this.filteredItems.filter(\n\t\t\t\t(e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\",\n\t\t\t).length;\n\t\t\tconst currentItemIndex =\n\t\t\t\tthis.filteredItems\n\t\t\t\t\t.slice(0, this.selectedIndex)\n\t\t\t\t\t.filter((e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\").length + 1;\n\t\t\tlines.push(theme.fg(\"dim\", ` (${currentItemIndex}/${itemCount})`));\n\t\t}\n\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = getKeybindings();\n\t\tif (this.pluginSelectionEntry?.focused === true) {\n\t\t\tthis.pluginSelectionEntry.handleInput(data);\n\t\t\treturn;\n\t\t}\n\t\tif (this.pluginManagerEntry?.focused === true) {\n\t\t\tthis.pluginManagerEntry.handleInput(data);\n\t\t\treturn;\n\t\t}\n\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, -1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageUp\")) {\n\t\t\t// Jump up by maxVisible, then find nearest item\n\t\t\tlet target = Math.max(0, this.selectedIndex - this.maxVisible);\n\t\t\twhile (\n\t\t\t\ttarget < this.filteredItems.length &&\n\t\t\t\tthis.filteredItems[target].type !== \"item\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin-manager\"\n\t\t\t) {\n\t\t\t\ttarget++;\n\t\t\t}\n\t\t\tif (target < this.filteredItems.length) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageDown\")) {\n\t\t\t// Jump down by maxVisible, then find nearest item\n\t\t\tlet target = Math.min(this.filteredItems.length - 1, this.selectedIndex + this.maxVisible);\n\t\t\twhile (\n\t\t\t\ttarget >= 0 &&\n\t\t\t\tthis.filteredItems[target].type !== \"item\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin-manager\"\n\t\t\t) {\n\t\t\t\ttarget--;\n\t\t\t}\n\t\t\tif (target >= 0) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.onCancel?.();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.config.exit\")) {\n\t\t\tthis.onExit?.();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.input.tab\")) {\n\t\t\tthis.onSwitchMode?.();\n\t\t\treturn;\n\t\t}\n\t\tif (data === \" \" || kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst entry = this.filteredItems[this.selectedIndex];\n\t\t\tif (entry?.type === \"plugin\" && this.writeScope === \"global\") {\n\t\t\t\tentry.entry.focused = true;\n\t\t\t\tvoid entry.entry.openPluginSelection();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry?.type === \"plugin-manager\" && this.writeScope === this.pluginManagerScope) {\n\t\t\t\tentry.entry.focused = true;\n\t\t\t\tvoid entry.entry.openPluginManager();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry?.type === \"item\" && (this.writeScope === \"project\" || this.getItemScope(entry.item) === \"user\")) {\n\t\t\t\tconst newEnabled = this.toggleResource(entry.item);\n\t\t\t\t// v8 ignore next -- toggleResource never yields undefined: both setProjectResourceOverride failure arms are unreachable\n\t\t\t\tif (newEnabled !== undefined) {\n\t\t\t\t\tthis.updateItem(entry.item, newEnabled);\n\t\t\t\t\tthis.onToggle?.(entry.item, newEnabled);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Pass to search input\n\t\tthis.searchInput.handleInput(data);\n\t\tthis.filterItems(this.searchInput.getValue());\n\t}\n\n\tprivate toggleResource(item: ResourceItem): boolean | undefined {\n\t\tif (this.writeScope === \"project\") {\n\t\t\tconst state = this.getNextOverrideState(item);\n\t\t\t// v8 ignore next -- getNextOverrideState never yields inherit for a package missing from project settings\n\t\t\tif (!this.setProjectResourceOverride(item, state)) return undefined;\n\t\t\treturn state === \"inherit\" ? this.getInheritedEnabled(item) : state === \"load\";\n\t\t}\n\n\t\tconst enabled = !item.enabled;\n\t\tif (item.metadata.origin === \"top-level\") {\n\t\t\tthis.toggleTopLevelResource(item, enabled);\n\t\t} else {\n\t\t\tthis.togglePackageResource(item, enabled);\n\t\t}\n\t\treturn enabled;\n\t}\n\n\tprivate toggleTopLevelResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst arrayKey = item.resourceType;\n\t\tconst current = (settings[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern for this resource\n\t\tconst pattern = this.getResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\tif (scope === \"project\") {\n\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\tif (arrayKey === \"skills\") {\n\t\t\t\tthis.settingsManager.setProjectSkillPaths(updated);\n\t\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\t} else if (arrayKey === \"prompts\") {\n\t\t\t\tthis.settingsManager.setProjectPromptTemplatePaths(updated);\n\t\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\t} else if (arrayKey === \"themes\") {\n\t\t\t\tthis.settingsManager.setProjectThemePaths(updated);\n\t\t\t}\n\t\t} else if (arrayKey === \"skills\") {\n\t\t\tthis.settingsManager.setSkillPaths(updated);\n\t\t} else if (arrayKey === \"prompts\") {\n\t\t\tthis.settingsManager.setPromptTemplatePaths(updated);\n\t\t\t// v8 ignore next -- last else-if is only evaluated for array keys outside skills/prompts/themes\n\t\t} else if (arrayKey === \"themes\") {\n\t\t\tthis.settingsManager.setThemePaths(updated);\n\t\t}\n\t}\n\n\tprivate togglePackageResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst packages = [...(settings.packages ?? [])] as PackageSource[];\n\t\tconst pkgIndex = packages.findIndex((pkg) => {\n\t\t\tconst source = typeof pkg === \"string\" ? pkg : pkg.source;\n\t\t\treturn source === item.metadata.source;\n\t\t});\n\n\t\tif (pkgIndex === -1) return;\n\n\t\tlet pkg = packages[pkgIndex];\n\n\t\t// Convert string to object form if needed\n\t\tif (typeof pkg === \"string\") {\n\t\t\tpkg = { source: pkg };\n\t\t\tpackages[pkgIndex] = pkg;\n\t\t}\n\n\t\t// Get the resource array for this type\n\t\tconst arrayKey = item.resourceType;\n\t\tconst current = (pkg[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern relative to package root\n\t\tconst pattern = this.getPackageResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\t// v8 ignore next -- updated always retains the just-pushed pattern, so it is never empty\n\t\t(pkg as Record<string, unknown>)[arrayKey] = updated.length > 0 ? updated : undefined;\n\n\t\t// Clean up empty filter object\n\t\tconst hasFilters = [\"skills\", \"prompts\", \"themes\"].some((k) => (pkg as Record<string, unknown>)[k] !== undefined);\n\t\t// v8 ignore next -- hasFilters is always true because the toggled key was just assigned\n\t\tif (!hasFilters) {\n\t\t\tpackages[pkgIndex] = (pkg as { source: string }).source;\n\t\t}\n\n\t\t// v8 ignore next -- togglePackageResource is only reachable in global write scope\n\t\tif (scope === \"project\") {\n\t\t\tthis.settingsManager.setProjectPackages(packages);\n\t\t} else {\n\t\t\tthis.settingsManager.setPackages(packages);\n\t\t}\n\t}\n\n\tprivate renderCheckbox(item: ResourceItem): string {\n\t\tif (this.writeScope === \"project\") {\n\t\t\tconst state = this.getProjectOverrideState(item);\n\t\t\tif (state === \"load\") return theme.fg(\"success\", \"[+]\");\n\t\t\tif (state === \"unload\") return theme.fg(\"warning\", \"[-]\");\n\t\t\treturn theme.fg(\"dim\", item.enabled ? \"[x]\" : \"[ ]\");\n\t\t}\n\t\treturn item.enabled ? theme.fg(\"success\", \"[x]\") : theme.fg(\"dim\", \"[ ]\");\n\t}\n\n\tprivate getItemSuffix(item: ResourceItem): string {\n\t\tif (this.writeScope !== \"project\") return \"\";\n\t\tconst state = this.getProjectOverrideState(item);\n\t\tif (state === \"load\") return theme.fg(\"muted\", \" project load\");\n\t\tif (state === \"unload\") return theme.fg(\"muted\", \" project unload\");\n\t\treturn this.isInheritedGlobalItem(item) ? theme.fg(\"dim\", \" inherited global\") : \"\";\n\t}\n\n\tprivate isDimmedItem(item: ResourceItem): boolean {\n\t\treturn (\n\t\t\tthis.writeScope === \"project\" &&\n\t\t\tthis.isInheritedGlobalItem(item) &&\n\t\t\tthis.getProjectOverrideState(item) === \"inherit\"\n\t\t);\n\t}\n\n\tprivate setProjectResourceOverride(item: ResourceItem, state: ProjectOverrideState): boolean {\n\t\treturn item.metadata.origin === \"top-level\"\n\t\t\t? this.setProjectTopLevelOverride(item, state)\n\t\t\t: this.setProjectPackageOverride(item, state);\n\t}\n\n\tprivate setProjectTopLevelOverride(item: ResourceItem, state: ProjectOverrideState): boolean {\n\t\tconst current = (this.settingsManager.getProjectSettings()[item.resourceType] ?? []) as string[];\n\t\tconst pattern = this.isInheritedGlobalItem(item) ? item.path : this.getResourcePatternForScope(item, \"project\");\n\t\tconst patterns = this.getTopLevelOverridePatterns(item, \"project\");\n\t\tconst updated = current.filter((entry) => {\n\t\t\tconst target = this.getPatternEntryTarget(entry);\n\t\t\tif ((entry.startsWith(\"!\") || entry.startsWith(\"+\") || entry.startsWith(\"-\")) && patterns.has(target))\n\t\t\t\treturn false;\n\t\t\treturn !(state === \"inherit\" && this.isInheritedGlobalItem(item) && target === pattern);\n\t\t});\n\t\tif (state !== \"inherit\") {\n\t\t\tif (this.isInheritedGlobalItem(item) && !updated.includes(pattern)) updated.push(pattern);\n\t\t\tupdated.push(`${state === \"load\" ? \"+\" : \"-\"}${pattern}`);\n\t\t}\n\t\tthis.setProjectTopLevelPaths(item.resourceType, updated);\n\t\treturn true;\n\t}\n\n\tprivate setProjectTopLevelPaths(key: ResourceType, paths: string[]): void {\n\t\tif (key === \"skills\") this.settingsManager.setProjectSkillPaths(paths);\n\t\telse if (key === \"prompts\") this.settingsManager.setProjectPromptTemplatePaths(paths);\n\t\telse this.settingsManager.setProjectThemePaths(paths);\n\t}\n\n\tprivate setProjectPackageOverride(item: ResourceItem, state: ProjectOverrideState): boolean {\n\t\tconst packages = [...(this.settingsManager.getProjectSettings().packages ?? [])] as PackageSource[];\n\t\tlet pkgIndex = packages.findIndex((pkg) =>\n\t\t\tthis.packageSourceStringMatches(\n\t\t\t\titem.metadata.source,\n\t\t\t\tthis.getItemScope(item),\n\t\t\t\ttypeof pkg === \"string\" ? pkg : pkg.source,\n\t\t\t\t\"project\",\n\t\t\t),\n\t\t);\n\t\tif (pkgIndex === -1) {\n\t\t\t// v8 ignore next -- getNextOverrideState never yields inherit with the package missing from settings\n\t\t\tif (state === \"inherit\") return false;\n\t\t\tpackages.push(this.createPackageOverrideSource(item));\n\t\t\tpkgIndex = packages.length - 1;\n\t\t}\n\t\tlet pkg = packages[pkgIndex];\n\t\t// v8 ignore next -- packages[pkgIndex] is always defined after the missing-entry push\n\t\tif (pkg === undefined) return false;\n\t\tif (typeof pkg === \"string\") {\n\t\t\tpkg = { source: pkg };\n\t\t\tpackages[pkgIndex] = pkg;\n\t\t}\n\t\tconst pattern = this.getPackageResourcePattern(item);\n\t\tconst updated = ((pkg[item.resourceType] ?? []) as string[]).filter(\n\t\t\t(entry) => this.getPatternEntryTarget(entry) !== pattern,\n\t\t);\n\t\tif (state !== \"inherit\") updated.push(`${state === \"load\" ? \"+\" : \"-\"}${pattern}`);\n\t\t(pkg as Record<string, unknown>)[item.resourceType] = updated.length > 0 ? updated : undefined;\n\t\tif (!RESOURCE_TYPES.some((key) => (pkg as Record<string, unknown>)[key] !== undefined)) {\n\t\t\tif (pkg.autoload === false) packages.splice(pkgIndex, 1);\n\t\t\telse packages[pkgIndex] = pkg.source;\n\t\t}\n\t\tthis.settingsManager.setProjectPackages(packages);\n\t\treturn true;\n\t}\n\n\tprivate getNextOverrideState(item: ResourceItem): ProjectOverrideState {\n\t\tconst state = this.getProjectOverrideState(item);\n\t\tconst inheritedEnabled = this.getInheritedEnabled(item);\n\t\tif (state === \"inherit\") return inheritedEnabled ? \"unload\" : \"load\";\n\t\tif (state === \"unload\") return inheritedEnabled ? \"load\" : \"inherit\";\n\t\treturn inheritedEnabled ? \"inherit\" : \"unload\";\n\t}\n\n\tprivate getProjectOverrideState(item: ResourceItem): ProjectOverrideState {\n\t\t// v8 ignore next -- getProjectOverrideState is only called with project write scope\n\t\tif (this.writeScope !== \"project\") return \"inherit\";\n\t\tif (item.metadata.origin === \"top-level\") {\n\t\t\treturn this.getOverrideStateFromEntries(\n\t\t\t\t(this.settingsManager.getProjectSettings()[item.resourceType] ?? []) as string[],\n\t\t\t\tthis.getTopLevelOverridePatterns(item, \"project\"),\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t\tconst pkg = this.findMatchingPackageSource(item, \"project\");\n\t\tif (typeof pkg !== \"object\") return \"inherit\";\n\t\tconst entries = pkg[item.resourceType];\n\t\tif (entries === undefined) return \"inherit\";\n\t\treturn this.getOverrideStateFromEntries(\n\t\t\tentries,\n\t\t\tnew Set([this.getPackageResourcePattern(item)]),\n\t\t\tpkg.autoload !== false,\n\t\t);\n\t}\n\n\tprivate getOverrideStateFromEntries(\n\t\tentries: string[],\n\t\tpatterns: Set<string>,\n\t\temptyArrayIsUnload: boolean,\n\t): ProjectOverrideState {\n\t\tif (entries.length === 0 && emptyArrayIsUnload) return \"unload\";\n\t\tlet state: ProjectOverrideState = \"inherit\";\n\t\tfor (const entry of entries) {\n\t\t\tif (!patterns.has(this.getPatternEntryTarget(entry))) continue;\n\t\t\tif (entry.startsWith(\"!\") || entry.startsWith(\"-\")) state = \"unload\";\n\t\t\telse state = \"load\";\n\t\t}\n\t\treturn state;\n\t}\n\n\tprivate getInheritedEnabled(item: ResourceItem): boolean {\n\t\treturn (\n\t\t\tthis.inheritedEnabledByKey.get(this.getResourceItemKey(item)) ??\n\t\t\t(this.getItemScope(item) === \"user\" ? item.enabled : true)\n\t\t);\n\t}\n\n\tprivate isInheritedGlobalItem(item: ResourceItem): boolean {\n\t\treturn this.getItemScope(item) === \"user\" || this.inheritedEnabledByKey.has(this.getResourceItemKey(item));\n\t}\n\n\tprivate getTopLevelOverridePatterns(item: ResourceItem, scope: SettingsScope): Set<string> {\n\t\tconst baseDir = this.getTopLevelBaseDir(scope);\n\t\tconst patterns = new Set<string>([\n\t\t\tthis.getResourcePatternForScope(item, scope),\n\t\t\titem.path,\n\t\t\trelative(baseDir, item.path),\n\t\t]);\n\t\tif (item.metadata.baseDir) patterns.add(relative(item.metadata.baseDir, item.path));\n\t\treturn patterns;\n\t}\n\n\tprivate getResourcePatternForScope(item: ResourceItem, scope: SettingsScope): string {\n\t\tconst sourceScope = this.getItemScope(item);\n\t\tif (scope !== sourceScope) return item.path;\n\t\tconst baseDir = item.metadata.baseDir ?? this.getTopLevelBaseDir(sourceScope);\n\t\treturn relative(baseDir, item.path);\n\t}\n\n\tprivate createPackageOverrideSource(item: ResourceItem): PackageSource {\n\t\tconst source = item.metadata.source;\n\t\tif (!isLocalPath(source)) return { source, autoload: false };\n\t\tconst sourcePath = resolvePath(source, this.getTopLevelBaseDir(this.getItemScope(item)), { trim: true });\n\t\treturn { source: relative(this.getTopLevelBaseDir(\"project\"), sourcePath) || \".\", autoload: false };\n\t}\n\n\tprivate packageSourceStringMatches(\n\t\tleftSource: string,\n\t\tleftScope: SettingsScope,\n\t\trightSource: string,\n\t\trightScope: SettingsScope,\n\t): boolean {\n\t\tif (leftSource === rightSource) return true;\n\t\tif (!isLocalPath(leftSource) || !isLocalPath(rightSource)) return false;\n\t\tconst left = resolvePath(leftSource, this.getTopLevelBaseDir(leftScope), { trim: true });\n\t\tconst right = resolvePath(rightSource, this.getTopLevelBaseDir(rightScope), { trim: true });\n\t\treturn left === right;\n\t}\n\n\tprivate findMatchingPackageSource(item: ResourceItem, targetScope: SettingsScope): PackageSource | undefined {\n\t\tconst settings =\n\t\t\t// v8 ignore next -- findMatchingPackageSource is only called with the project target scope\n\t\t\ttargetScope === \"project\"\n\t\t\t\t? this.settingsManager.getProjectSettings()\n\t\t\t\t: this.settingsManager.getGlobalSettings();\n\t\treturn (settings.packages ?? []).find((pkg) =>\n\t\t\tthis.packageSourceStringMatches(\n\t\t\t\titem.metadata.source,\n\t\t\t\tthis.getItemScope(item),\n\t\t\t\ttypeof pkg === \"string\" ? pkg : pkg.source,\n\t\t\t\ttargetScope,\n\t\t\t),\n\t\t);\n\t}\n\n\tprivate getPatternEntryTarget(entry: string): string {\n\t\treturn entry.startsWith(\"!\") || entry.startsWith(\"+\") || entry.startsWith(\"-\") ? entry.slice(1) : entry;\n\t}\n\n\tprivate getResourceItemKey(item: ResourceItem): string {\n\t\treturn `${item.resourceType}:${canonicalizePath(item.path)}`;\n\t}\n\n\tprivate getItemScope(item: ResourceItem): SettingsScope {\n\t\treturn item.metadata.scope === \"project\" ? \"project\" : \"user\";\n\t}\n\n\tprivate getTopLevelBaseDir(scope: \"user\" | \"project\"): string {\n\t\treturn scope === \"project\" ? join(this.cwd, CONFIG_DIR_NAME) : this.agentDir;\n\t}\n\n\tprivate getResourcePattern(item: ResourceItem): string {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst baseDir = item.metadata.baseDir ?? this.getTopLevelBaseDir(scope);\n\t\treturn relative(baseDir, item.path);\n\t}\n\n\tprivate getPackageResourcePattern(item: ResourceItem): string {\n\t\tconst baseDir = item.metadata.baseDir ?? dirname(item.path);\n\t\treturn relative(baseDir, item.path);\n\t}\n}\n\nexport class ConfigSelectorComponent extends Container implements Focusable {\n\tprivate header: ConfigSelectorHeader;\n\tprivate resourceList: ResourceList;\n\tprivate pluginSelectionEntry?: PluginSelectionEntryComponent;\n\tprivate pluginManagerEntry?: PluginManagerEntryComponent;\n\tprivate writeScope: ConfigWriteScope;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.resourceList.focused = value;\n\t}\n\n\tconstructor(\n\t\tresolvedPaths: ScopedResolvedPaths,\n\t\tsettingsManager: SettingsManager,\n\t\tcwd: string,\n\t\tagentDir: string,\n\t\tonClose: () => void,\n\t\tonExit: () => void,\n\t\trequestRender: () => void,\n\t\tterminalHeight?: number,\n\t\twriteScope: ConfigWriteScope = \"global\",\n\t\tprojectModeAvailable = true,\n\t\tpluginSelection?: PluginSelectionEntryOptionsV1,\n\t\tpluginManager?: PluginManagerEntryOptionsV1,\n\t\tpluginManagerScope: ConfigWriteScope = \"global\",\n\t) {\n\t\tsuper();\n\n\t\tthis.writeScope = writeScope;\n\t\tconst groupsByScope = {\n\t\t\tglobal: buildGroups(resolvedPaths.global, agentDir),\n\t\t\tproject: buildGroups(resolvedPaths.project, agentDir),\n\t\t};\n\t\tconst pluginSelectionEntry =\n\t\t\tpluginSelection === undefined\n\t\t\t\t? undefined\n\t\t\t\t: new PluginSelectionEntryComponent({\n\t\t\t\t\t\t...pluginSelection,\n\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\tpluginSelection.onClose?.();\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequestRender,\n\t\t\t\t\t});\n\t\tthis.pluginSelectionEntry = pluginSelectionEntry;\n\t\tconst pluginManagerEntry =\n\t\t\tpluginManager === undefined\n\t\t\t\t? undefined\n\t\t\t\t: new PluginManagerEntryComponent({\n\t\t\t\t\t\t...pluginManager,\n\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\tpluginManager.onClose?.();\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequestRender,\n\t\t\t\t\t});\n\t\tthis.pluginManagerEntry = pluginManagerEntry;\n\n\t\t// Add header\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.header = new ConfigSelectorHeader(this.writeScope, projectModeAvailable);\n\t\tthis.addChild(this.header);\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Resource list\n\t\tthis.resourceList = new ResourceList(\n\t\t\tgroupsByScope,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tterminalHeight === undefined\n\t\t\t\t? undefined\n\t\t\t\t: Math.max(\n\t\t\t\t\t\t5,\n\t\t\t\t\t\tterminalHeight - (pluginSelection === undefined ? 0 : 2) - (pluginManager === undefined ? 0 : 2),\n\t\t\t\t\t),\n\t\t\tthis.writeScope,\n\t\t\tpluginSelectionEntry,\n\t\t\tpluginManagerEntry,\n\t\t\tpluginManagerScope,\n\t\t);\n\t\tthis.resourceList.onCancel = onClose;\n\t\tthis.resourceList.onExit = onExit;\n\t\tthis.resourceList.onToggle = () => requestRender();\n\t\tif (projectModeAvailable) {\n\t\t\tthis.resourceList.onSwitchMode = () => {\n\t\t\t\tthis.switchWriteScope();\n\t\t\t\trequestRender();\n\t\t\t};\n\t\t}\n\t\tthis.addChild(this.resourceList);\n\n\t\t// Bottom border\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tprivate switchWriteScope(): void {\n\t\tthis.writeScope = this.writeScope === \"global\" ? \"project\" : \"global\";\n\t\tthis.header.setWriteScope(this.writeScope);\n\t\tthis.resourceList.setWriteScope(this.writeScope);\n\t}\n\n\tgetResourceList(): ResourceList {\n\t\treturn this.resourceList;\n\t}\n\n\tgetPluginSelectionEntry(): PluginSelectionEntryComponent | undefined {\n\t\treturn this.pluginSelectionEntry;\n\t}\n\n\tgetPluginManagerEntry(): PluginManagerEntryComponent | undefined {\n\t\treturn this.pluginManagerEntry;\n\t}\n\n\tasync openPluginSelection(): Promise<PluginSelectionEntryOpenResultV1 | undefined> {\n\t\treturn this.pluginSelectionEntry === undefined\n\t\t\t? undefined\n\t\t\t: await this.pluginSelectionEntry.openPluginSelection();\n\t}\n\n\tasync openPluginManager(): Promise<PluginManagerEntryOpenResultV1 | undefined> {\n\t\treturn this.pluginManagerEntry === undefined ? undefined : await this.pluginManagerEntry.openPluginManager();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"config-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/config-selector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TUI component for managing package resources (enable/disable)\n */\n\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, relative } from \"node:path\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype Focusable,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"@agent-forge/tui\";\nimport { CONFIG_DIR_NAME } from \"../../../config.ts\";\nimport { t } from \"../../../core/i18n/index.ts\";\nimport type { PathMetadata, ResolvedPaths, ResolvedResource } from \"../../../core/package-manager.ts\";\nimport type { PackageSource, SettingsManager } from \"../../../core/settings-manager.ts\";\nimport { canonicalizePath, isLocalPath, resolvePath } from \"../../../utils/paths.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint, rawKeyHint } from \"./keybinding-hints.ts\";\nimport {\n\tPluginManagerEntryComponent,\n\ttype PluginManagerEntryOpenResultV1,\n\ttype PluginManagerEntryOptionsV1,\n} from \"./plugin-manager-entry.ts\";\nimport {\n\tPluginSelectionEntryComponent,\n\ttype PluginSelectionEntryOpenResultV1,\n\ttype PluginSelectionEntryOptionsV1,\n} from \"./plugin-selection-entry.ts\";\n\ntype ResourceType = \"skills\" | \"prompts\" | \"themes\";\ntype ConfigWriteScope = \"global\" | \"project\";\ntype SettingsScope = \"user\" | \"project\";\ntype ProjectOverrideState = \"inherit\" | \"load\" | \"unload\";\nexport type ScopedResolvedPaths = Record<ConfigWriteScope, ResolvedPaths>;\n\nconst RESOURCE_TYPES = [\"skills\", \"prompts\", \"themes\"] as const satisfies readonly ResourceType[];\n\nconst RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\tskills: \"Skills\",\n\tprompts: \"Prompts\",\n\tthemes: \"Themes\",\n};\n\ninterface ResourceItem {\n\tpath: string;\n\tenabled: boolean;\n\tmetadata: PathMetadata;\n\tresourceType: ResourceType;\n\tdisplayName: string;\n\tgroupKey: string;\n\tsubgroupKey: string;\n}\n\ninterface ResourceSubgroup {\n\ttype: ResourceType;\n\tlabel: string;\n\titems: ResourceItem[];\n}\n\ninterface ResourceGroup {\n\tkey: string;\n\tlabel: string;\n\tscope: \"user\" | \"project\" | \"temporary\";\n\torigin: \"package\" | \"top-level\";\n\tsource: string;\n\tsubgroups: ResourceSubgroup[];\n}\n\nfunction formatBaseDir(baseDir: string): string {\n\tconst homeDir = homedir();\n\tlet displayPath: string;\n\n\tif (baseDir === homeDir) {\n\t\tdisplayPath = \"~\";\n\t} else if (baseDir.startsWith(homeDir)) {\n\t\t// Replace home prefix with ~, normalize separators for display\n\t\tconst rest = baseDir.slice(homeDir.length);\n\t\tdisplayPath = `~${rest.replace(/\\\\/g, \"/\")}`;\n\t} else {\n\t\tdisplayPath = baseDir.replace(/\\\\/g, \"/\");\n\t}\n\n\treturn displayPath.endsWith(\"/\") ? displayPath : `${displayPath}/`;\n}\n\nfunction getGroupLabel(metadata: PathMetadata, agentDir: string): string {\n\tif (metadata.origin === \"package\") {\n\t\treturn `${metadata.source} (${metadata.scope})`;\n\t}\n\t// Top-level resources\n\tif (metadata.source === \"auto\") {\n\t\tif (metadata.baseDir) {\n\t\t\treturn metadata.scope === \"user\"\n\t\t\t\t? t(\"User ({dir})\", { dir: formatBaseDir(metadata.baseDir) })\n\t\t\t\t: t(\"Project ({dir})\", { dir: formatBaseDir(metadata.baseDir) });\n\t\t}\n\t\treturn metadata.scope === \"user\"\n\t\t\t? t(\"User ({dir})\", { dir: formatBaseDir(agentDir) })\n\t\t\t: t(\"Project ({dir})\", { dir: `${CONFIG_DIR_NAME}/` });\n\t}\n\treturn metadata.scope === \"user\" ? t(\"User settings\") : t(\"Project settings\");\n}\n\nfunction buildGroups(resolved: ResolvedPaths, agentDir: string): ResourceGroup[] {\n\tconst groupMap = new Map<string, ResourceGroup>();\n\n\tconst addToGroup = (resources: ResolvedResource[], resourceType: ResourceType) => {\n\t\tfor (const res of resources) {\n\t\t\tconst { path, enabled, metadata } = res;\n\t\t\tconst groupKey = `${metadata.origin}:${metadata.scope}:${metadata.source}:${metadata.baseDir ?? \"\"}`;\n\n\t\t\tif (!groupMap.has(groupKey)) {\n\t\t\t\tgroupMap.set(groupKey, {\n\t\t\t\t\tkey: groupKey,\n\t\t\t\t\tlabel: getGroupLabel(metadata, agentDir),\n\t\t\t\t\tscope: metadata.scope,\n\t\t\t\t\torigin: metadata.origin,\n\t\t\t\t\tsource: metadata.source,\n\t\t\t\t\tsubgroups: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst group = groupMap.get(groupKey)!;\n\t\t\tconst subgroupKey = `${groupKey}:${resourceType}`;\n\n\t\t\tlet subgroup = group.subgroups.find((sg) => sg.type === resourceType);\n\t\t\tif (!subgroup) {\n\t\t\t\tsubgroup = {\n\t\t\t\t\ttype: resourceType,\n\t\t\t\t\tlabel: t(RESOURCE_TYPE_LABELS[resourceType]),\n\t\t\t\t\titems: [],\n\t\t\t\t};\n\t\t\t\tgroup.subgroups.push(subgroup);\n\t\t\t}\n\n\t\t\tconst fileName = basename(path);\n\t\t\tconst parentFolder = basename(dirname(path));\n\t\t\tlet displayName: string;\n\t\t\tif (resourceType === \"skills\" && fileName === \"SKILL.md\") {\n\t\t\t\tdisplayName = parentFolder;\n\t\t\t} else {\n\t\t\t\tdisplayName = fileName;\n\t\t\t}\n\t\t\tsubgroup.items.push({\n\t\t\t\tpath,\n\t\t\t\tenabled,\n\t\t\t\tmetadata,\n\t\t\t\tresourceType,\n\t\t\t\tdisplayName,\n\t\t\t\tgroupKey,\n\t\t\t\tsubgroupKey,\n\t\t\t});\n\t\t}\n\t};\n\n\taddToGroup(resolved.skills, \"skills\");\n\taddToGroup(resolved.prompts, \"prompts\");\n\taddToGroup(resolved.themes, \"themes\");\n\n\t// Sort groups: packages first, then top-level; user before project\n\tconst groups = Array.from(groupMap.values());\n\tgroups.sort((a, b) => {\n\t\tif (a.origin !== b.origin) {\n\t\t\treturn a.origin === \"package\" ? -1 : 1;\n\t\t}\n\t\tif (a.scope !== b.scope) {\n\t\t\treturn a.scope === \"user\" ? -1 : 1;\n\t\t}\n\t\treturn a.source.localeCompare(b.source);\n\t});\n\n\t// Sort subgroups within each group by type order, and items by name\n\tconst typeOrder: Record<ResourceType, number> = { skills: 0, prompts: 1, themes: 2 };\n\tfor (const group of groups) {\n\t\tgroup.subgroups.sort((a, b) => typeOrder[a.type] - typeOrder[b.type]);\n\t\tfor (const subgroup of group.subgroups) {\n\t\t\tsubgroup.items.sort((a, b) => a.displayName.localeCompare(b.displayName));\n\t\t}\n\t}\n\n\treturn groups;\n}\n\ntype FlatEntry =\n\t| { type: \"group\"; group: ResourceGroup }\n\t| { type: \"subgroup\"; subgroup: ResourceSubgroup; group: ResourceGroup }\n\t| { type: \"item\"; item: ResourceItem }\n\t| { type: \"plugin\"; entry: PluginSelectionEntryComponent }\n\t| { type: \"plugin-manager\"; entry: PluginManagerEntryComponent };\n\nclass ConfigSelectorHeader implements Component {\n\tprivate writeScope: ConfigWriteScope;\n\tprivate projectModeAvailable: boolean;\n\n\tconstructor(writeScope: ConfigWriteScope, projectModeAvailable: boolean) {\n\t\tthis.writeScope = writeScope;\n\t\tthis.projectModeAvailable = projectModeAvailable;\n\t}\n\n\tsetWriteScope(writeScope: ConfigWriteScope): void {\n\t\tthis.writeScope = writeScope;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst title = theme.bold(this.writeScope === \"project\" ? t(\"Project Local Resources\") : t(\"Global Resources\"));\n\t\tconst sep = theme.fg(\"muted\", \" · \");\n\t\tconst switchHint = this.projectModeAvailable ? keyHint(\"tui.input.tab\", t(\"switch mode\")) + sep : \"\";\n\t\tconst actionHint =\n\t\t\tthis.writeScope === \"project\" ? rawKeyHint(\"space\", t(\"cycle inherit/+/-\")) : rawKeyHint(\"space\", t(\"toggle\"));\n\t\tconst hint = switchHint + actionHint + sep + rawKeyHint(\"esc\", t(\"close\"));\n\t\tconst spacing = Math.max(1, width - visibleWidth(title) - visibleWidth(hint));\n\t\tconst scopeHint =\n\t\t\tthis.writeScope === \"project\"\n\t\t\t\t? theme.fg(\n\t\t\t\t\t\t\"muted\",\n\t\t\t\t\t\tt(\"{config}/settings.json · inherited global resources are dimmed\", { config: CONFIG_DIR_NAME }),\n\t\t\t\t\t)\n\t\t\t\t: theme.fg(\"muted\", `~/${CONFIG_DIR_NAME}/agent/settings.json`);\n\n\t\treturn [\n\t\t\ttruncateToWidth(`${title}${\" \".repeat(spacing)}${hint}`, width, \"\"),\n\t\t\ttruncateToWidth(scopeHint, width, \"\"),\n\t\t];\n\t}\n}\n\nclass ResourceList implements Component, Focusable {\n\tprivate groupsByScope: Record<ConfigWriteScope, ResourceGroup[]>;\n\tprivate flatItems: FlatEntry[] = [];\n\tprivate filteredItems: FlatEntry[] = [];\n\tprivate selectedIndex = 0;\n\tprivate searchInput: Input;\n\tprivate maxVisible: number;\n\tprivate settingsManager: SettingsManager;\n\tprivate cwd: string;\n\tprivate agentDir: string;\n\tprivate writeScope: ConfigWriteScope;\n\tprivate inheritedEnabledByKey: Map<string, boolean>;\n\tprivate readonly pluginSelectionEntry?: PluginSelectionEntryComponent;\n\tprivate readonly pluginManagerEntry?: PluginManagerEntryComponent;\n\tprivate readonly pluginManagerScope: ConfigWriteScope;\n\n\tpublic onCancel?: () => void;\n\tpublic onExit?: () => void;\n\tpublic onToggle?: (item: ResourceItem, newEnabled: boolean) => void;\n\tpublic onSwitchMode?: () => void;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tconstructor(\n\t\tgroupsByScope: Record<ConfigWriteScope, ResourceGroup[]>,\n\t\tsettingsManager: SettingsManager,\n\t\tcwd: string,\n\t\tagentDir: string,\n\t\tterminalHeight?: number,\n\t\twriteScope: ConfigWriteScope = \"global\",\n\t\tpluginSelectionEntry?: PluginSelectionEntryComponent,\n\t\tpluginManagerEntry?: PluginManagerEntryComponent,\n\t\tpluginManagerScope: ConfigWriteScope = \"global\",\n\t) {\n\t\tthis.groupsByScope = groupsByScope;\n\t\tthis.settingsManager = settingsManager;\n\t\tthis.cwd = cwd;\n\t\tthis.agentDir = agentDir;\n\t\tthis.writeScope = writeScope;\n\t\tthis.pluginSelectionEntry = pluginSelectionEntry;\n\t\tthis.pluginManagerEntry = pluginManagerEntry;\n\t\tthis.pluginManagerScope = pluginManagerScope;\n\t\tthis.inheritedEnabledByKey = this.buildInheritedEnabledMap(groupsByScope.global);\n\t\tthis.searchInput = new Input();\n\t\t// 8 lines of chrome: top spacer + top border + spacer + header (2 lines) + spacer + bottom spacer + bottom border\n\t\tconst chrome = 8;\n\t\tthis.maxVisible = Math.max(5, (terminalHeight ?? 24) - chrome);\n\t\tthis.buildFlatList();\n\t\tthis.filteredItems = [...this.flatItems];\n\t}\n\n\tsetWriteScope(writeScope: ConfigWriteScope): void {\n\t\tthis.writeScope = writeScope;\n\t\tthis.buildFlatList();\n\t\tthis.filterItems(this.searchInput.getValue());\n\t}\n\n\tprivate get groups(): ResourceGroup[] {\n\t\treturn this.groupsByScope[this.writeScope];\n\t}\n\n\tprivate buildInheritedEnabledMap(groups: ResourceGroup[]): Map<string, boolean> {\n\t\tconst result = new Map<string, boolean>();\n\t\tfor (const group of groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tresult.set(this.getResourceItemKey(item), item.enabled);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate buildFlatList(): void {\n\t\tthis.flatItems = [];\n\t\tfor (const group of this.groups) {\n\t\t\tthis.flatItems.push({ type: \"group\", group });\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tthis.flatItems.push({ type: \"subgroup\", subgroup, group });\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tthis.flatItems.push({ type: \"item\", item });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.pluginSelectionEntry !== undefined) {\n\t\t\tthis.flatItems.push({ type: \"plugin\", entry: this.pluginSelectionEntry });\n\t\t}\n\t\tif (this.pluginManagerEntry !== undefined && this.writeScope === this.pluginManagerScope) {\n\t\t\tthis.flatItems.push({ type: \"plugin-manager\", entry: this.pluginManagerEntry });\n\t\t}\n\t\t// Start selection on first item (not header)\n\t\tthis.selectedIndex = this.flatItems.findIndex(\n\t\t\t(e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\",\n\t\t);\n\t\tif (this.selectedIndex < 0) this.selectedIndex = 0;\n\t}\n\n\tprivate findNextItem(fromIndex: number, direction: 1 | -1): number {\n\t\tlet idx = fromIndex + direction;\n\t\twhile (idx >= 0 && idx < this.filteredItems.length) {\n\t\t\tif (\n\t\t\t\tthis.filteredItems[idx].type === \"item\" ||\n\t\t\t\tthis.filteredItems[idx].type === \"plugin\" ||\n\t\t\t\tthis.filteredItems[idx].type === \"plugin-manager\"\n\t\t\t) {\n\t\t\t\treturn idx;\n\t\t\t}\n\t\t\tidx += direction;\n\t\t}\n\t\treturn fromIndex; // Stay at current if no item found\n\t}\n\n\tprivate filterItems(query: string): void {\n\t\tif (!query.trim()) {\n\t\t\tthis.filteredItems = [...this.flatItems];\n\t\t\tthis.selectFirstItem();\n\t\t\treturn;\n\t\t}\n\n\t\tconst lowerQuery = query.toLowerCase();\n\t\tconst matchingItems = new Set<ResourceItem>();\n\t\tconst matchingSubgroups = new Set<ResourceSubgroup>();\n\t\tconst matchingGroups = new Set<ResourceGroup>();\n\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"item\") {\n\t\t\t\tconst item = entry.item;\n\t\t\t\tif (\n\t\t\t\t\titem.displayName.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.resourceType.toLowerCase().includes(lowerQuery) ||\n\t\t\t\t\titem.path.toLowerCase().includes(lowerQuery)\n\t\t\t\t) {\n\t\t\t\t\tmatchingItems.add(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Find which subgroups and groups contain matching items\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tfor (const item of subgroup.items) {\n\t\t\t\t\tif (matchingItems.has(item)) {\n\t\t\t\t\t\tmatchingSubgroups.add(subgroup);\n\t\t\t\t\t\tmatchingGroups.add(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.filteredItems = [];\n\t\tfor (const entry of this.flatItems) {\n\t\t\tif (entry.type === \"group\" && matchingGroups.has(entry.group)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"subgroup\" && matchingSubgroups.has(entry.subgroup)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t} else if (entry.type === \"item\" && matchingItems.has(entry.item)) {\n\t\t\t\tthis.filteredItems.push(entry);\n\t\t\t}\n\t\t}\n\n\t\tthis.selectFirstItem();\n\t}\n\n\tprivate selectFirstItem(): void {\n\t\tconst firstItemIndex = this.filteredItems.findIndex(\n\t\t\t(e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\",\n\t\t);\n\t\tthis.selectedIndex = firstItemIndex >= 0 ? firstItemIndex : 0;\n\t}\n\n\tupdateItem(item: ResourceItem, enabled: boolean): void {\n\t\titem.enabled = enabled;\n\t\t// Update in groups too\n\t\tfor (const group of this.groups) {\n\t\t\tfor (const subgroup of group.subgroups) {\n\t\t\t\tconst found = subgroup.items.find((i) => i.path === item.path && i.resourceType === item.resourceType);\n\t\t\t\tif (found) {\n\t\t\t\t\tfound.enabled = enabled;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst lines: string[] = [];\n\n\t\t// Search input\n\t\tlines.push(...this.searchInput.render(width));\n\t\tlines.push(\"\");\n\n\t\tif (this.filteredItems.length === 0) {\n\t\t\tlines.push(theme.fg(\"muted\", ` ${t(\"No resources found\")}`));\n\t\t\treturn lines;\n\t\t}\n\n\t\t// Calculate visible range\n\t\tconst startIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredItems.length - this.maxVisible),\n\t\t);\n\t\tconst endIndex = Math.min(startIndex + this.maxVisible, this.filteredItems.length);\n\n\t\tfor (let i = startIndex; i < endIndex; i++) {\n\t\t\tconst entry = this.filteredItems[i];\n\t\t\tconst isSelected = i === this.selectedIndex;\n\n\t\t\tif (entry.type === \"group\") {\n\t\t\t\t// Main group header (no cursor)\n\t\t\t\tconst inherited = this.writeScope === \"project\" && entry.group.scope === \"user\";\n\t\t\t\tconst label = theme.bold(`${entry.group.label}${inherited ? ` · ${t(\"inherited global\")}` : \"\"}`);\n\t\t\t\tconst groupLine = theme.fg(inherited ? \"dim\" : \"accent\", label);\n\t\t\t\tlines.push(truncateToWidth(` ${groupLine}`, width, \"\"));\n\t\t\t} else if (entry.type === \"subgroup\") {\n\t\t\t\t// Subgroup header (indented, no cursor)\n\t\t\t\tconst color = this.writeScope === \"project\" && entry.group.scope === \"user\" ? \"dim\" : \"muted\";\n\t\t\t\tconst subgroupLine = theme.fg(color, entry.subgroup.label);\n\t\t\t\tlines.push(truncateToWidth(` ${subgroupLine}`, width, \"\"));\n\t\t\t} else if (entry.type === \"plugin\") {\n\t\t\t\tconst prefix = isSelected ? \"> \" : \" \";\n\t\t\t\tfor (const line of entry.entry.render(width)) {\n\t\t\t\t\tlines.push(truncateToWidth(`${prefix}${line.trimStart()}`, width, \"...\"));\n\t\t\t\t}\n\t\t\t} else if (entry.type === \"plugin-manager\") {\n\t\t\t\tconst prefix = isSelected ? \"> \" : \" \";\n\t\t\t\tfor (const line of entry.entry.render(width)) {\n\t\t\t\t\tlines.push(truncateToWidth(`${prefix}${line.trimStart()}`, width, \"...\"));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Resource item (cursor only on items)\n\t\t\t\tconst item = entry.item;\n\t\t\t\tconst cursor = isSelected ? \"> \" : \" \";\n\t\t\t\tconst dimmed = this.isDimmedItem(item);\n\t\t\t\tconst nameText = isSelected && !dimmed ? theme.bold(item.displayName) : item.displayName;\n\t\t\t\tconst name = dimmed ? theme.fg(\"dim\", nameText) : nameText;\n\t\t\t\tlines.push(\n\t\t\t\t\ttruncateToWidth(\n\t\t\t\t\t\t`${cursor} ${this.renderCheckbox(item)} ${name}${this.getItemSuffix(item)}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\"...\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Scroll indicator\n\t\tif (startIndex > 0 || endIndex < this.filteredItems.length) {\n\t\t\tconst itemCount = this.filteredItems.filter(\n\t\t\t\t(e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\",\n\t\t\t).length;\n\t\t\tconst currentItemIndex =\n\t\t\t\tthis.filteredItems\n\t\t\t\t\t.slice(0, this.selectedIndex)\n\t\t\t\t\t.filter((e) => e.type === \"item\" || e.type === \"plugin\" || e.type === \"plugin-manager\").length + 1;\n\t\t\tlines.push(theme.fg(\"dim\", ` (${currentItemIndex}/${itemCount})`));\n\t\t}\n\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = getKeybindings();\n\t\tif (this.pluginSelectionEntry?.focused === true) {\n\t\t\tthis.pluginSelectionEntry.handleInput(data);\n\t\t\treturn;\n\t\t}\n\t\tif (this.pluginManagerEntry?.focused === true) {\n\t\t\tthis.pluginManagerEntry.handleInput(data);\n\t\t\treturn;\n\t\t}\n\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, -1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tthis.selectedIndex = this.findNextItem(this.selectedIndex, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageUp\")) {\n\t\t\t// Jump up by maxVisible, then find nearest item\n\t\t\tlet target = Math.max(0, this.selectedIndex - this.maxVisible);\n\t\t\twhile (\n\t\t\t\ttarget < this.filteredItems.length &&\n\t\t\t\tthis.filteredItems[target].type !== \"item\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin-manager\"\n\t\t\t) {\n\t\t\t\ttarget++;\n\t\t\t}\n\t\t\tif (target < this.filteredItems.length) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.pageDown\")) {\n\t\t\t// Jump down by maxVisible, then find nearest item\n\t\t\tlet target = Math.min(this.filteredItems.length - 1, this.selectedIndex + this.maxVisible);\n\t\t\twhile (\n\t\t\t\ttarget >= 0 &&\n\t\t\t\tthis.filteredItems[target].type !== \"item\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin\" &&\n\t\t\t\tthis.filteredItems[target].type !== \"plugin-manager\"\n\t\t\t) {\n\t\t\t\ttarget--;\n\t\t\t}\n\t\t\tif (target >= 0) {\n\t\t\t\tthis.selectedIndex = target;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.onCancel?.();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.config.exit\")) {\n\t\t\tthis.onExit?.();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.input.tab\")) {\n\t\t\tthis.onSwitchMode?.();\n\t\t\treturn;\n\t\t}\n\t\tif (data === \" \" || kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst entry = this.filteredItems[this.selectedIndex];\n\t\t\tif (entry?.type === \"plugin\" && this.writeScope === \"global\") {\n\t\t\t\tentry.entry.focused = true;\n\t\t\t\tvoid entry.entry.openPluginSelection();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry?.type === \"plugin-manager\" && this.writeScope === this.pluginManagerScope) {\n\t\t\t\tentry.entry.focused = true;\n\t\t\t\tvoid entry.entry.openPluginManager();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry?.type === \"item\" && (this.writeScope === \"project\" || this.getItemScope(entry.item) === \"user\")) {\n\t\t\t\tconst newEnabled = this.toggleResource(entry.item);\n\t\t\t\t// v8 ignore next -- toggleResource never yields undefined: both setProjectResourceOverride failure arms are unreachable\n\t\t\t\tif (newEnabled !== undefined) {\n\t\t\t\t\tthis.updateItem(entry.item, newEnabled);\n\t\t\t\t\tthis.onToggle?.(entry.item, newEnabled);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Pass to search input\n\t\tthis.searchInput.handleInput(data);\n\t\tthis.filterItems(this.searchInput.getValue());\n\t}\n\n\tprivate toggleResource(item: ResourceItem): boolean | undefined {\n\t\tif (this.writeScope === \"project\") {\n\t\t\tconst state = this.getNextOverrideState(item);\n\t\t\t// v8 ignore next -- getNextOverrideState never yields inherit for a package missing from project settings\n\t\t\tif (!this.setProjectResourceOverride(item, state)) return undefined;\n\t\t\treturn state === \"inherit\" ? this.getInheritedEnabled(item) : state === \"load\";\n\t\t}\n\n\t\tconst enabled = !item.enabled;\n\t\tif (item.metadata.origin === \"top-level\") {\n\t\t\tthis.toggleTopLevelResource(item, enabled);\n\t\t} else {\n\t\t\tthis.togglePackageResource(item, enabled);\n\t\t}\n\t\treturn enabled;\n\t}\n\n\tprivate toggleTopLevelResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst arrayKey = item.resourceType;\n\t\tconst current = (settings[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern for this resource\n\t\tconst pattern = this.getResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\tif (scope === \"project\") {\n\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\tif (arrayKey === \"skills\") {\n\t\t\t\tthis.settingsManager.setProjectSkillPaths(updated);\n\t\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\t} else if (arrayKey === \"prompts\") {\n\t\t\t\tthis.settingsManager.setProjectPromptTemplatePaths(updated);\n\t\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\t} else if (arrayKey === \"themes\") {\n\t\t\t\tthis.settingsManager.setProjectThemePaths(updated);\n\t\t\t}\n\t\t} else if (arrayKey === \"skills\") {\n\t\t\tthis.settingsManager.setSkillPaths(updated);\n\t\t} else if (arrayKey === \"prompts\") {\n\t\t\tthis.settingsManager.setPromptTemplatePaths(updated);\n\t\t\t// v8 ignore next -- last else-if is only evaluated for array keys outside skills/prompts/themes\n\t\t} else if (arrayKey === \"themes\") {\n\t\t\tthis.settingsManager.setThemePaths(updated);\n\t\t}\n\t}\n\n\tprivate togglePackageResource(item: ResourceItem, enabled: boolean): void {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst settings =\n\t\t\t// v8 ignore next -- handleInput blocks project-scoped resources from toggling in global write scope\n\t\t\tscope === \"project\" ? this.settingsManager.getProjectSettings() : this.settingsManager.getGlobalSettings();\n\n\t\tconst packages = [...(settings.packages ?? [])] as PackageSource[];\n\t\tconst pkgIndex = packages.findIndex((pkg) => {\n\t\t\tconst source = typeof pkg === \"string\" ? pkg : pkg.source;\n\t\t\treturn source === item.metadata.source;\n\t\t});\n\n\t\tif (pkgIndex === -1) return;\n\n\t\tlet pkg = packages[pkgIndex];\n\n\t\t// Convert string to object form if needed\n\t\tif (typeof pkg === \"string\") {\n\t\t\tpkg = { source: pkg };\n\t\t\tpackages[pkgIndex] = pkg;\n\t\t}\n\n\t\t// Get the resource array for this type\n\t\tconst arrayKey = item.resourceType;\n\t\tconst current = (pkg[arrayKey] ?? []) as string[];\n\n\t\t// Generate pattern relative to package root\n\t\tconst pattern = this.getPackageResourcePattern(item);\n\t\tconst disablePattern = `-${pattern}`;\n\t\tconst enablePattern = `+${pattern}`;\n\n\t\t// Filter out existing patterns for this resource\n\t\tconst updated = current.filter((p) => {\n\t\t\tconst stripped = p.startsWith(\"!\") || p.startsWith(\"+\") || p.startsWith(\"-\") ? p.slice(1) : p;\n\t\t\treturn stripped !== pattern;\n\t\t});\n\n\t\tif (enabled) {\n\t\t\tupdated.push(enablePattern);\n\t\t} else {\n\t\t\tupdated.push(disablePattern);\n\t\t}\n\n\t\t// v8 ignore next -- updated always retains the just-pushed pattern, so it is never empty\n\t\t(pkg as Record<string, unknown>)[arrayKey] = updated.length > 0 ? updated : undefined;\n\n\t\t// Clean up empty filter object\n\t\tconst hasFilters = [\"skills\", \"prompts\", \"themes\"].some((k) => (pkg as Record<string, unknown>)[k] !== undefined);\n\t\t// v8 ignore next -- hasFilters is always true because the toggled key was just assigned\n\t\tif (!hasFilters) {\n\t\t\tpackages[pkgIndex] = (pkg as { source: string }).source;\n\t\t}\n\n\t\t// v8 ignore next -- togglePackageResource is only reachable in global write scope\n\t\tif (scope === \"project\") {\n\t\t\tthis.settingsManager.setProjectPackages(packages);\n\t\t} else {\n\t\t\tthis.settingsManager.setPackages(packages);\n\t\t}\n\t}\n\n\tprivate renderCheckbox(item: ResourceItem): string {\n\t\tif (this.writeScope === \"project\") {\n\t\t\tconst state = this.getProjectOverrideState(item);\n\t\t\tif (state === \"load\") return theme.fg(\"success\", \"[+]\");\n\t\t\tif (state === \"unload\") return theme.fg(\"warning\", \"[-]\");\n\t\t\treturn theme.fg(\"dim\", item.enabled ? \"[x]\" : \"[ ]\");\n\t\t}\n\t\treturn item.enabled ? theme.fg(\"success\", \"[x]\") : theme.fg(\"dim\", \"[ ]\");\n\t}\n\n\tprivate getItemSuffix(item: ResourceItem): string {\n\t\tif (this.writeScope !== \"project\") return \"\";\n\t\tconst state = this.getProjectOverrideState(item);\n\t\tif (state === \"load\") return theme.fg(\"muted\", ` ${t(\"project load\")}`);\n\t\tif (state === \"unload\") return theme.fg(\"muted\", ` ${t(\"project unload\")}`);\n\t\treturn this.isInheritedGlobalItem(item) ? theme.fg(\"dim\", ` ${t(\"inherited global\")}`) : \"\";\n\t}\n\n\tprivate isDimmedItem(item: ResourceItem): boolean {\n\t\treturn (\n\t\t\tthis.writeScope === \"project\" &&\n\t\t\tthis.isInheritedGlobalItem(item) &&\n\t\t\tthis.getProjectOverrideState(item) === \"inherit\"\n\t\t);\n\t}\n\n\tprivate setProjectResourceOverride(item: ResourceItem, state: ProjectOverrideState): boolean {\n\t\treturn item.metadata.origin === \"top-level\"\n\t\t\t? this.setProjectTopLevelOverride(item, state)\n\t\t\t: this.setProjectPackageOverride(item, state);\n\t}\n\n\tprivate setProjectTopLevelOverride(item: ResourceItem, state: ProjectOverrideState): boolean {\n\t\tconst current = (this.settingsManager.getProjectSettings()[item.resourceType] ?? []) as string[];\n\t\tconst pattern = this.isInheritedGlobalItem(item) ? item.path : this.getResourcePatternForScope(item, \"project\");\n\t\tconst patterns = this.getTopLevelOverridePatterns(item, \"project\");\n\t\tconst updated = current.filter((entry) => {\n\t\t\tconst target = this.getPatternEntryTarget(entry);\n\t\t\tif ((entry.startsWith(\"!\") || entry.startsWith(\"+\") || entry.startsWith(\"-\")) && patterns.has(target))\n\t\t\t\treturn false;\n\t\t\treturn !(state === \"inherit\" && this.isInheritedGlobalItem(item) && target === pattern);\n\t\t});\n\t\tif (state !== \"inherit\") {\n\t\t\tif (this.isInheritedGlobalItem(item) && !updated.includes(pattern)) updated.push(pattern);\n\t\t\tupdated.push(`${state === \"load\" ? \"+\" : \"-\"}${pattern}`);\n\t\t}\n\t\tthis.setProjectTopLevelPaths(item.resourceType, updated);\n\t\treturn true;\n\t}\n\n\tprivate setProjectTopLevelPaths(key: ResourceType, paths: string[]): void {\n\t\tif (key === \"skills\") this.settingsManager.setProjectSkillPaths(paths);\n\t\telse if (key === \"prompts\") this.settingsManager.setProjectPromptTemplatePaths(paths);\n\t\telse this.settingsManager.setProjectThemePaths(paths);\n\t}\n\n\tprivate setProjectPackageOverride(item: ResourceItem, state: ProjectOverrideState): boolean {\n\t\tconst packages = [...(this.settingsManager.getProjectSettings().packages ?? [])] as PackageSource[];\n\t\tlet pkgIndex = packages.findIndex((pkg) =>\n\t\t\tthis.packageSourceStringMatches(\n\t\t\t\titem.metadata.source,\n\t\t\t\tthis.getItemScope(item),\n\t\t\t\ttypeof pkg === \"string\" ? pkg : pkg.source,\n\t\t\t\t\"project\",\n\t\t\t),\n\t\t);\n\t\tif (pkgIndex === -1) {\n\t\t\t// v8 ignore next -- getNextOverrideState never yields inherit with the package missing from settings\n\t\t\tif (state === \"inherit\") return false;\n\t\t\tpackages.push(this.createPackageOverrideSource(item));\n\t\t\tpkgIndex = packages.length - 1;\n\t\t}\n\t\tlet pkg = packages[pkgIndex];\n\t\t// v8 ignore next -- packages[pkgIndex] is always defined after the missing-entry push\n\t\tif (pkg === undefined) return false;\n\t\tif (typeof pkg === \"string\") {\n\t\t\tpkg = { source: pkg };\n\t\t\tpackages[pkgIndex] = pkg;\n\t\t}\n\t\tconst pattern = this.getPackageResourcePattern(item);\n\t\tconst updated = ((pkg[item.resourceType] ?? []) as string[]).filter(\n\t\t\t(entry) => this.getPatternEntryTarget(entry) !== pattern,\n\t\t);\n\t\tif (state !== \"inherit\") updated.push(`${state === \"load\" ? \"+\" : \"-\"}${pattern}`);\n\t\t(pkg as Record<string, unknown>)[item.resourceType] = updated.length > 0 ? updated : undefined;\n\t\tif (!RESOURCE_TYPES.some((key) => (pkg as Record<string, unknown>)[key] !== undefined)) {\n\t\t\tif (pkg.autoload === false) packages.splice(pkgIndex, 1);\n\t\t\telse packages[pkgIndex] = pkg.source;\n\t\t}\n\t\tthis.settingsManager.setProjectPackages(packages);\n\t\treturn true;\n\t}\n\n\tprivate getNextOverrideState(item: ResourceItem): ProjectOverrideState {\n\t\tconst state = this.getProjectOverrideState(item);\n\t\tconst inheritedEnabled = this.getInheritedEnabled(item);\n\t\tif (state === \"inherit\") return inheritedEnabled ? \"unload\" : \"load\";\n\t\tif (state === \"unload\") return inheritedEnabled ? \"load\" : \"inherit\";\n\t\treturn inheritedEnabled ? \"inherit\" : \"unload\";\n\t}\n\n\tprivate getProjectOverrideState(item: ResourceItem): ProjectOverrideState {\n\t\t// v8 ignore next -- getProjectOverrideState is only called with project write scope\n\t\tif (this.writeScope !== \"project\") return \"inherit\";\n\t\tif (item.metadata.origin === \"top-level\") {\n\t\t\treturn this.getOverrideStateFromEntries(\n\t\t\t\t(this.settingsManager.getProjectSettings()[item.resourceType] ?? []) as string[],\n\t\t\t\tthis.getTopLevelOverridePatterns(item, \"project\"),\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t\tconst pkg = this.findMatchingPackageSource(item, \"project\");\n\t\tif (typeof pkg !== \"object\") return \"inherit\";\n\t\tconst entries = pkg[item.resourceType];\n\t\tif (entries === undefined) return \"inherit\";\n\t\treturn this.getOverrideStateFromEntries(\n\t\t\tentries,\n\t\t\tnew Set([this.getPackageResourcePattern(item)]),\n\t\t\tpkg.autoload !== false,\n\t\t);\n\t}\n\n\tprivate getOverrideStateFromEntries(\n\t\tentries: string[],\n\t\tpatterns: Set<string>,\n\t\temptyArrayIsUnload: boolean,\n\t): ProjectOverrideState {\n\t\tif (entries.length === 0 && emptyArrayIsUnload) return \"unload\";\n\t\tlet state: ProjectOverrideState = \"inherit\";\n\t\tfor (const entry of entries) {\n\t\t\tif (!patterns.has(this.getPatternEntryTarget(entry))) continue;\n\t\t\tif (entry.startsWith(\"!\") || entry.startsWith(\"-\")) state = \"unload\";\n\t\t\telse state = \"load\";\n\t\t}\n\t\treturn state;\n\t}\n\n\tprivate getInheritedEnabled(item: ResourceItem): boolean {\n\t\treturn (\n\t\t\tthis.inheritedEnabledByKey.get(this.getResourceItemKey(item)) ??\n\t\t\t(this.getItemScope(item) === \"user\" ? item.enabled : true)\n\t\t);\n\t}\n\n\tprivate isInheritedGlobalItem(item: ResourceItem): boolean {\n\t\treturn this.getItemScope(item) === \"user\" || this.inheritedEnabledByKey.has(this.getResourceItemKey(item));\n\t}\n\n\tprivate getTopLevelOverridePatterns(item: ResourceItem, scope: SettingsScope): Set<string> {\n\t\tconst baseDir = this.getTopLevelBaseDir(scope);\n\t\tconst patterns = new Set<string>([\n\t\t\tthis.getResourcePatternForScope(item, scope),\n\t\t\titem.path,\n\t\t\trelative(baseDir, item.path),\n\t\t]);\n\t\tif (item.metadata.baseDir) patterns.add(relative(item.metadata.baseDir, item.path));\n\t\treturn patterns;\n\t}\n\n\tprivate getResourcePatternForScope(item: ResourceItem, scope: SettingsScope): string {\n\t\tconst sourceScope = this.getItemScope(item);\n\t\tif (scope !== sourceScope) return item.path;\n\t\tconst baseDir = item.metadata.baseDir ?? this.getTopLevelBaseDir(sourceScope);\n\t\treturn relative(baseDir, item.path);\n\t}\n\n\tprivate createPackageOverrideSource(item: ResourceItem): PackageSource {\n\t\tconst source = item.metadata.source;\n\t\tif (!isLocalPath(source)) return { source, autoload: false };\n\t\tconst sourcePath = resolvePath(source, this.getTopLevelBaseDir(this.getItemScope(item)), { trim: true });\n\t\treturn { source: relative(this.getTopLevelBaseDir(\"project\"), sourcePath) || \".\", autoload: false };\n\t}\n\n\tprivate packageSourceStringMatches(\n\t\tleftSource: string,\n\t\tleftScope: SettingsScope,\n\t\trightSource: string,\n\t\trightScope: SettingsScope,\n\t): boolean {\n\t\tif (leftSource === rightSource) return true;\n\t\tif (!isLocalPath(leftSource) || !isLocalPath(rightSource)) return false;\n\t\tconst left = resolvePath(leftSource, this.getTopLevelBaseDir(leftScope), { trim: true });\n\t\tconst right = resolvePath(rightSource, this.getTopLevelBaseDir(rightScope), { trim: true });\n\t\treturn left === right;\n\t}\n\n\tprivate findMatchingPackageSource(item: ResourceItem, targetScope: SettingsScope): PackageSource | undefined {\n\t\tconst settings =\n\t\t\t// v8 ignore next -- findMatchingPackageSource is only called with the project target scope\n\t\t\ttargetScope === \"project\"\n\t\t\t\t? this.settingsManager.getProjectSettings()\n\t\t\t\t: this.settingsManager.getGlobalSettings();\n\t\treturn (settings.packages ?? []).find((pkg) =>\n\t\t\tthis.packageSourceStringMatches(\n\t\t\t\titem.metadata.source,\n\t\t\t\tthis.getItemScope(item),\n\t\t\t\ttypeof pkg === \"string\" ? pkg : pkg.source,\n\t\t\t\ttargetScope,\n\t\t\t),\n\t\t);\n\t}\n\n\tprivate getPatternEntryTarget(entry: string): string {\n\t\treturn entry.startsWith(\"!\") || entry.startsWith(\"+\") || entry.startsWith(\"-\") ? entry.slice(1) : entry;\n\t}\n\n\tprivate getResourceItemKey(item: ResourceItem): string {\n\t\treturn `${item.resourceType}:${canonicalizePath(item.path)}`;\n\t}\n\n\tprivate getItemScope(item: ResourceItem): SettingsScope {\n\t\treturn item.metadata.scope === \"project\" ? \"project\" : \"user\";\n\t}\n\n\tprivate getTopLevelBaseDir(scope: \"user\" | \"project\"): string {\n\t\treturn scope === \"project\" ? join(this.cwd, CONFIG_DIR_NAME) : this.agentDir;\n\t}\n\n\tprivate getResourcePattern(item: ResourceItem): string {\n\t\tconst scope = item.metadata.scope as \"user\" | \"project\";\n\t\tconst baseDir = item.metadata.baseDir ?? this.getTopLevelBaseDir(scope);\n\t\treturn relative(baseDir, item.path);\n\t}\n\n\tprivate getPackageResourcePattern(item: ResourceItem): string {\n\t\tconst baseDir = item.metadata.baseDir ?? dirname(item.path);\n\t\treturn relative(baseDir, item.path);\n\t}\n}\n\nexport class ConfigSelectorComponent extends Container implements Focusable {\n\tprivate header: ConfigSelectorHeader;\n\tprivate resourceList: ResourceList;\n\tprivate pluginSelectionEntry?: PluginSelectionEntryComponent;\n\tprivate pluginManagerEntry?: PluginManagerEntryComponent;\n\tprivate writeScope: ConfigWriteScope;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.resourceList.focused = value;\n\t}\n\n\tconstructor(\n\t\tresolvedPaths: ScopedResolvedPaths,\n\t\tsettingsManager: SettingsManager,\n\t\tcwd: string,\n\t\tagentDir: string,\n\t\tonClose: () => void,\n\t\tonExit: () => void,\n\t\trequestRender: () => void,\n\t\tterminalHeight?: number,\n\t\twriteScope: ConfigWriteScope = \"global\",\n\t\tprojectModeAvailable = true,\n\t\tpluginSelection?: PluginSelectionEntryOptionsV1,\n\t\tpluginManager?: PluginManagerEntryOptionsV1,\n\t\tpluginManagerScope: ConfigWriteScope = \"global\",\n\t) {\n\t\tsuper();\n\n\t\tthis.writeScope = writeScope;\n\t\tconst groupsByScope = {\n\t\t\tglobal: buildGroups(resolvedPaths.global, agentDir),\n\t\t\tproject: buildGroups(resolvedPaths.project, agentDir),\n\t\t};\n\t\tconst pluginSelectionEntry =\n\t\t\tpluginSelection === undefined\n\t\t\t\t? undefined\n\t\t\t\t: new PluginSelectionEntryComponent({\n\t\t\t\t\t\t...pluginSelection,\n\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\tpluginSelection.onClose?.();\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequestRender,\n\t\t\t\t\t});\n\t\tthis.pluginSelectionEntry = pluginSelectionEntry;\n\t\tconst pluginManagerEntry =\n\t\t\tpluginManager === undefined\n\t\t\t\t? undefined\n\t\t\t\t: new PluginManagerEntryComponent({\n\t\t\t\t\t\t...pluginManager,\n\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\tpluginManager.onClose?.();\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequestRender,\n\t\t\t\t\t});\n\t\tthis.pluginManagerEntry = pluginManagerEntry;\n\n\t\t// Add header\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.header = new ConfigSelectorHeader(this.writeScope, projectModeAvailable);\n\t\tthis.addChild(this.header);\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Resource list\n\t\tthis.resourceList = new ResourceList(\n\t\t\tgroupsByScope,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tterminalHeight === undefined\n\t\t\t\t? undefined\n\t\t\t\t: Math.max(\n\t\t\t\t\t\t5,\n\t\t\t\t\t\tterminalHeight - (pluginSelection === undefined ? 0 : 2) - (pluginManager === undefined ? 0 : 2),\n\t\t\t\t\t),\n\t\t\tthis.writeScope,\n\t\t\tpluginSelectionEntry,\n\t\t\tpluginManagerEntry,\n\t\t\tpluginManagerScope,\n\t\t);\n\t\tthis.resourceList.onCancel = onClose;\n\t\tthis.resourceList.onExit = onExit;\n\t\tthis.resourceList.onToggle = () => requestRender();\n\t\tif (projectModeAvailable) {\n\t\t\tthis.resourceList.onSwitchMode = () => {\n\t\t\t\tthis.switchWriteScope();\n\t\t\t\trequestRender();\n\t\t\t};\n\t\t}\n\t\tthis.addChild(this.resourceList);\n\n\t\t// Bottom border\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tprivate switchWriteScope(): void {\n\t\tthis.writeScope = this.writeScope === \"global\" ? \"project\" : \"global\";\n\t\tthis.header.setWriteScope(this.writeScope);\n\t\tthis.resourceList.setWriteScope(this.writeScope);\n\t}\n\n\tgetResourceList(): ResourceList {\n\t\treturn this.resourceList;\n\t}\n\n\tgetPluginSelectionEntry(): PluginSelectionEntryComponent | undefined {\n\t\treturn this.pluginSelectionEntry;\n\t}\n\n\tgetPluginManagerEntry(): PluginManagerEntryComponent | undefined {\n\t\treturn this.pluginManagerEntry;\n\t}\n\n\tasync openPluginSelection(): Promise<PluginSelectionEntryOpenResultV1 | undefined> {\n\t\treturn this.pluginSelectionEntry === undefined\n\t\t\t? undefined\n\t\t\t: await this.pluginSelectionEntry.openPluginSelection();\n\t}\n\n\tasync openPluginManager(): Promise<PluginManagerEntryOpenResultV1 | undefined> {\n\t\treturn this.pluginManagerEntry === undefined ? undefined : await this.pluginManagerEntry.openPluginManager();\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-entry.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/custom-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,SAAS,EAAgB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-entry.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/custom-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,SAAS,EAAgB,MAAM,kBAAkB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,eAAe,CAAC,CAAY;IACpC,OAAO,CAAC,SAAS,CAAS;IAE1B,YAAY,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAK/D;IAED,UAAU,IAAI,OAAO,CAEpB;IAED,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAKnC;IAEQ,UAAU,IAAI,IAAI,CAG1B;IAED,OAAO,CAAC,OAAO;CA4Bf","sourcesContent":["import type { Component } from \"@agent-forge/tui\";\nimport { Box, Container, Spacer, Text } from \"@agent-forge/tui\";\nimport { t } from \"../../../core/i18n/index.ts\";\nimport type { CustomEntry } from \"../../../core/session-manager.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport type { EntryRenderer } from \"./render-types.ts\";\n\n/**\n * Component that renders a custom session entry from extensions.\n * The host owns transcript spacing; renderer output should provide only its content.\n */\nexport class CustomEntryComponent extends Container {\n\tprivate entry: CustomEntry<unknown>;\n\tprivate renderer: EntryRenderer;\n\tprivate customComponent?: Component;\n\tprivate _expanded = false;\n\n\tconstructor(entry: CustomEntry<unknown>, renderer: EntryRenderer) {\n\t\tsuper();\n\t\tthis.entry = entry;\n\t\tthis.renderer = renderer;\n\t\tthis.rebuild();\n\t}\n\n\thasContent(): boolean {\n\t\treturn this.customComponent !== undefined;\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tif (this._expanded !== expanded) {\n\t\t\tthis._expanded = expanded;\n\t\t\tthis.rebuild();\n\t\t}\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tthis.rebuild();\n\t}\n\n\tprivate rebuild(): void {\n\t\tthis.clear();\n\t\tthis.customComponent = undefined;\n\n\t\tlet component: Component | undefined;\n\t\ttry {\n\t\t\tcomponent = this.renderer(this.entry, { expanded: this._expanded }, theme);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconst box = new Box(1, 1, (text) => theme.bg(\"customMessageBg\", text));\n\t\t\tbox.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\ttheme.fg(\"error\", t(\"[{type}] renderer failed: {message}\", { type: this.entry.customType, message })),\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcomponent = box;\n\t\t}\n\n\t\tif (!component) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.customComponent = component;\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(component);\n\t}\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Box, Container, Spacer, Text } from "@agent-forge/tui";
|
|
2
|
+
import { t } from "../../../core/i18n/index.js";
|
|
2
3
|
import { theme } from "../theme/theme.js";
|
|
3
4
|
/**
|
|
4
5
|
* Component that renders a custom session entry from extensions.
|
|
@@ -38,7 +39,7 @@ export class CustomEntryComponent extends Container {
|
|
|
38
39
|
catch (error) {
|
|
39
40
|
const message = error instanceof Error ? error.message : String(error);
|
|
40
41
|
const box = new Box(1, 1, (text) => theme.bg("customMessageBg", text));
|
|
41
|
-
box.addChild(new Text(theme.fg("error",
|
|
42
|
+
box.addChild(new Text(theme.fg("error", t("[{type}] renderer failed: {message}", { type: this.entry.customType, message })), 0, 0));
|
|
42
43
|
component = box;
|
|
43
44
|
}
|
|
44
45
|
if (!component) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-entry.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/custom-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-entry.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/custom-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,6BAA6B,CAAC;AAEhD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAC1C,KAAK,CAAuB;IAC5B,QAAQ,CAAgB;IACxB,eAAe,CAAa;IAC5B,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,KAA2B,EAAE,QAAuB,EAAE;QACjE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;IAAA,CACf;IAED,UAAU,GAAY;QACrB,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;IAAA,CAC1C;IAED,WAAW,CAAC,QAAiB,EAAQ;QACpC,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;IAAA,CACD;IAEQ,UAAU,GAAS;QAC3B,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IAAA,CACf;IAEO,OAAO,GAAS;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,IAAI,SAAgC,CAAC;QACrC,IAAI,CAAC;YACJ,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;YACvE,GAAG,CAAC,QAAQ,CACX,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,EACrG,CAAC,EACD,CAAC,CACD,CACD,CAAC;YACF,SAAS,GAAG,GAAG,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAAA,CACzB;CACD","sourcesContent":["import type { Component } from \"@agent-forge/tui\";\nimport { Box, Container, Spacer, Text } from \"@agent-forge/tui\";\nimport { t } from \"../../../core/i18n/index.ts\";\nimport type { CustomEntry } from \"../../../core/session-manager.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport type { EntryRenderer } from \"./render-types.ts\";\n\n/**\n * Component that renders a custom session entry from extensions.\n * The host owns transcript spacing; renderer output should provide only its content.\n */\nexport class CustomEntryComponent extends Container {\n\tprivate entry: CustomEntry<unknown>;\n\tprivate renderer: EntryRenderer;\n\tprivate customComponent?: Component;\n\tprivate _expanded = false;\n\n\tconstructor(entry: CustomEntry<unknown>, renderer: EntryRenderer) {\n\t\tsuper();\n\t\tthis.entry = entry;\n\t\tthis.renderer = renderer;\n\t\tthis.rebuild();\n\t}\n\n\thasContent(): boolean {\n\t\treturn this.customComponent !== undefined;\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tif (this._expanded !== expanded) {\n\t\t\tthis._expanded = expanded;\n\t\t\tthis.rebuild();\n\t\t}\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tthis.rebuild();\n\t}\n\n\tprivate rebuild(): void {\n\t\tthis.clear();\n\t\tthis.customComponent = undefined;\n\n\t\tlet component: Component | undefined;\n\t\ttry {\n\t\t\tcomponent = this.renderer(this.entry, { expanded: this._expanded }, theme);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconst box = new Box(1, 1, (text) => theme.bg(\"customMessageBg\", text));\n\t\t\tbox.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\ttheme.fg(\"error\", t(\"[{type}] renderer failed: {message}\", { type: this.entry.customType, message })),\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcomponent = box;\n\t\t}\n\n\t\tif (!component) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.customComponent = component;\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(component);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog-editor.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/dialog-editor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,SAAS,EAET,KAAK,aAAa,EAClB,KAAK,SAAS,EAId,KAAK,GAAG,EACR,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dialog-editor.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/dialog-editor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,SAAS,EAET,KAAK,aAAa,EAClB,KAAK,SAAS,EAId,KAAK,GAAG,EACR,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAMvE,qBAAa,qBAAsB,SAAQ,SAAU,YAAW,SAAS;IACxE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YACC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,EACpB,OAAO,CAAC,EAAE,aAAa,EACvB,qBAAqB,CAAC,EAAE,MAAM,EAiD9B;IAED,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAgBjC;YAEa,wBAAwB;CAgBtC","sourcesContent":["/**\n * Multi-line editor component for extensions.\n * Supports Ctrl+G for external editor.\n */\n\nimport {\n\tContainer,\n\tEditor,\n\ttype EditorOptions,\n\ttype Focusable,\n\tgetKeybindings,\n\tSpacer,\n\tText,\n\ttype TUI,\n} from \"@agent-forge/tui\";\nimport { t } from \"../../../core/i18n/index.ts\";\nimport type { KeybindingsManager } from \"../../../core/keybindings.ts\";\nimport { editInExternalEditor } from \"../external-editor.ts\";\nimport { getEditorTheme, theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\nimport { keyHint } from \"./keybinding-hints.ts\";\n\nexport class DialogEditorComponent extends Container implements Focusable {\n\tprivate editor: Editor;\n\tprivate onSubmitCallback: (value: string) => void;\n\tprivate onCancelCallback: () => void;\n\tprivate tui: TUI;\n\tprivate keybindings: KeybindingsManager;\n\tprivate externalEditorCommand: string;\n\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.editor.focused = value;\n\t}\n\n\tconstructor(\n\t\ttui: TUI,\n\t\tkeybindings: KeybindingsManager,\n\t\ttitle: string,\n\t\tprefill: string | undefined,\n\t\tonSubmit: (value: string) => void,\n\t\tonCancel: () => void,\n\t\toptions?: EditorOptions,\n\t\texternalEditorCommand?: string,\n\t) {\n\t\tsuper();\n\n\t\tthis.tui = tui;\n\t\tthis.keybindings = keybindings;\n\t\tthis.externalEditorCommand =\n\t\t\texternalEditorCommand ||\n\t\t\tprocess.env.VISUAL ||\n\t\t\tprocess.env.EDITOR ||\n\t\t\t(process.platform === \"win32\" ? \"notepad\" : \"nano\");\n\t\tthis.onSubmitCallback = onSubmit;\n\t\tthis.onCancelCallback = onCancel;\n\n\t\t// Add top border\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Add title\n\t\tthis.addChild(new Text(theme.fg(\"accent\", title), 1, 0));\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Create editor\n\t\tthis.editor = new Editor(tui, getEditorTheme(), options);\n\t\tif (prefill) {\n\t\t\tthis.editor.setText(prefill);\n\t\t}\n\t\t// Wire up Enter to submit (Shift+Enter for newlines, like the main editor)\n\t\tthis.editor.onSubmit = (text: string) => {\n\t\t\tthis.onSubmitCallback(text);\n\t\t};\n\t\tthis.addChild(this.editor);\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Add hint\n\t\tconst hint =\n\t\t\tkeyHint(\"tui.select.confirm\", t(\"submit\")) +\n\t\t\t\" \" +\n\t\t\tkeyHint(\"tui.input.newLine\", t(\"newline\")) +\n\t\t\t\" \" +\n\t\t\tkeyHint(\"tui.select.cancel\", t(\"cancel\")) +\n\t\t\t` ${keyHint(\"app.editor.external\", t(\"external editor\"))}`;\n\t\tthis.addChild(new Text(hint, 1, 0));\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Add bottom border\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\thandleInput(keyData: string): void {\n\t\tconst kb = getKeybindings();\n\t\t// Escape or Ctrl+C to cancel\n\t\tif (kb.matches(keyData, \"tui.select.cancel\")) {\n\t\t\tthis.onCancelCallback();\n\t\t\treturn;\n\t\t}\n\n\t\t// External editor (app keybinding)\n\t\tif (this.keybindings.matches(keyData, \"app.editor.external\")) {\n\t\t\tvoid this.handleOpenExternalEditor();\n\t\t\treturn;\n\t\t}\n\n\t\t// Forward to editor\n\t\tthis.editor.handleInput(keyData);\n\t}\n\n\tprivate async handleOpenExternalEditor(): Promise<void> {\n\t\tconst content = this.editor.getText();\n\t\tthis.tui.stop();\n\t\ttry {\n\t\t\tconst result = await editInExternalEditor({\n\t\t\t\tcommand: this.externalEditorCommand,\n\t\t\t\tcontent,\n\t\t\t});\n\t\t\tif (result.status === \"complete\") {\n\t\t\t\tthis.editor.setText(result.content);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.tui.start();\n\t\t\tthis.tui.requestRender(true);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Supports Ctrl+G for external editor.
|
|
4
4
|
*/
|
|
5
5
|
import { Container, Editor, getKeybindings, Spacer, Text, } from "@agent-forge/tui";
|
|
6
|
+
import { t } from "../../../core/i18n/index.js";
|
|
6
7
|
import { editInExternalEditor } from "../external-editor.js";
|
|
7
8
|
import { getEditorTheme, theme } from "../theme/theme.js";
|
|
8
9
|
import { DynamicBorder } from "./dynamic-border.js";
|
|
@@ -51,12 +52,12 @@ export class DialogEditorComponent extends Container {
|
|
|
51
52
|
this.addChild(this.editor);
|
|
52
53
|
this.addChild(new Spacer(1));
|
|
53
54
|
// Add hint
|
|
54
|
-
const hint = keyHint("tui.select.confirm", "submit") +
|
|
55
|
+
const hint = keyHint("tui.select.confirm", t("submit")) +
|
|
55
56
|
" " +
|
|
56
|
-
keyHint("tui.input.newLine", "newline") +
|
|
57
|
+
keyHint("tui.input.newLine", t("newline")) +
|
|
57
58
|
" " +
|
|
58
|
-
keyHint("tui.select.cancel", "cancel") +
|
|
59
|
-
` ${keyHint("app.editor.external", "external editor")}`;
|
|
59
|
+
keyHint("tui.select.cancel", t("cancel")) +
|
|
60
|
+
` ${keyHint("app.editor.external", t("external editor"))}`;
|
|
60
61
|
this.addChild(new Text(hint, 1, 0));
|
|
61
62
|
this.addChild(new Spacer(1));
|
|
62
63
|
// Add bottom border
|