From 53a01e62e2450201e82149813f820c3ff1a4a198 Mon Sep 17 00:00:00 2001 From: JinmingYang <2214962083@qq.com> Date: Mon, 23 Dec 2024 23:56:28 +0800 Subject: [PATCH] feat: refactor controllers and socket actions --- .eslintrc.json | 2 +- package.json | 250 +- package.nls.en.json | 7 + package.nls.json | 7 + package.nls.zh-cn.json | 7 + pnpm-lock.yaml | 4575 +++++++++-------- src/extension/actions/ai-model-actions.ts | 148 + src/extension/actions/ai-provider-actions.ts | 38 + .../apply-actions.ts} | 47 +- .../chat-actions.ts} | 18 +- src/extension/actions/chat-session-actions.ts | 192 + .../codebase-actions.ts} | 25 +- .../doc-actions.ts} | 102 +- .../file-actions.ts} | 193 +- .../git-actions.ts} | 37 +- src/extension/actions/index.ts | 33 + .../mention-actions.ts} | 24 +- src/extension/actions/settings-actions.ts | 134 + src/extension/actions/system-actions.ts | 27 + src/extension/actions/terminal-actions.ts | 20 + .../ai/model-providers/helpers/factory.ts | 6 +- .../chat-context-processor => chat}/index.ts | 0 .../models/README.md | 0 .../models/all-MiniLM-L6-v2/README.md | 0 .../models/all-MiniLM-L6-v2/config.json | 0 .../onnx/model_quantized.onnx | Bin .../all-MiniLM-L6-v2/special_tokens_map.json | 0 .../models/all-MiniLM-L6-v2/tokenizer.json | 0 .../all-MiniLM-L6-v2/tokenizer_config.json | 0 .../models/all-MiniLM-L6-v2/vocab.txt | 0 .../strategies/auto-task-strategy/index.ts | 0 .../strategies/base/base-agent.ts | 4 +- .../strategies/base/base-node.ts | 8 +- .../strategies/base/base-state.ts | 0 .../strategies/base/base-strategy.ts | 0 .../strategies/base/index.ts | 0 .../strategies/chat-strategy/chat-workflow.ts | 0 .../strategies/chat-strategy/index.ts | 0 .../chat-messages-constructor.ts | 2 +- .../conversation-message-constructor.ts | 2 +- .../chat-strategy/nodes/agent-node.ts | 2 +- .../chat-strategy/nodes/generate-node.ts | 0 .../strategies/chat-strategy/state.ts | 0 .../strategies/composer-strategy/index.ts | 0 .../strategies/ui-designer-strategy/index.ts | 0 .../tree-sitter/code-chunker.ts | 0 .../tree-sitter/constants.ts | 0 .../copilot-langs-config/c_sharp.ts | 0 .../tree-sitter/copilot-langs-config/cpp.ts | 0 .../tree-sitter/copilot-langs-config/go.ts | 0 .../tree-sitter/copilot-langs-config/index.ts | 0 .../tree-sitter/copilot-langs-config/java.ts | 0 .../copilot-langs-config/javascript.ts | 0 .../copilot-langs-config/python.ts | 0 .../tree-sitter/copilot-langs-config/ruby.ts | 0 .../tree-sitter/copilot-langs-config/rust.ts | 0 .../tree-sitter/copilot-langs-config/tsx.ts | 0 .../tree-sitter/copilot-langs-config/types.ts | 0 .../copilot-langs-config/typescript.ts | 0 .../queries/code-snippet-queries/c.ts | 0 .../queries/code-snippet-queries/c_sharp.ts | 0 .../queries/code-snippet-queries/cpp.ts | 0 .../queries/code-snippet-queries/elisp.ts | 0 .../queries/code-snippet-queries/elixir.ts | 0 .../queries/code-snippet-queries/go.ts | 0 .../queries/code-snippet-queries/index.ts | 0 .../queries/code-snippet-queries/java.ts | 0 .../code-snippet-queries/javascript.ts | 0 .../queries/code-snippet-queries/ocaml.ts | 0 .../queries/code-snippet-queries/php.ts | 0 .../queries/code-snippet-queries/python.ts | 0 .../queries/code-snippet-queries/ql.ts | 0 .../queries/code-snippet-queries/ruby.ts | 0 .../queries/code-snippet-queries/rust.ts | 0 .../code-snippet-queries/typescript.ts | 0 .../queries/import-queries/index.ts | 0 .../queries/import-queries/typescript.ts | 0 .../tree-sitter/queries/tags-queries/c.ts | 0 .../queries/tags-queries/c_sharp.ts | 0 .../tree-sitter/queries/tags-queries/cpp.ts | 0 .../tree-sitter/queries/tags-queries/elisp.ts | 0 .../queries/tags-queries/elixir.ts | 0 .../tree-sitter/queries/tags-queries/elm.ts | 0 .../tree-sitter/queries/tags-queries/go.ts | 0 .../tree-sitter/queries/tags-queries/index.ts | 0 .../tree-sitter/queries/tags-queries/java.ts | 0 .../queries/tags-queries/javascript.ts | 0 .../tree-sitter/queries/tags-queries/ocaml.ts | 0 .../tree-sitter/queries/tags-queries/php.ts | 0 .../queries/tags-queries/python.ts | 0 .../tree-sitter/queries/tags-queries/ql.ts | 0 .../tree-sitter/queries/tags-queries/ruby.ts | 0 .../tree-sitter/queries/tags-queries/rust.ts | 0 .../queries/tags-queries/typescript.ts | 0 .../types/langgraph.ts | 0 .../utils/code-snippet-formatter.ts | 0 .../utils/combine-node.ts | 0 .../utils/conversation-utils.ts | 0 ...nvert-langchain-message-to-conversation.ts | 0 .../utils/doc-crawler.ts | 0 .../utils/fake-request-headers.ts | 0 .../utils/find-current-tools-call-params.ts | 0 .../utils/get-file-content.ts | 0 .../utils/get-tool-calls-from-message.ts | 0 .../utils/message-builder.ts | 0 .../utils/progress-reporter.ts | 0 .../utils/searxng-search.ts | 0 .../vectordb/base-indexer.ts | 0 .../vectordb/codebase-indexer.ts | 0 .../vectordb/doc-indexer.ts | 0 src/extension/commands/action/command.ts | 37 + src/extension/commands/command-manager.ts | 3 + src/extension/commands/index.ts | 3 + src/extension/index.ts | 4 + src/extension/logger.ts | 2 + .../{webview-api => }/lowdb/ai-model-db.ts | 0 .../{webview-api => }/lowdb/ai-provider-db.ts | 0 .../{webview-api => }/lowdb/base-db.ts | 0 .../lowdb/chat-sessions-db.ts | 0 .../{webview-api => }/lowdb/doc-sites-db.ts | 0 .../{webview-api => }/lowdb/settings-db.ts | 0 src/extension/polyfill.ts | 5 +- src/extension/registers/action-register.ts | 136 + .../registers/chat-histories-tree-register.ts | 330 ++ .../registers/codebase-watcher-register.ts | 2 +- .../registers/controller-register.ts | 46 - src/extension/registers/index.ts | 8 +- src/extension/registers/webview-register.ts | 38 +- src/extension/state.ts | 30 + .../controllers/ai-model-controller.ts | 135 - .../controllers/ai-provider-controller.ts | 30 - .../controllers/chat-session-controller.ts | 119 - .../webview-api/controllers/index.ts | 31 - .../controllers/settings-controller.ts | 102 - .../controllers/system-controller.ts | 27 - .../controllers/terminal-controller.ts | 18 - src/extension/webview-api/index.ts | 136 - src/extension/webview-api/types.ts | 37 - src/shared/actions/base-action-manager.ts | 287 ++ .../actions/client-action-collection.ts | 15 + src/shared/actions/client-action-manager.ts | 129 + .../actions/server-action-collection.ts | 30 + src/shared/actions/server-action-manager.ts | 121 + src/shared/actions/types.ts | 132 + .../plugins/agents/codebase-search-agent.ts | 4 +- .../plugins/agents/doc-retriever-agent.ts | 10 +- src/shared/plugins/agents/fs-visit-agent.ts | 4 +- src/shared/plugins/agents/web-search-agent.ts | 8 +- src/shared/plugins/agents/web-visit-agent.ts | 6 +- src/shared/plugins/base/base-to-state.ts | 2 +- .../base/client/client-plugin-types.ts | 4 +- .../base/server/create-provider-manager.ts | 4 +- src/shared/plugins/base/strategies.ts | 4 +- .../doc-plugin/client/doc-client-plugin.tsx | 7 +- .../doc-plugin/client/doc-log-preview.tsx | 11 +- .../server/doc-mention-utils-provider.ts | 8 +- .../fs-plugin/client/fs-client-plugin.tsx | 28 +- .../fs-plugin/client/fs-log-preview.tsx | 13 +- .../fs-chat-strategy-provider.ts | 4 +- .../server/fs-mention-utils-provider.ts | 48 +- .../git-plugin/client/git-client-plugin.tsx | 8 +- .../server/git-mention-utils-provider.ts | 14 +- .../client/terminal-client-plugin.tsx | 7 +- .../server/terminal-mention-utils-provider.ts | 12 +- .../web-plugin/client/web-log-preview.tsx | 3 +- .../server/web-mention-utils-provider.ts | 4 +- src/shared/types/common.ts | 9 + src/shared/utils/common.ts | 18 + src/webview/actions/chat-actions.ts | 41 + src/webview/actions/common-actions.ts | 29 + src/webview/actions/index.ts | 17 + src/webview/actions/setting-actions.ts | 34 + src/webview/actions/utils/emitter.ts | 32 + src/webview/actions/utils/use-on.ts | 25 + .../components/chat/editor/chat-input.tsx | 9 +- .../chat/messages/markdown/code-block.tsx | 8 +- .../markdown/highlighter/highlighter.tsx | 10 +- .../chat/selectors/model-selector.tsx | 39 +- .../components/chat/sidebar/chat-sidebar.tsx | 14 +- .../global-search/global-search.tsx | 21 +- .../ai-model-management/index.tsx | 39 +- .../ai-provider-management/index.tsx | 29 +- .../settings/custom-renders/codebase.tsx | 8 +- .../custom-renders/doc-management/index.tsx | 43 +- src/webview/components/settings/settings.tsx | 6 +- src/webview/contexts/action-context.tsx | 24 + src/webview/contexts/chat-context.tsx | 46 + .../contexts/global-search-context/index.tsx | 19 +- src/webview/contexts/providers.tsx | 7 +- src/webview/hooks/api/use-doc-sites.ts | 10 +- .../hooks/api/use-file-info-for-message.ts | 13 +- src/webview/hooks/api/use-files.ts | 9 +- src/webview/hooks/api/use-get-full-path.ts | 9 +- src/webview/hooks/api/use-read-file.ts | 9 +- src/webview/hooks/api/use-settings.ts | 11 +- src/webview/hooks/chat/use-apply-code.ts | 16 +- .../hooks/chat/use-chat-sessions-ui.ts | 29 - .../hooks/chat/use-plugin-providers.tsx | 5 +- src/webview/hooks/chat/use-send-message.ts | 12 +- src/webview/lexical/hooks/use-drop-handler.ts | 12 +- src/webview/main.tsx | 16 +- .../actions-api}/get-socket-port.ts | 0 src/webview/network/actions-api/index.ts | 3 + .../react-query/query-client.ts | 0 src/webview/pages/index.tsx | 6 +- src/webview/services/api-client/index.ts | 127 - src/webview/services/api-client/types.ts | 37 - src/webview/stores/chat-store.ts | 36 +- src/webview/types/chat.ts | 2 +- src/webview/utils/logger.ts | 2 + vite.config.mts | 4 +- 211 files changed, 5569 insertions(+), 3442 deletions(-) create mode 100644 src/extension/actions/ai-model-actions.ts create mode 100644 src/extension/actions/ai-provider-actions.ts rename src/extension/{webview-api/controllers/apply-controller.ts => actions/apply-actions.ts} (67%) rename src/extension/{webview-api/controllers/chat-controller.ts => actions/chat-actions.ts} (53%) create mode 100644 src/extension/actions/chat-session-actions.ts rename src/extension/{webview-api/controllers/codebase-controller.ts => actions/codebase-actions.ts} (50%) rename src/extension/{webview-api/controllers/doc-controller.ts => actions/doc-actions.ts} (50%) rename src/extension/{webview-api/controllers/file-controller.ts => actions/file-actions.ts} (51%) rename src/extension/{webview-api/controllers/git-controller.ts => actions/git-actions.ts} (74%) create mode 100644 src/extension/actions/index.ts rename src/extension/{webview-api/controllers/mention-controller.ts => actions/mention-actions.ts} (80%) create mode 100644 src/extension/actions/settings-actions.ts create mode 100644 src/extension/actions/system-actions.ts create mode 100644 src/extension/actions/terminal-actions.ts rename src/extension/{webview-api/chat-context-processor => chat}/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/README.md (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/all-MiniLM-L6-v2/README.md (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/all-MiniLM-L6-v2/config.json (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/all-MiniLM-L6-v2/onnx/model_quantized.onnx (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/all-MiniLM-L6-v2/special_tokens_map.json (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/all-MiniLM-L6-v2/tokenizer.json (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/all-MiniLM-L6-v2/tokenizer_config.json (100%) rename src/extension/{webview-api/chat-context-processor => chat}/models/all-MiniLM-L6-v2/vocab.txt (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/auto-task-strategy/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/base/base-agent.ts (88%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/base/base-node.ts (94%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/base/base-state.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/base/base-strategy.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/base/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/chat-strategy/chat-workflow.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/chat-strategy/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/chat-strategy/messages-constructors/chat-messages-constructor.ts (96%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/chat-strategy/messages-constructors/conversation-message-constructor.ts (96%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/chat-strategy/nodes/agent-node.ts (96%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/chat-strategy/nodes/generate-node.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/chat-strategy/state.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/composer-strategy/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/strategies/ui-designer-strategy/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/code-chunker.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/constants.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/c_sharp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/cpp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/go.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/java.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/javascript.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/python.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/ruby.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/rust.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/tsx.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/types.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/copilot-langs-config/typescript.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/c.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/c_sharp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/cpp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/elisp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/elixir.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/go.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/java.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/javascript.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/ocaml.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/php.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/python.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/ql.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/ruby.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/rust.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/code-snippet-queries/typescript.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/import-queries/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/import-queries/typescript.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/c.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/c_sharp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/cpp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/elisp.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/elixir.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/elm.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/go.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/index.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/java.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/javascript.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/ocaml.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/php.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/python.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/ql.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/ruby.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/rust.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/tree-sitter/queries/tags-queries/typescript.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/types/langgraph.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/code-snippet-formatter.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/combine-node.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/conversation-utils.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/convert-langchain-message-to-conversation.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/doc-crawler.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/fake-request-headers.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/find-current-tools-call-params.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/get-file-content.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/get-tool-calls-from-message.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/message-builder.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/progress-reporter.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/utils/searxng-search.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/vectordb/base-indexer.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/vectordb/codebase-indexer.ts (100%) rename src/extension/{webview-api/chat-context-processor => chat}/vectordb/doc-indexer.ts (100%) create mode 100644 src/extension/commands/action/command.ts rename src/extension/{webview-api => }/lowdb/ai-model-db.ts (100%) rename src/extension/{webview-api => }/lowdb/ai-provider-db.ts (100%) rename src/extension/{webview-api => }/lowdb/base-db.ts (100%) rename src/extension/{webview-api => }/lowdb/chat-sessions-db.ts (100%) rename src/extension/{webview-api => }/lowdb/doc-sites-db.ts (100%) rename src/extension/{webview-api => }/lowdb/settings-db.ts (100%) create mode 100644 src/extension/registers/action-register.ts create mode 100644 src/extension/registers/chat-histories-tree-register.ts delete mode 100644 src/extension/registers/controller-register.ts create mode 100644 src/extension/state.ts delete mode 100644 src/extension/webview-api/controllers/ai-model-controller.ts delete mode 100644 src/extension/webview-api/controllers/ai-provider-controller.ts delete mode 100644 src/extension/webview-api/controllers/chat-session-controller.ts delete mode 100644 src/extension/webview-api/controllers/index.ts delete mode 100644 src/extension/webview-api/controllers/settings-controller.ts delete mode 100644 src/extension/webview-api/controllers/system-controller.ts delete mode 100644 src/extension/webview-api/controllers/terminal-controller.ts delete mode 100644 src/extension/webview-api/index.ts delete mode 100644 src/extension/webview-api/types.ts create mode 100644 src/shared/actions/base-action-manager.ts create mode 100644 src/shared/actions/client-action-collection.ts create mode 100644 src/shared/actions/client-action-manager.ts create mode 100644 src/shared/actions/server-action-collection.ts create mode 100644 src/shared/actions/server-action-manager.ts create mode 100644 src/shared/actions/types.ts create mode 100644 src/webview/actions/chat-actions.ts create mode 100644 src/webview/actions/common-actions.ts create mode 100644 src/webview/actions/index.ts create mode 100644 src/webview/actions/setting-actions.ts create mode 100644 src/webview/actions/utils/emitter.ts create mode 100644 src/webview/actions/utils/use-on.ts create mode 100644 src/webview/contexts/action-context.tsx delete mode 100644 src/webview/hooks/chat/use-chat-sessions-ui.ts rename src/webview/{services/api-client => network/actions-api}/get-socket-port.ts (100%) create mode 100644 src/webview/network/actions-api/index.ts rename src/webview/{services => network}/react-query/query-client.ts (100%) delete mode 100644 src/webview/services/api-client/index.ts delete mode 100644 src/webview/services/api-client/types.ts diff --git a/.eslintrc.json b/.eslintrc.json index a650fde..583a048 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -85,7 +85,7 @@ "unused-imports/no-unused-vars": [ "error", { - "argsIgnorePattern": "^_|[pP]rops$" + "argsIgnorePattern": "^_|[pP]rops|[cC]ontext$" } ], "@typescript-eslint/return-await": "off", diff --git a/package.json b/package.json index 89be57c..111b0f0 100644 --- a/package.json +++ b/package.json @@ -63,25 +63,32 @@ "vscode": "^1.93.0" }, "activationEvents": [ - "onStartupFinished" + "onStartupFinished", + "onView:aide-sidebar-view" ], "contributes": { "viewsContainers": { "activitybar": [ { - "id": "aide", + "id": "aide-sidebar-view", "title": "AIDE", "icon": "res/icon-mask.png" } ] }, "views": { - "aide": [ + "aide-sidebar-view": [ { "type": "webview", - "id": "aide.webview", + "id": "aide-webview", "name": "AIDE" } + ], + "explorer": [ + { + "id": "aide.chatHistoriesTree", + "name": "%view.chatHistoriesTree%" + } ] }, "commands": [ @@ -169,6 +176,35 @@ "command": "aide.inlineDiff.showError", "title": "%command.inlineDiff.showError%", "enablement": "false" + }, + { + "command": "aide.action", + "title": "%command.action%" + }, + { + "command": "aide.chatHistoriesTree.refresh", + "title": "%command.chatHistoriesTree.refresh%", + "icon": "$(refresh)" + }, + { + "command": "aide.chatHistoriesTree.deleteCheckedSessions", + "title": "%command.chatHistoriesTree.deleteCheckedSessions%", + "icon": "$(trash)" + }, + { + "command": "aide.chatHistoriesTree.createAndOpenSession", + "title": "%command.chatHistoriesTree.createAndOpenSession%", + "icon": "$(plus)" + }, + { + "command": "aide.chatHistoriesTree.deleteSession", + "title": "%command.chatHistoriesTree.deleteSession%", + "icon": "$(trash)" + }, + { + "command": "aide.chatHistoriesTree.duplicateSession", + "title": "%command.chatHistoriesTree.duplicateSession%", + "icon": "$(copy)" } ], "menus": { @@ -228,6 +264,30 @@ "command": "aide.expertCodeEnhancer", "group": "navigation@3" } + ], + "view/title": [ + { + "command": "aide.chatHistoriesTree.createAndOpenSession", + "when": "view == aide.chatHistoriesTree", + "group": "navigation" + }, + { + "command": "aide.chatHistoriesTree.refresh", + "when": "view == aide.chatHistoriesTree", + "group": "navigation" + } + ], + "view/item/context": [ + { + "command": "aide.chatHistoriesTree.deleteSession", + "when": "view == aide.chatHistoriesTree && viewItem =~ /action:deleteSession/", + "group": "inline" + }, + { + "command": "aide.chatHistoriesTree.duplicateSession", + "when": "view == aide.chatHistoriesTree && viewItem =~ /action:duplicateSession/", + "group": "inline" + } ] }, "configuration": { @@ -376,66 +436,66 @@ }, "devDependencies": { "@atao60/fse-cli": "^0.1.9", - "@commitlint/cli": "^19.5.0", - "@commitlint/config-conventional": "^19.5.0", - "@commitlint/cz-commitlint": "^19.5.0", + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", + "@commitlint/cz-commitlint": "^19.6.1", "@cyntler/react-doc-viewer": "^1.17.0", - "@dnd-kit/core": "^6.1.0", - "@dnd-kit/sortable": "^8.0.0", + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@hookform/resolvers": "^3.9.1", - "@ianvs/prettier-plugin-sort-imports": "^4.3.1", - "@langchain/anthropic": "^0.3.8", - "@langchain/community": "^0.3.14", - "@langchain/core": "0.3.18", - "@langchain/langgraph": "^0.2.20", - "@langchain/openai": "^0.3.13", + "@ianvs/prettier-plugin-sort-imports": "^4.4.0", + "@langchain/anthropic": "^0.3.11", + "@langchain/community": "^0.3.19", + "@langchain/core": "0.3.26", + "@langchain/langgraph": "^0.2.34", + "@langchain/openai": "^0.3.16", "@langchain/textsplitters": "^0.1.0", - "@lexical/react": "^0.20.0", - "@radix-ui/react-accordion": "^1.2.1", - "@radix-ui/react-alert-dialog": "^1.1.2", - "@radix-ui/react-checkbox": "^1.1.2", - "@radix-ui/react-context-menu": "^2.2.2", - "@radix-ui/react-dialog": "^1.1.2", - "@radix-ui/react-dropdown-menu": "^2.1.2", - "@radix-ui/react-hover-card": "^1.1.2", - "@radix-ui/react-icons": "^1.3.1", - "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-menubar": "^1.1.2", - "@radix-ui/react-popover": "^1.1.2", - "@radix-ui/react-progress": "^1.1.0", - "@radix-ui/react-radio-group": "^1.2.1", - "@radix-ui/react-scroll-area": "^1.2.1", - "@radix-ui/react-select": "^2.1.2", - "@radix-ui/react-slider": "^1.2.1", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.1.1", - "@radix-ui/react-tabs": "^1.1.1", - "@radix-ui/react-tooltip": "^1.1.4", - "@radix-ui/react-visually-hidden": "^1.1.0", - "@tanstack/react-query": "^5.59.20", - "@tomjs/vite-plugin-vscode": "^3.1.1", + "@lexical/react": "^0.21.0", + "@radix-ui/react-accordion": "^1.2.2", + "@radix-ui/react-alert-dialog": "^1.1.4", + "@radix-ui/react-checkbox": "^1.1.3", + "@radix-ui/react-context-menu": "^2.2.4", + "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-dropdown-menu": "^2.1.4", + "@radix-ui/react-hover-card": "^1.1.4", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-menubar": "^1.1.4", + "@radix-ui/react-popover": "^1.1.4", + "@radix-ui/react-progress": "^1.1.1", + "@radix-ui/react-radio-group": "^1.2.2", + "@radix-ui/react-scroll-area": "^1.2.2", + "@radix-ui/react-select": "^2.1.4", + "@radix-ui/react-slider": "^1.2.2", + "@radix-ui/react-slot": "^1.1.1", + "@radix-ui/react-switch": "^1.1.2", + "@radix-ui/react-tabs": "^1.1.2", + "@radix-ui/react-tooltip": "^1.1.6", + "@radix-ui/react-visually-hidden": "^1.1.1", + "@tanstack/react-query": "^5.62.8", + "@tomjs/vite-plugin-vscode": "^3.2.1", "@types/diff": "^6.0.0", "@types/fs-extra": "^11.0.4", "@types/global-agent": "^2.1.3", - "@types/node": "^22.9.0", - "@types/react": "npm:types-react@rc", - "@types/react-dom": "npm:types-react-dom@rc", + "@types/node": "^22.10.2", + "@types/react": "^19.0.2", + "@types/react-dom": "^19.0.2", "@types/shell-quote": "^1.7.5", "@types/turndown": "^5.0.5", "@types/vscode": "1.93.0", "@types/vscode-webview": "^1.57.5", "@typescript-eslint/eslint-plugin": "^7.17.0", "@typescript-eslint/parser": "^7.17.0", - "@vitejs/plugin-react": "^4.3.3", + "@vitejs/plugin-react": "^4.3.4", "@vscode/vsce": "^3.2.1", "@xenova/transformers": "^2.17.2", - "apache-arrow": "^18.0.0", + "apache-arrow": "^18.1.0", "autoprefixer": "^10.4.20", - "babel-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110", - "chalk": "^5.3.0", + "babel-plugin-react-compiler": "^19.0.0-beta-201e55d-20241215", + "chalk": "^5.4.1", "cheerio": "^1.0.0", - "class-variance-authority": "^0.7.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "1.0.4", "color2k": "^2.0.3", @@ -443,7 +503,7 @@ "commitizen": "^4.3.1", "cpy": "10.1.0", "diff": "^7.0.0", - "es-toolkit": "^1.27.0", + "es-toolkit": "^1.30.1", "eslint": "^8.57.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^18.0.0", @@ -457,43 +517,44 @@ "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unused-imports": "^3.2.0", "esno": "^4.8.0", - "execa": "^9.5.1", + "eventemitter3": "^5.0.1", + "execa": "^9.5.2", "find-free-ports": "^3.1.1", "flexsearch": "^0.7.43", - "framer-motion": "12.0.0-alpha.1", + "framer-motion": "12.0.0-alpha.2", "fs-extra": "^11.2.0", "glob": "^11.0.0", "global-agent": "^3.0.0", - "html-react-parser": "^5.1.18", - "husky": "^9.1.6", + "html-react-parser": "^5.2.1", + "husky": "^9.1.7", "ignore": "^6.0.2", "immer": "^10.1.1", "inquirer": "^9.3.4", - "js-tiktoken": "^1.0.15", - "knip": "^5.36.7", - "langchain": "^0.3.5", - "lexical": "^0.20.0", - "lint-staged": "^15.2.10", + "js-tiktoken": "^1.0.16", + "knip": "^5.41.1", + "langchain": "^0.3.7", + "lexical": "^0.21.0", + "lint-staged": "^15.2.11", "lowdb": "^7.0.1", - "lucide-react": "^0.461.0", - "mermaid": "^11.4.0", + "lucide-react": "^0.469.0", + "mermaid": "^11.4.1", "minimatch": "^10.0.1", - "next-themes": "^0.4.3", - "p-limit": "^6.1.0", - "pnpm": "^9.12.3", + "next-themes": "^0.4.4", + "p-limit": "^6.2.0", + "pnpm": "^9.15.1", "postcss": "^8.4.49", - "prettier": "^3.3.3", - "react": "19.0.0-rc-ed15d500-20241110", - "react-dom": "19.0.0-rc-ed15d500-20241110", - "react-error-boundary": "^4.1.2", - "react-hook-form": "^7.53.2", - "react-intersection-observer": "^9.13.1", + "prettier": "^3.4.2", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-error-boundary": "^5.0.0", + "react-hook-form": "^7.54.2", + "react-intersection-observer": "^9.14.0", "react-markdown": "^9.0.1", - "react-resizable-panels": "^2.1.6", - "react-router": "^6.28.0", - "react-router-dom": "^6.28.0", + "react-resizable-panels": "^2.1.7", + "react-router": "^7.1.0", + "react-router-dom": "^7.1.0", "react-shiki": "^0.1.2", - "react-use": "^17.5.1", + "react-use": "^17.6.0", "rehype-katex": "^7.0.1", "rehype-raw": "^7.0.0", "remark-breaks": "^4.0.0", @@ -501,44 +562,45 @@ "remark-math": "^6.0.0", "rimraf": "^6.0.1", "scroll-into-view-if-needed": "^3.1.0", - "shell-quote": "^1.8.1", - "shiki": "^1.22.2", + "shell-quote": "^1.8.2", + "shiki": "^1.24.4", "simple-git": "^3.27.0", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1", - "sonner": "^1.7.0", + "sonner": "^1.7.1", "strip-ansi": "^7.1.0", - "tailwind-merge": "^2.5.4", - "tailwindcss": "^3.4.14", + "tailwind-merge": "^2.5.5", + "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", + "to-fast-properties": "2.0.0", "tree-sitter-wasms": "^0.1.12", "tsup": "^8.3.5", "turndown": "^7.2.0", "typed.js": "^2.1.0", - "typescript": "5.4.5", - "undici": "^6.20.1", + "typescript": "5.7.2", + "undici": "^7.2.0", "unified": "^11.0.5", - "use-immer": "^0.10.0", + "use-immer": "^0.11.0", "use-resize-observer": "^9.1.0", "uuid": "^11.0.3", - "vaul": "^1.1.1", - "vectordb": "^0.12.0", - "vite": "^5.4.11", - "vite-plugin-pages": "^0.32.3", + "vaul": "^1.1.2", + "vectordb": "^0.14.0", + "vite": "^6.0.5", + "vite-plugin-pages": "^0.32.4", "vite-plugin-svgr": "^4.3.0", - "vite-tsconfig-paths": "^5.1.2", - "vitest": "^2.1.4", - "web-tree-sitter": "^0.24.4", - "zod": "^3.23.8", - "zustand": "^5.0.1" + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^2.1.8", + "web-tree-sitter": "^0.24.5", + "zod": "^3.24.1", + "zustand": "^5.0.2" }, "pnpm": { "overrides": { - "@langchain/core": "0.3.18", - "@types/react": "npm:types-react@19.0.0-rc.1", - "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", - "lexical": "^0.20.0", - "shiki": "^1.22.2" + "@langchain/core": "0.3.26", + "@types/react": "^19.0.2", + "@types/react-dom": "^19.0.2", + "lexical": "^0.21.0", + "shiki": "^1.24.4" } }, "commitlint": { diff --git a/package.nls.en.json b/package.nls.en.json index b007608..ad05f9a 100644 --- a/package.nls.en.json +++ b/package.nls.en.json @@ -12,6 +12,13 @@ "command.quickCloseFileWithoutSave": "Quick close", "command.replaceFile": "Replace original", "command.showDiff": "Compare original", + "command.action": "Execute Action", + "command.chatHistoriesTree.refresh": "Refresh Chat Histories", + "command.chatHistoriesTree.deleteCheckedSessions": "Delete Checked Chat Histories", + "command.chatHistoriesTree.createAndOpenSession": "Create and Open Chat", + "command.chatHistoriesTree.deleteSession": "Delete Chat", + "command.chatHistoriesTree.duplicateSession": "Duplicate Chat", + "view.chatHistoriesTree": "Aide Chat Histories", "config.title": "Aide Configuration", "config.openaiKey.description": "OpenAI Key, [click to view online documentation](https://aide.nicepkg.cn/guide/getting-started/how-to-configure-openai-key) or [I Don't Have an OpenAI Key](https://aide.nicepkg.cn/guide/getting-started/how-to-configure-openai-key#i-don-t-have-an-openai-key)", "config.openaiModel.description": "OpenAI Model, [click to view online documentation](https://aide.nicepkg.cn/guide/configuration/openai-model)", diff --git a/package.nls.json b/package.nls.json index b007608..ad05f9a 100644 --- a/package.nls.json +++ b/package.nls.json @@ -12,6 +12,13 @@ "command.quickCloseFileWithoutSave": "Quick close", "command.replaceFile": "Replace original", "command.showDiff": "Compare original", + "command.action": "Execute Action", + "command.chatHistoriesTree.refresh": "Refresh Chat Histories", + "command.chatHistoriesTree.deleteCheckedSessions": "Delete Checked Chat Histories", + "command.chatHistoriesTree.createAndOpenSession": "Create and Open Chat", + "command.chatHistoriesTree.deleteSession": "Delete Chat", + "command.chatHistoriesTree.duplicateSession": "Duplicate Chat", + "view.chatHistoriesTree": "Aide Chat Histories", "config.title": "Aide Configuration", "config.openaiKey.description": "OpenAI Key, [click to view online documentation](https://aide.nicepkg.cn/guide/getting-started/how-to-configure-openai-key) or [I Don't Have an OpenAI Key](https://aide.nicepkg.cn/guide/getting-started/how-to-configure-openai-key#i-don-t-have-an-openai-key)", "config.openaiModel.description": "OpenAI Model, [click to view online documentation](https://aide.nicepkg.cn/guide/configuration/openai-model)", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 6177a86..82179c4 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -12,6 +12,13 @@ "command.quickCloseFileWithoutSave": "快速关闭", "command.replaceFile": "替换原文", "command.showDiff": "对比原文", + "command.action": "执行 Aide 操作", + "command.chatHistoriesTree.refresh": "刷新聊天记录", + "command.chatHistoriesTree.deleteCheckedSessions": "删除选中的聊天记录", + "command.chatHistoriesTree.createAndOpenSession": "新建聊天并打开", + "command.chatHistoriesTree.deleteSession": "删除聊天记录", + "command.chatHistoriesTree.duplicateSession": "复制聊天记录", + "view.chatHistoriesTree": "Aide 聊天历史", "config.title": "Aide 配置", "config.openaiKey.description": "OpenAI Key, [点击查看在线文档](https://aide.nicepkg.cn/zh/guide/getting-started/how-to-configure-openai-key) 或者 [我没有 OpenAI Key](https://aide.nicepkg.cn/zh/guide/getting-started/how-to-configure-openai-key#%E6%88%91%E6%B2%A1%E6%9C%89-openai-key)", "config.openaiModel.description": "OpenAI Model, [点击查看在线文档](https://aide.nicepkg.cn/zh/guide/configuration/openai-model)", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d12f01b..cb948a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,11 +5,11 @@ settings: excludeLinksFromLockfile: false overrides: - '@langchain/core': 0.3.18 - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 - lexical: ^0.20.0 - shiki: ^1.22.2 + '@langchain/core': 0.3.26 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 + lexical: ^0.21.0 + shiki: ^1.24.4 importers: @@ -19,122 +19,122 @@ importers: specifier: ^0.1.9 version: 0.1.9 '@commitlint/cli': - specifier: ^19.5.0 - version: 19.5.0(@types/node@22.9.0)(typescript@5.4.5) + specifier: ^19.6.1 + version: 19.6.1(@types/node@22.10.2)(typescript@5.7.2) '@commitlint/config-conventional': - specifier: ^19.5.0 - version: 19.5.0 + specifier: ^19.6.0 + version: 19.6.0 '@commitlint/cz-commitlint': - specifier: ^19.5.0 - version: 19.5.0(@types/node@22.9.0)(commitizen@4.3.1(@types/node@22.9.0)(typescript@5.4.5))(inquirer@9.3.4)(typescript@5.4.5) + specifier: ^19.6.1 + version: 19.6.1(@types/node@22.10.2)(commitizen@4.3.1(@types/node@22.10.2)(typescript@5.7.2))(inquirer@9.3.4)(typescript@5.7.2) '@cyntler/react-doc-viewer': specifier: ^1.17.0 - version: 1.17.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + version: 1.17.0(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@dnd-kit/core': - specifier: ^6.1.0 - version: 6.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^6.3.1 + version: 6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@dnd-kit/sortable': - specifier: ^8.0.0 - version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^10.0.0 + version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) '@dnd-kit/utilities': specifier: ^3.2.2 - version: 3.2.2(react@19.0.0-rc-ed15d500-20241110) + version: 3.2.2(react@19.0.0) '@hookform/resolvers': specifier: ^3.9.1 - version: 3.9.1(react-hook-form@7.53.2(react@19.0.0-rc-ed15d500-20241110)) + version: 3.9.1(react-hook-form@7.54.2(react@19.0.0)) '@ianvs/prettier-plugin-sort-imports': - specifier: ^4.3.1 - version: 4.3.1(@vue/compiler-sfc@3.4.36)(prettier@3.3.3) + specifier: ^4.4.0 + version: 4.4.0(@vue/compiler-sfc@3.4.36)(prettier@3.4.2) '@langchain/anthropic': - specifier: ^0.3.8 - version: 0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) + specifier: ^0.3.11 + version: 0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) '@langchain/community': - specifier: ^0.3.14 - version: 0.3.14(@ibm-cloud/watsonx-ai@1.1.1)(@langchain/anthropic@0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))))(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))(@xenova/transformers@2.17.2)(axios@1.7.4)(cheerio@1.0.0)(ibm-cloud-sdk-core@5.1.0)(ignore@6.0.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.72.0(zod@3.23.8))(vectordb@0.12.0(@apache-arrow/ts@14.0.2)(apache-arrow@18.0.0))(ws@8.18.0) + specifier: ^0.3.19 + version: 0.3.19(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.7.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.5)(openai@4.77.0(zod@3.24.1))(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.1.1)(@langchain/anthropic@0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(@xenova/transformers@2.17.2)(axios@1.7.4)(cheerio@1.0.0)(ibm-cloud-sdk-core@5.1.0)(ignore@6.0.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.77.0(zod@3.24.1))(playwright@1.49.1)(ws@8.18.0) '@langchain/core': - specifier: 0.3.18 - version: 0.3.18(openai@4.72.0(zod@3.23.8)) + specifier: 0.3.26 + version: 0.3.26(openai@4.77.0(zod@3.24.1)) '@langchain/langgraph': - specifier: ^0.2.20 - version: 0.2.20(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) + specifier: ^0.2.34 + version: 0.2.34(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) '@langchain/openai': - specifier: ^0.3.13 - version: 0.3.13(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) + specifier: ^0.3.16 + version: 0.3.16(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) '@langchain/textsplitters': specifier: ^0.1.0 - version: 0.1.0(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) + version: 0.1.0(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) '@lexical/react': - specifier: ^0.20.0 - version: 0.20.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(yjs@13.6.18) + specifier: ^0.21.0 + version: 0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.18) '@radix-ui/react-accordion': - specifier: ^1.2.1 - version: 1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.2.2 + version: 1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-alert-dialog': - specifier: ^1.1.2 - version: 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-checkbox': - specifier: ^1.1.2 - version: 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.3 + version: 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-context-menu': - specifier: ^2.2.2 - version: 2.2.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^2.2.4 + version: 2.2.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-dialog': - specifier: ^1.1.2 - version: 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-dropdown-menu': - specifier: ^2.1.2 - version: 2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^2.1.4 + version: 2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-hover-card': - specifier: ^1.1.2 - version: 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-icons': - specifier: ^1.3.1 - version: 1.3.1(react@19.0.0-rc-ed15d500-20241110) + specifier: ^1.3.2 + version: 1.3.2(react@19.0.0) '@radix-ui/react-label': - specifier: ^2.1.0 - version: 2.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^2.1.1 + version: 2.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-menubar': - specifier: ^1.1.2 - version: 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-popover': - specifier: ^1.1.2 - version: 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-progress': - specifier: ^1.1.0 - version: 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-radio-group': - specifier: ^1.2.1 - version: 1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.2.2 + version: 1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-scroll-area': - specifier: ^1.2.1 - version: 1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.2.2 + version: 1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-select': - specifier: ^2.1.2 - version: 2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^2.1.4 + version: 2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-slider': - specifier: ^1.2.1 - version: 1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.2.2 + version: 1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-slot': - specifier: ^1.1.0 - version: 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-switch': specifier: ^1.1.1 - version: 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + version: 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-switch': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-tabs': - specifier: ^1.1.1 - version: 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-tooltip': - specifier: ^1.1.4 - version: 1.1.4(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.6 + version: 1.1.6(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-visually-hidden': - specifier: ^1.1.0 - version: 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/react-query': - specifier: ^5.59.20 - version: 5.59.20(react@19.0.0-rc-ed15d500-20241110) + specifier: ^5.62.8 + version: 5.62.8(react@19.0.0) '@tomjs/vite-plugin-vscode': - specifier: ^3.1.1 - version: 3.1.1(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.4.5)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)) + specifier: ^3.2.1 + version: 3.2.1(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)) '@types/diff': specifier: ^6.0.0 version: 6.0.0 @@ -145,14 +145,14 @@ importers: specifier: ^2.1.3 version: 2.1.3 '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.10.2 + version: 22.10.2 '@types/react': - specifier: npm:types-react@19.0.0-rc.1 - version: types-react@19.0.0-rc.1 + specifier: ^19.0.2 + version: 19.0.2 '@types/react-dom': - specifier: npm:types-react-dom@19.0.0-rc.1 - version: types-react-dom@19.0.0-rc.1 + specifier: ^19.0.2 + version: 19.0.2(@types/react@19.0.2) '@types/shell-quote': specifier: ^1.7.5 version: 1.7.5 @@ -167,13 +167,13 @@ importers: version: 1.57.5 '@typescript-eslint/eslint-plugin': specifier: ^7.17.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2) '@typescript-eslint/parser': specifier: ^7.17.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.18.0(eslint@8.57.0)(typescript@5.7.2) '@vitejs/plugin-react': - specifier: ^4.3.3 - version: 4.3.3(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)) + specifier: ^4.3.4 + version: 4.3.4(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)) '@vscode/vsce': specifier: ^3.2.1 version: 3.2.1 @@ -181,29 +181,29 @@ importers: specifier: ^2.17.2 version: 2.17.2 apache-arrow: - specifier: ^18.0.0 - version: 18.0.0 + specifier: ^18.1.0 + version: 18.1.0 autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) babel-plugin-react-compiler: - specifier: 19.0.0-beta-a7bf2bd-20241110 + specifier: ^19.0.0-beta-201e55d-20241215 version: 19.0.0-beta-a7bf2bd-20241110 chalk: - specifier: ^5.3.0 - version: 5.3.0 + specifier: ^5.4.1 + version: 5.4.1 cheerio: specifier: ^1.0.0 version: 1.0.0 class-variance-authority: - specifier: ^0.7.0 - version: 0.7.0 + specifier: ^0.7.1 + version: 0.7.1 clsx: specifier: ^2.1.1 version: 2.1.1 cmdk: specifier: 1.0.4 - version: 1.0.4(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + version: 1.0.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) color2k: specifier: ^2.0.3 version: 2.0.3 @@ -212,7 +212,7 @@ importers: version: 4.2.5 commitizen: specifier: ^4.3.1 - version: 4.3.1(@types/node@22.9.0)(typescript@5.4.5) + version: 4.3.1(@types/node@22.10.2)(typescript@5.7.2) cpy: specifier: 10.1.0 version: 10.1.0 @@ -220,50 +220,53 @@ importers: specifier: ^7.0.0 version: 7.0.0 es-toolkit: - specifier: ^1.27.0 - version: 1.27.0 + specifier: ^1.30.1 + version: 1.30.1 eslint: specifier: ^8.57.0 version: 8.57.0 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.35.0(eslint@8.57.0))(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.35.0(eslint@8.57.0))(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: ^18.0.0 - version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0) + version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)) + version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)) eslint-import-resolver-typescript: specifier: ^3.6.3 - version: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0) + version: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) eslint-plugin-json: specifier: ^4.0.1 version: 4.0.1 eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) + version: 5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.4.2) eslint-plugin-react-compiler: specifier: latest - version: 19.0.0-beta-df7b47d-20241124(eslint@8.57.0) + version: 19.0.0-beta-b2e8e9c-20241220(eslint@8.57.0) eslint-plugin-simple-import-sort: specifier: ^12.1.1 version: 12.1.1(eslint@8.57.0) eslint-plugin-unused-imports: specifier: ^3.2.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) + version: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0) esno: specifier: ^4.8.0 version: 4.8.0 + eventemitter3: + specifier: ^5.0.1 + version: 5.0.1 execa: - specifier: ^9.5.1 - version: 9.5.1 + specifier: ^9.5.2 + version: 9.5.2 find-free-ports: specifier: ^3.1.1 version: 3.1.1 @@ -271,8 +274,8 @@ importers: specifier: ^0.7.43 version: 0.7.43 framer-motion: - specifier: 12.0.0-alpha.1 - version: 12.0.0-alpha.1(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: 12.0.0-alpha.2 + version: 12.0.0-alpha.2(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) fs-extra: specifier: ^11.2.0 version: 11.2.0 @@ -283,11 +286,11 @@ importers: specifier: ^3.0.0 version: 3.0.0 html-react-parser: - specifier: ^5.1.18 - version: 5.1.18(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + specifier: ^5.2.1 + version: 5.2.1(@types/react@19.0.2)(react@19.0.0) husky: - specifier: ^9.1.6 - version: 9.1.6 + specifier: ^9.1.7 + version: 9.1.7 ignore: specifier: ^6.0.2 version: 6.0.2 @@ -298,80 +301,80 @@ importers: specifier: ^9.3.4 version: 9.3.4 js-tiktoken: - specifier: ^1.0.15 - version: 1.0.15 + specifier: ^1.0.16 + version: 1.0.16 knip: - specifier: ^5.36.7 - version: 5.36.7(@types/node@22.9.0)(typescript@5.4.5) + specifier: ^5.41.1 + version: 5.41.1(@types/node@22.10.2)(typescript@5.7.2) langchain: - specifier: ^0.3.5 - version: 0.3.5(@langchain/anthropic@0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))))(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))(axios@1.7.4)(cheerio@1.0.0)(openai@4.72.0(zod@3.23.8)) + specifier: ^0.3.7 + version: 0.3.7(@langchain/anthropic@0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(axios@1.7.4)(cheerio@1.0.0)(openai@4.77.0(zod@3.24.1)) lexical: - specifier: ^0.20.0 - version: 0.20.0 + specifier: ^0.21.0 + version: 0.21.0 lint-staged: - specifier: ^15.2.10 - version: 15.2.10 + specifier: ^15.2.11 + version: 15.2.11 lowdb: specifier: ^7.0.1 version: 7.0.1 lucide-react: - specifier: ^0.461.0 - version: 0.461.0(react@19.0.0-rc-ed15d500-20241110) + specifier: ^0.469.0 + version: 0.469.0(react@19.0.0) mermaid: - specifier: ^11.4.0 - version: 11.4.0 + specifier: ^11.4.1 + version: 11.4.1 minimatch: specifier: ^10.0.1 version: 10.0.1 next-themes: - specifier: ^0.4.3 - version: 0.4.3(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^0.4.4 + version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) p-limit: - specifier: ^6.1.0 - version: 6.1.0 + specifier: ^6.2.0 + version: 6.2.0 pnpm: - specifier: ^9.12.3 - version: 9.12.3 + specifier: ^9.15.1 + version: 9.15.1 postcss: specifier: ^8.4.49 version: 8.4.49 prettier: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.2 + version: 3.4.2 react: - specifier: 19.0.0-rc-ed15d500-20241110 - version: 19.0.0-rc-ed15d500-20241110 + specifier: ^19.0.0 + version: 19.0.0 react-dom: - specifier: 19.0.0-rc-ed15d500-20241110 - version: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) react-error-boundary: - specifier: ^4.1.2 - version: 4.1.2(react@19.0.0-rc-ed15d500-20241110) + specifier: ^5.0.0 + version: 5.0.0(react@19.0.0) react-hook-form: - specifier: ^7.53.2 - version: 7.53.2(react@19.0.0-rc-ed15d500-20241110) + specifier: ^7.54.2 + version: 7.54.2(react@19.0.0) react-intersection-observer: - specifier: ^9.13.1 - version: 9.13.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^9.14.0 + version: 9.14.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-markdown: specifier: ^9.0.1 - version: 9.0.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + version: 9.0.1(@types/react@19.0.2)(react@19.0.0) react-resizable-panels: - specifier: ^2.1.6 - version: 2.1.6(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^2.1.7 + version: 2.1.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router: - specifier: ^6.28.0 - version: 6.28.0(react@19.0.0-rc-ed15d500-20241110) + specifier: ^7.1.0 + version: 7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router-dom: - specifier: ^6.28.0 - version: 6.28.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^7.1.0 + version: 7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-shiki: specifier: ^0.1.2 - version: 0.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + version: 0.1.2(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-use: - specifier: ^17.5.1 - version: 17.5.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^17.6.0 + version: 17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) rehype-katex: specifier: ^7.0.1 version: 7.0.1 @@ -394,11 +397,11 @@ importers: specifier: ^3.1.0 version: 3.1.0 shell-quote: - specifier: ^1.8.1 - version: 1.8.1 + specifier: ^1.8.2 + version: 1.8.2 shiki: - specifier: ^1.22.2 - version: 1.22.2 + specifier: ^1.24.4 + version: 1.24.4 simple-git: specifier: ^3.27.0 version: 3.27.0 @@ -409,26 +412,29 @@ importers: specifier: ^4.8.1 version: 4.8.1 sonner: - specifier: ^1.7.0 - version: 1.7.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + specifier: ^1.7.1 + version: 1.7.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) strip-ansi: specifier: ^7.1.0 version: 7.1.0 tailwind-merge: - specifier: ^2.5.4 - version: 2.5.4 + specifier: ^2.5.5 + version: 2.5.5 tailwindcss: - specifier: ^3.4.14 - version: 3.4.14 + specifier: ^3.4.17 + version: 3.4.17 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.14) + version: 1.0.7(tailwindcss@3.4.17) + to-fast-properties: + specifier: 2.0.0 + version: 2.0.0 tree-sitter-wasms: specifier: ^0.1.12 version: 0.1.12 tsup: specifier: ^8.3.5 - version: 8.3.5(@swc/core@1.7.10)(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.1)(typescript@5.4.5)(yaml@2.5.0) + version: 8.3.5(@swc/core@1.7.10)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.1)(typescript@5.7.2)(yaml@2.6.1) turndown: specifier: ^7.2.0 version: 7.2.0 @@ -436,62 +442,62 @@ importers: specifier: ^2.1.0 version: 2.1.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.7.2 + version: 5.7.2 undici: - specifier: ^6.20.1 - version: 6.20.1 + specifier: ^7.2.0 + version: 7.2.0 unified: specifier: ^11.0.5 version: 11.0.5 use-immer: - specifier: ^0.10.0 - version: 0.10.0(immer@10.1.1)(react@19.0.0-rc-ed15d500-20241110) + specifier: ^0.11.0 + version: 0.11.0(immer@10.1.1)(react@19.0.0) use-resize-observer: specifier: ^9.1.0 - version: 9.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + version: 9.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) uuid: specifier: ^11.0.3 version: 11.0.3 vaul: - specifier: ^1.1.1 - version: 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) vectordb: - specifier: ^0.12.0 - version: 0.12.0(@apache-arrow/ts@14.0.2)(apache-arrow@18.0.0) + specifier: ^0.14.0 + version: 0.14.0(@apache-arrow/ts@14.0.2)(apache-arrow@18.1.0) vite: - specifier: ^5.4.11 - version: 5.4.11(@types/node@22.9.0)(less@4.2.0) + specifier: ^6.0.5 + version: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1) vite-plugin-pages: - specifier: ^0.32.3 - version: 0.32.3(@vue/compiler-sfc@3.4.36)(react-router@6.28.0(react@19.0.0-rc-ed15d500-20241110))(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)) + specifier: ^0.32.4 + version: 0.32.4(@vue/compiler-sfc@3.4.36)(react-router@7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.24.3)(typescript@5.4.5)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)) + version: 4.3.0(rollup@4.24.3)(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)) vite-tsconfig-paths: - specifier: ^5.1.2 - version: 5.1.2(typescript@5.4.5)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)) + specifier: ^5.1.4 + version: 5.1.4(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)) vitest: - specifier: ^2.1.4 - version: 2.1.4(@types/node@22.9.0)(less@4.2.0) + specifier: ^2.1.8 + version: 2.1.8(@types/node@22.10.2)(less@4.2.0) web-tree-sitter: - specifier: ^0.24.4 - version: 0.24.4 + specifier: ^0.24.5 + version: 0.24.5 zod: - specifier: ^3.23.8 - version: 3.23.8 + specifier: ^3.24.1 + version: 3.24.1 zustand: - specifier: ^5.0.1 - version: 5.0.1(immer@10.1.1)(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)(use-sync-external-store@1.2.2(react@19.0.0-rc-ed15d500-20241110)) + specifier: ^5.0.2 + version: 5.0.2(@types/react@19.0.2)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)) website: dependencies: '@vueuse/core': specifier: 10.11.0 - version: 10.11.0(vue@3.4.36(typescript@5.4.5)) + version: 10.11.0(vue@3.4.36(typescript@5.7.2)) vue: specifier: 3.4.36 - version: 3.4.36(typescript@5.4.5) + version: 3.4.36(typescript@5.7.2) devDependencies: '@iconify-json/bx': specifier: ^1.1.11 @@ -501,7 +507,7 @@ importers: version: 1.1.44 '@nolebase/vitepress-plugin-inline-link-preview': specifier: ^2.4.0 - version: 2.4.0(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5) + version: 2.4.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2) '@unocss/preset-icons': specifier: ^0.61.9 version: 0.61.9 @@ -519,10 +525,10 @@ importers: version: 4.0.0 unocss: specifier: ^0.61.9 - version: 0.61.9(postcss@8.4.49)(rollup@4.24.3)(vite@5.3.5(@types/node@22.9.0)(less@4.2.0)) + version: 0.61.9(postcss@8.4.49)(rollup@4.24.3)(vite@5.3.5(@types/node@22.10.2)(less@4.2.0)) vitepress: specifier: 1.3.2 - version: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5) + version: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2) zod: specifier: 3.23.8 version: 3.23.8 @@ -622,6 +628,9 @@ packages: '@anthropic-ai/sdk@0.27.3': resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} + '@anthropic-ai/sdk@0.32.1': + resolution: {integrity: sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg==} + '@apache-arrow/ts@14.0.2': resolution: {integrity: sha512-CtwAvLkK0CZv7xsYeCo91ml6PvlfzAmAJZkRYuz2GNBwfYufj5SVi0iuSMwIMkcU/szVwvLdzORSLa5PlF/2ug==} @@ -690,28 +699,20 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.2': resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} engines: {node: '>=6.9.0'} '@babel/core@7.25.2': resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} '@babel/generator@7.26.2': @@ -726,14 +727,14 @@ packages: resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.2': resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.24.8': resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} engines: {node: '>=6.9.0'} @@ -754,10 +755,6 @@ packages: resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.24.8': resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} @@ -770,11 +767,9 @@ packages: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 '@babel/helper-module-transforms@7.25.2': resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} @@ -782,6 +777,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.24.7': resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} @@ -826,51 +827,34 @@ packages: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} '@babel/helpers@7.25.0': resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.25.3': resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} engines: {node: '>=6.0.0'} @@ -881,6 +865,13 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.24.7': resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} @@ -899,20 +890,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.25.9': - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-self@7.24.7': - resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.24.7': - resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -933,10 +918,6 @@ packages: resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} @@ -945,26 +926,10 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.3': - resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.9': resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} @@ -972,6 +937,21 @@ packages: '@braintree/sanitize-url@7.1.0': resolution: {integrity: sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==} + '@browserbasehq/sdk@2.0.0': + resolution: {integrity: sha512-BdPlZyn0dpXlL70gNK4acpqWIRB+edo2z0/GalQdWghRq8iQjySd9fVIF3evKH1p2wCYekZJRK6tm29YfXB67g==} + + '@browserbasehq/stagehand@1.7.0': + resolution: {integrity: sha512-QsobXC+E8yid7ZKpvTleXPCCotwxJRb7uhvtP3H6V9RGe31t0Il2FZyA2hsLdvvgkXDYa47F2rAuWMOpc6Ea0g==} + peerDependencies: + '@playwright/test': ^1.42.1 + deepmerge: ^4.3.1 + dotenv: ^16.4.5 + openai: ^4.62.1 + zod: ^3.23.8 + + '@cfworker/json-schema@4.0.3': + resolution: {integrity: sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==} + '@chevrotain/cst-dts-gen@11.0.3': resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} @@ -987,21 +967,21 @@ packages: '@chevrotain/utils@11.0.3': resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - '@commitlint/cli@19.5.0': - resolution: {integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==} + '@commitlint/cli@19.6.1': + resolution: {integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.5.0': - resolution: {integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==} + '@commitlint/config-conventional@19.6.0': + resolution: {integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==} engines: {node: '>=v18'} '@commitlint/config-validator@19.5.0': resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} engines: {node: '>=v18'} - '@commitlint/cz-commitlint@19.5.0': - resolution: {integrity: sha512-PNfIC54J3lDVIBJTo7A1RMp1kdOYkGcUz27VG0NP/DzFKLspXcQm13RnKc16BjFNCJGLC7iaXjucrfrKHOqorQ==} + '@commitlint/cz-commitlint@19.6.1': + resolution: {integrity: sha512-lJtOE1a+xyjjf42oUXwqvmhLhF85OLqLE4LpcUifIdIxSbzx8lEbhwGDkhrOaYfGtjmtTDhP1cQ8dg5DyQOWqQ==} engines: {node: '>=v18'} peerDependencies: commitizen: ^4.0.3 @@ -1019,18 +999,22 @@ packages: resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.5.0': - resolution: {integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w==} + '@commitlint/is-ignored@19.6.0': + resolution: {integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==} engines: {node: '>=v18'} - '@commitlint/lint@19.5.0': - resolution: {integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg==} + '@commitlint/lint@19.6.0': + resolution: {integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==} engines: {node: '>=v18'} '@commitlint/load@19.5.0': resolution: {integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==} engines: {node: '>=v18'} + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} + engines: {node: '>=v18'} + '@commitlint/message@19.5.0': resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} engines: {node: '>=v18'} @@ -1047,8 +1031,8 @@ packages: resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} engines: {node: '>=v18'} - '@commitlint/rules@19.5.0': - resolution: {integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw==} + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} engines: {node: '>=v18'} '@commitlint/to-lines@19.5.0': @@ -1069,21 +1053,21 @@ packages: react: '>=17.0.0' react-dom: '>=17.0.0' - '@dnd-kit/accessibility@3.1.0': - resolution: {integrity: sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==} + '@dnd-kit/accessibility@3.1.1': + resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} peerDependencies: react: '>=16.8.0' - '@dnd-kit/core@6.1.0': - resolution: {integrity: sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==} + '@dnd-kit/core@6.3.1': + resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@dnd-kit/sortable@8.0.0': - resolution: {integrity: sha512-U3jk5ebVXe1Lr7c2wU7SBZjcWdQP+j7peHJfCspnA81enlu88Mgd7CC8Q+pub9ubP7eKVETzJW+IBAhsqbSu/g==} + '@dnd-kit/sortable@10.0.0': + resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==} peerDependencies: - '@dnd-kit/core': ^6.1.0 + '@dnd-kit/core': ^6.3.0 react: '>=16.8.0' '@dnd-kit/utilities@3.2.2': @@ -1100,7 +1084,7 @@ packages: '@docsearch/react@3.6.1': resolution: {integrity: sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: '>= 16.8.0 < 19.0.0' react-dom: '>= 16.8.0 < 19.0.0' search-insights: '>= 1 < 3' @@ -1114,6 +1098,9 @@ packages: search-insights: optional: true + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emotion/is-prop-valid@1.2.2': resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} @@ -1736,8 +1723,8 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@ianvs/prettier-plugin-sort-imports@4.3.1': - resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==} + '@ianvs/prettier-plugin-sort-imports@4.4.0': + resolution: {integrity: sha512-f4/e+/ANGk3tHuwRW0uh2YuBR50I4h1ZjGQ+5uD8sWfinHTivQsnieR5cz24t8M6Vx4rYvZ5v/IEKZhYpzQm9Q==} peerDependencies: '@vue/compiler-sfc': 2.7.x || 3.x prettier: 2 || 3 @@ -1773,6 +1760,111 @@ packages: '@iconify/utils@2.1.33': resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/figures@1.0.3': resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==} engines: {node: '>=18'} @@ -1793,9 +1885,6 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -1811,39 +1900,54 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@lancedb/vectordb-darwin-arm64@0.12.0': - resolution: {integrity: sha512-9X6UyP/ozHkv39YZ8DWh82m3aeQmUtrVDNuRe3o8has6dJyD/qPYukI8Zked4q8J+86/lgQbr4f+WW2V4Dfc1g==} + '@lancedb/vectordb-darwin-arm64@0.14.0': + resolution: {integrity: sha512-C8wp+eJQY3RMLIRfxDnOm8bYg458OI3Cz7Jh7ws6ibquBdJDCiTdwFfcUXrkoaQ9Wv4nHZOEqupj3FBMsks1hw==} cpu: [arm64] os: [darwin] - '@lancedb/vectordb-darwin-x64@0.12.0': - resolution: {integrity: sha512-zG+//P3BBpmOiLR+dop68T9AFNxazWlSLF8yVdAtvsqjRzcrrMLR//rIrRcbPHxu8gvvLrMDoDZT+AHd2rElyQ==} + '@lancedb/vectordb-darwin-x64@0.14.0': + resolution: {integrity: sha512-5jkQuEVGaPViFb4dOjncUqVCbvEiT8XYFZoprE0yv7HUUCdt5v15GTNxey72yw+aaX2mdb2CeFIs+4ySZqy/MA==} cpu: [x64] os: [darwin] - '@lancedb/vectordb-linux-arm64-gnu@0.12.0': - resolution: {integrity: sha512-5RiJkcZEdMkK5WUfkV+HVFnJaAergfSiLNgUwJaovEEX8yVChkhrdZFSUj1o/k2k6Ix9mQq+xfIUF+aGN/XnDQ==} + '@lancedb/vectordb-linux-arm64-gnu@0.14.0': + resolution: {integrity: sha512-YLboFJLQyFzsYWi2iW1nr2SGaZTaj4gERIufyTSnX+VXlEYKHke3cMFLF+EamH8eejv2HwXdJpidPaP6aSzujw==} + cpu: [arm64] + os: [linux] + + '@lancedb/vectordb-linux-arm64-musl@0.14.0': + resolution: {integrity: sha512-rel/SaxGRtx5GdAkFH1IknBr0V/tbrN4jYT6FixmSvgc9kgxrMGlBUHSRAO5atdRXZ8jT7XWuOqW1QdgsmPi0g==} cpu: [arm64] os: [linux] - '@lancedb/vectordb-linux-x64-gnu@0.12.0': - resolution: {integrity: sha512-JFulRNBHLF0TyE0tThaAB9T7CM3zLquPsBF6oA9b1stVdXbEqVqLMltjem0tqfj30zEoEbAKDPpEKII4CPQMTA==} + '@lancedb/vectordb-linux-x64-gnu@0.14.0': + resolution: {integrity: sha512-N29n8OO2JqSPaSVd5gmyh6r4x6LX0qpcCHrhkEaRoKKIXYdHQ8sAHOqHNt3xhMDLwDJfjGmzAwd977cOYM5MBw==} cpu: [x64] os: [linux] - '@lancedb/vectordb-win32-x64-msvc@0.12.0': - resolution: {integrity: sha512-T3s/RzB5dvXBqU3qmS6zyHhF0RHS2sSs81zKzYQy2R2nEVPbnwutFSsdA1wEqEXZlr8uTD9nLbkKJKqRNTXVEg==} + '@lancedb/vectordb-linux-x64-musl@0.14.0': + resolution: {integrity: sha512-36Ewl9M6IsYgxBIaThgqaSlQ++8YsSnZB85DOnuIds+sRbBfNkknvwBRFO1/FGN8RSBydFPy1irNFmCOnrlTZg==} cpu: [x64] + os: [linux] + + '@lancedb/vectordb-win32-arm64-msvc@0.14.0': + resolution: {integrity: sha512-4qsna5yI7umGEA868/ifr1Np66d0dhFAOIGaJKS5Z+Zm4Zplr42BjVZiNWtwwKhndtsiPJnFCYVYRKfjTLZWdg==} + cpu: [arm64] os: [win32] - '@langchain/anthropic@0.3.8': - resolution: {integrity: sha512-7qeRDhNnCf1peAbjY825R2HNszobJeGvqi2cfPl+YsduDIYEGUzfoGRRarPI5joIGX5YshCsch6NFtap2bLfmw==} + '@lancedb/vectordb-win32-x64-msvc@0.14.0': + resolution: {integrity: sha512-1u+J5WFClNc6mzgF5otevMnOxW3pj8yOHrPoIiZe9SrL8O2oVtdYfWJZYG/OST21cS0Mc4Z0upX86G0sA4kEfA==} + cpu: [x64] + os: [win32] + + '@langchain/anthropic@0.3.11': + resolution: {integrity: sha512-rYjDZjMwVQ+cYeJd9IoSESdkkG8fc0m3siGRYKNy6qgYMnqCz8sUPKBanXwbZAs6wvspPCGgNK9WONfaCeX97A==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': 0.3.18 + '@langchain/core': 0.3.26 - '@langchain/community@0.3.14': - resolution: {integrity: sha512-zadvK0pu15Jp028VEV4wV+lYB1ViojSolSdSNMdE82KuaK97kH/F1aynQ2W+ebHzjr0lG3dUF3OfOqHU37VgwA==} + '@langchain/community@0.3.19': + resolution: {integrity: sha512-7ygPPC9eaIq6Bkv7Z3Vz8PxKjCEi0FCyOuK3e5fafm7ahqX0JXDxnBADObDJ7euFWTKXYFiXDYdoJI/BGlm1PQ==} engines: {node: '>=18'} peerDependencies: '@arcjet/redact': ^v1.0.0-alpha.23 @@ -1860,6 +1964,7 @@ packages: '@azure/search-documents': ^12.0.0 '@azure/storage-blob': ^12.15.0 '@browserbasehq/sdk': '*' + '@browserbasehq/stagehand': ^1.0.0 '@clickhouse/client': ^0.2.5 '@cloudflare/ai': '*' '@datastax/astra-db-ts': ^1.0.0 @@ -1874,7 +1979,8 @@ packages: '@gradientai/nodejs-sdk': ^1.2.0 '@huggingface/inference': ^2.6.4 '@ibm-cloud/watsonx-ai': '*' - '@langchain/core': 0.3.18 + '@lancedb/lancedb': ^0.12.0 + '@langchain/core': 0.3.26 '@layerup/layerup-security': ^1.5.12 '@libsql/client': ^0.14.0 '@mendable/firecrawl-js': ^1.4.3 @@ -1947,6 +2053,7 @@ packages: neo4j-driver: '*' notion-to-md: ^3.1.0 officeparser: ^4.0.4 + openai: '*' pdf-parse: 1.1.1 pg: ^8.11.0 pg-copy-streams: ^6.0.5 @@ -1962,7 +2069,6 @@ packages: typeorm: ^0.3.20 typesense: ^1.5.3 usearch: ^1.1.1 - vectordb: ^0.1.4 voy-search: 0.6.2 weaviate-ts-client: '*' web-auth-library: ^1.0.3 @@ -2024,6 +2130,8 @@ packages: optional: true '@huggingface/inference': optional: true + '@lancedb/lancedb': + optional: true '@layerup/layerup-security': optional: true '@libsql/client': @@ -2196,8 +2304,6 @@ packages: optional: true usearch: optional: true - vectordb: - optional: true voy-search: optional: true weaviate-ts-client: @@ -2211,105 +2317,105 @@ packages: youtubei.js: optional: true - '@langchain/core@0.3.18': - resolution: {integrity: sha512-IEZCrFs1Xd0J2FTH1D3Lnm3/Yk2r8LSpwDeLYwcCom3rNAK5k4mKQ2rwIpNq3YuqBdrTNMKRO+PopjkP1SB17A==} + '@langchain/core@0.3.26': + resolution: {integrity: sha512-6RUQHEp8wv+JwtYIIEBYBzbLlcAQZFc7EDOgAM0ukExjh9HiXoJzoWpgMRRCrr/koIbtwXPJUqBprZK1I1CXHQ==} engines: {node: '>=18'} - '@langchain/langgraph-checkpoint@0.0.10': - resolution: {integrity: sha512-BMfJD5Eg39pM0iJmEv50qJL5dJJI5U2oHuNXixWlQ1BKsvtbSs713+EHc21uuvcJUct1MPiv7RdfvwXycLM/aQ==} + '@langchain/langgraph-checkpoint@0.0.13': + resolution: {integrity: sha512-amdmBcNT8a9xP2VwcEWxqArng4gtRDcnVyVI4DsQIo1Aaz8e8+hH17zSwrUF3pt1pIYztngIfYnBOim31mtKMg==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': 0.3.18 + '@langchain/core': 0.3.26 '@langchain/langgraph-sdk@0.0.23': resolution: {integrity: sha512-4LfwMN1PdawJ9I3dXxQHUb1NoJaZo5SklQbAamrS6fLrUU9fSoYkPu1mYQp3uJjKtXRYOnuoP0egYyQPoKuiXQ==} - '@langchain/langgraph@0.2.20': - resolution: {integrity: sha512-MMD4G++gHs+5OO5Uu75gduskTboJ8Q7ZAwzd1s64a1Y/38pdgDqJdYRHRCGpx8eeCuKhsRzV2Sssnl5lujfj8w==} + '@langchain/langgraph@0.2.34': + resolution: {integrity: sha512-fSlmLYre+Skh5XJgBGe5YRtXaHyGMTlhu5UN3LzIgA3E9CmGODvH+Ydyk5vJzhXMjnPpLr8icqlKxKrYmZ3gTw==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': 0.3.18 + '@langchain/core': 0.3.26 - '@langchain/openai@0.3.13': - resolution: {integrity: sha512-lfiauYttb1Vv1GVGDNZlse8475RUsKm9JJ7X9kMVtYoOQnK8xxzMVSrpW7HYLmJokrtVgF6STwRzNJI2gZ3uBw==} + '@langchain/openai@0.3.16': + resolution: {integrity: sha512-Om9HRlTeI0Ou6D4pfxbWHop4WGfkCdV/7v1W/+Jr7NSf0BNoA9jk5GqGms8ZtOYSGgPvizDu3i0TrM3B4cN4NA==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': 0.3.18 + '@langchain/core': 0.3.26 '@langchain/textsplitters@0.1.0': resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': 0.3.18 + '@langchain/core': 0.3.26 - '@lexical/clipboard@0.20.0': - resolution: {integrity: sha512-oHmb9kSVHjeFCd2q8VrEXW22doUHMJ6cGXqo7Ican7Ljl4/9OgRWr+cq55yntoSaJfCrRYkTiZCLDejF2ciSiA==} + '@lexical/clipboard@0.21.0': + resolution: {integrity: sha512-3lNMlMeUob9fcnRXGVieV/lmPbmet/SVWckNTOwzfKrZ/YW5HiiyJrWviLRVf50dGXTbmBGt7K/2pfPYvWCHFA==} - '@lexical/code@0.20.0': - resolution: {integrity: sha512-zFsVGuzIn4CQxEnlW4AG/Hq6cyATVZ4fZTxozE/f5oK4vDPvnY/goRxrzSuAMX73A/HRX3kTEzMDcm4taRM3Mg==} + '@lexical/code@0.21.0': + resolution: {integrity: sha512-E0DNSFu4I+LMn3ft+UT0Dbntc8ZKjIA0BJj6BDewm0qh3bir40YUf5DkI2lpiFNRF2OpcmmcIxakREeU6avqTA==} - '@lexical/devtools-core@0.20.0': - resolution: {integrity: sha512-/CnL+Dfpzw4koy2BTdUICkvrCkMIYG8Y73KB/S1Bt5UzJpD+PV300puWJ0NvUvAj24H78r73jxvK2QUG67Tdaw==} + '@lexical/devtools-core@0.21.0': + resolution: {integrity: sha512-csK41CmRLZbKNV5pT4fUn5RzdPjU5PoWR8EqaS9kiyayhDg2zEnuPtvUYWanLfCLH9A2oOfbEsGxjMctAySlJw==} peerDependencies: react: '>=17.x' react-dom: '>=17.x' - '@lexical/dragon@0.20.0': - resolution: {integrity: sha512-3DAHF8mSKiPZtXCqu2P8ynSwS3fGXzg4G/V0lXNjBxhmozjzUzWZRWIWtmTlWdEu9GXsoyeM3agcaxyDPJJwkA==} + '@lexical/dragon@0.21.0': + resolution: {integrity: sha512-ahTCaOtRFNauEzplN1qVuPjyGAlDd+XcVM5FQCdxVh/1DvqmBxEJRVuCBqatzUUVb89jRBekYUcEdnY9iNjvEQ==} - '@lexical/hashtag@0.20.0': - resolution: {integrity: sha512-ldOP/d9tA6V9qvLyr3mRYkcYY5ySOHJ2BFOW/jZPxQcj6lWafS8Lk7XdMUpHHDjRpY2Hizsi5MHJkIqFglYXbw==} + '@lexical/hashtag@0.21.0': + resolution: {integrity: sha512-O4dxcZNq1Xm45HLoRifbGAYvQkg3qLoBc6ibmHnDqZL5mQDsufnH6QEKWfgDtrvp9++3iqsSC+TE7VzWIvA7ww==} - '@lexical/history@0.20.0': - resolution: {integrity: sha512-dXtIS31BU6RmLX2KwLAi1EgGl+USeyi+rshh19azACXHPFqONZgPd2t21LOLSFn7C1/W+cSp/kqVDlQVbZUZRA==} + '@lexical/history@0.21.0': + resolution: {integrity: sha512-Sv2sici2NnAfHYHYRSjjS139MDT8fHP6PlYM2hVr+17dOg7/fJl22VBLRgQ7/+jLtAPxQjID69jvaMlOvt4Oog==} - '@lexical/html@0.20.0': - resolution: {integrity: sha512-ob7QHkEv+mhaZjlurDj90UmEyN9G4rzBPR5QV42PLnu1qMSviMEdI5V3a5/A5aFf/FDDQ+0GAgWBFnA/MEDczQ==} + '@lexical/html@0.21.0': + resolution: {integrity: sha512-UGahVsGz8OD7Ya39qwquE+JPStTxCw/uaQrnUNorCM7owtPidO2H+tsilAB3A1GK3ksFGdHeEjBjG0Gf7gOg+Q==} - '@lexical/link@0.20.0': - resolution: {integrity: sha512-zicDcfgRZPRFZ8WOZv5er0Aqkde+i7QoFVkLQD4dNLLORjoMSJOISJH6VEdjBl3k7QJTxbfrt+xT5d/ZsAN5GA==} + '@lexical/link@0.21.0': + resolution: {integrity: sha512-/coktIyRXg8rXz/7uxXsSEfSQYxPIx8CmignAXWYhcyYtCWA0fD2mhEhWwVvHH9ofNzvidclRPYKUnrmUm3z3Q==} - '@lexical/list@0.20.0': - resolution: {integrity: sha512-ufSse8ui3ooUe0HA/yF/9STrG8wYhIDLMRhELOw80GFCkPJaxs6yRvjfmJooH5IC88rpUJ5XXFFiZKfGxEZLEw==} + '@lexical/list@0.21.0': + resolution: {integrity: sha512-WItGlwwNJCS8b6SO1QPKzArShmD+OXQkLbhBcAh+EfpnkvmCW5T5LqY+OfIRmEN1dhDOnwqCY7mXkivWO8o5tw==} - '@lexical/mark@0.20.0': - resolution: {integrity: sha512-1P2izmkgZ4VDp+49rWO1KfWivL5aA30y5kkYbFZ/CS05fgbO7ogMjLSajpz+RN/zzW79v3q4YfikrMgaD23InA==} + '@lexical/mark@0.21.0': + resolution: {integrity: sha512-2x/LoHDYPOkZbKHz4qLFWsPywjRv9KggTOtmRazmaNRUG0FpkImJwUbbaKjWQXeESVGpzfL3qNFSAmCWthsc4g==} - '@lexical/markdown@0.20.0': - resolution: {integrity: sha512-ZoGsECejp9z6MEvc8l81b1h1aWbB3sTq6xOFeUTbDL5vKpA67z5CmQQLi0uZWrygrbO9dSE3Q/JGcodUrczxbw==} + '@lexical/markdown@0.21.0': + resolution: {integrity: sha512-XCQCyW5ujK0xR6evV8sF0hv/MRUA//kIrB2JiyF12tLQyjLRNEXO+0IKastWnMKSaDdJMKjzgd+4PiummYs7uA==} - '@lexical/offset@0.20.0': - resolution: {integrity: sha512-VMhxsxxDGnpVw0jgC8UlDf0Q2RHIHbS49uZgs3l9nP+O+G8s3b76Ta4Tb+iJOK2FY6874/TcQMbSuXGhfpQk8A==} + '@lexical/offset@0.21.0': + resolution: {integrity: sha512-UR0wHg+XXbq++6aeUPdU0K41xhUDBYzX+AeiqU9bZ7yoOq4grvKD8KBr5tARCSYTy0yvQnL1ddSO12TrP/98Lg==} - '@lexical/overflow@0.20.0': - resolution: {integrity: sha512-z4lElzLm1FVifc7bzBZN4VNKeTuwygpyHQvCJVWXzF2Kbvex43PEYMi8u4A83idVqbmzbyBLASwUJS0voLoPLw==} + '@lexical/overflow@0.21.0': + resolution: {integrity: sha512-93P+d1mbvaJvZF8KK2pG22GuS2pHLtyC7N3GBfkbyAIb7TL/rYs47iR+eADJ4iNY680lylJ4Sl/AEnWvlY7hAg==} - '@lexical/plain-text@0.20.0': - resolution: {integrity: sha512-LvoC+9mm2Im1iO8GgtgaqSfW0T3mIE5GQl1xGxbVNdANmtHmBgRAJn2KfQm1XHZP6zydLRMhZkzC+jfInh2yfQ==} + '@lexical/plain-text@0.21.0': + resolution: {integrity: sha512-r4CsAknBD7qGYSE5fPdjpJ6EjfvzHbDtuCeKciL9muiswQhw4HeJrT1qb/QUIY+072uvXTgCgmjUmkbYnxKyPA==} - '@lexical/react@0.20.0': - resolution: {integrity: sha512-5QbN5AFtZ9efXxU/M01ADhUZgthR0e8WKi5K/w5EPpWtYFDPQnUte3rKUjYJ7uwG1iwcvaCpuMbxJjHQ+i6pDQ==} + '@lexical/react@0.21.0': + resolution: {integrity: sha512-tKwx8EoNkBBKOZf8c10QfyDImH87+XUI1QDL8KXt+Lb8E4ho7g1jAjoEirNEn9gMBj33K4l2qVdbe3XmPAdpMQ==} peerDependencies: react: '>=17.x' react-dom: '>=17.x' - '@lexical/rich-text@0.20.0': - resolution: {integrity: sha512-BR1pACdMA+Ymef0f5EN1y+9yP8w7S+9MgmBP1yjr3w4KdqRnfSaGWyxwcHU8eA+zu16QfivpB6501VJ90YeuXw==} + '@lexical/rich-text@0.21.0': + resolution: {integrity: sha512-+pvEKUneEkGfWOSTl9jU58N9knePilMLxxOtppCAcgnaCdilOh3n5YyRppXhvmprUe0JaTseCMoik2LP51G/JA==} - '@lexical/selection@0.20.0': - resolution: {integrity: sha512-YnkH5UCMNN/em95or/6uwAV31vcENh1Roj+JOg5KD+gJuA7VGdDCy0vZl/o0+1badXozeZ2VRxXNC6JSK7T4+A==} + '@lexical/selection@0.21.0': + resolution: {integrity: sha512-4u53bc8zlPPF0rnHjsGQExQ1St8NafsDd70/t1FMw7yvoMtUsKdH7+ap00esLkJOMv45unJD7UOzKRqU1X0sEA==} - '@lexical/table@0.20.0': - resolution: {integrity: sha512-qHuK2rvQUoQDx62YpvJE3Ev4yK9kjRFo79IDBapxrhoXg/wCGQOjMBzVD3G5PWkhyl/GDnww80GwYjLloQLQzg==} + '@lexical/table@0.21.0': + resolution: {integrity: sha512-JhylAWcf4qKD4FmxMUt3YzH5zg2+baBr4+/haLZL7178hMvUzJwGIiWk+3hD3phzmW3WrP49uFXzM7DMSCkE8w==} - '@lexical/text@0.20.0': - resolution: {integrity: sha512-Fu64i5CIlEOlgucSdp9XFqB2XqoRsw4at76n93+6RF4+LgGDnu4nLXQVCVxNmLcGyh2WgczuTpnk5P2mHNAIUA==} + '@lexical/text@0.21.0': + resolution: {integrity: sha512-ceB4fhYejCoR8ID4uIs0sO/VyQoayRjrRWTIEMvOcQtwUkcyciKRhY0A7f2wVeq/MFStd+ajLLjy4WKYK5zUnA==} - '@lexical/utils@0.20.0': - resolution: {integrity: sha512-sXIa2nowrNxY8VcjjuxZbJ/HovIql8bmInNaxBR03JAYfqMiL5I5/dYgjOQJV49NJnuR1uTY2GwVxVTXCTFUCw==} + '@lexical/utils@0.21.0': + resolution: {integrity: sha512-YzsNOAiLkCy6R3DuP18gtseDrzgx+30lFyqRvp5M7mckeYgQElwdfG5biNFDLv7BM9GjSzgU5Cunjycsx6Sjqg==} - '@lexical/yjs@0.20.0': - resolution: {integrity: sha512-TiHNhu2VkhXN69V+fXVS3xjOQ6aLnheQUGwOAhuFkDPL3VLCb0yl2Mgydpayn+3Grwii4ZBHcF7oCC84GiU5bw==} + '@lexical/yjs@0.21.0': + resolution: {integrity: sha512-AtPhC3pJ92CHz3dWoniSky7+MSK2WSd0xijc76I2qbTeXyeuFfYyhR6gWMg4knuY9Wz3vo9/+dXGdbQIPD8efw==} peerDependencies: yjs: '>=13.5.22' @@ -2361,6 +2467,11 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@playwright/test@1.49.1': + resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==} + engines: {node: '>=18'} + hasBin: true + '@polka/url@1.0.0-next.25': resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} @@ -2397,14 +2508,14 @@ packages: '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} - '@radix-ui/primitive@1.1.0': - resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + '@radix-ui/primitive@1.1.1': + resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} - '@radix-ui/react-accordion@1.2.1': - resolution: {integrity: sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==} + '@radix-ui/react-accordion@1.2.2': + resolution: {integrity: sha512-b1oh54x4DMCdGsB4/7ahiSrViXxaBwRPotiZNnYXjLha9vfuURSAZErki6qjDoSIV0eXx5v57XnTGVtGwnfp2g==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2413,11 +2524,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-alert-dialog@1.1.2': - resolution: {integrity: sha512-eGSlLzPhKO+TErxkiGcCZGuvbVMnLA1MTnyBksGOeGRGkxHiiJUujsjmNTdWTm4iHVSRaUao9/4Ur671auMghQ==} + '@radix-ui/react-alert-dialog@1.1.4': + resolution: {integrity: sha512-A6Kh23qZDLy3PSU4bh2UJZznOrUdHImIXqF8YtUa6CN73f8EOO9XlXSCd9IHyPvIquTaa/kwaSWzZTtUvgXVGw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2426,11 +2537,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-arrow@1.1.0': - resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + '@radix-ui/react-arrow@1.1.1': + resolution: {integrity: sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2439,11 +2550,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-checkbox@1.1.2': - resolution: {integrity: sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==} + '@radix-ui/react-checkbox@1.1.3': + resolution: {integrity: sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2452,11 +2563,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collapsible@1.1.1': - resolution: {integrity: sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==} + '@radix-ui/react-collapsible@1.1.2': + resolution: {integrity: sha512-PliMB63vxz7vggcyq0IxNYk8vGDrLXVWw4+W4B8YnwI1s18x7YZYqlG9PLX7XxAJUi0g2DxP4XKJMFHh/iVh9A==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2465,11 +2576,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.0': - resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + '@radix-ui/react-collection@1.1.1': + resolution: {integrity: sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2481,48 +2592,48 @@ packages: '@radix-ui/react-compose-refs@1.1.0': resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-context-menu@2.2.2': - resolution: {integrity: sha512-99EatSTpW+hRYHt7m8wdDlLtkmTovEe8Z/hnxUPV+SKuuNL5HWNhQI4QSdjZqNSgXHay2z4M3Dym73j9p2Gx5Q==} + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-context@1.1.0': - resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + '@radix-ui/react-context-menu@2.2.4': + resolution: {integrity: sha512-ap4wdGwK52rJxGkwukU1NrnEodsUFQIooANKu+ey7d6raQ2biTcEf8za1zr0mgFHieevRTB2nK4dJeN8pTAZGQ==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.2': - resolution: {integrity: sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==} + '@radix-ui/react-dialog@1.1.4': + resolution: {integrity: sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2534,17 +2645,17 @@ packages: '@radix-ui/react-direction@1.1.0': resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.1.1': - resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==} + '@radix-ui/react-dismissable-layer@1.1.3': + resolution: {integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2553,11 +2664,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.1.2': - resolution: {integrity: sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==} + '@radix-ui/react-dropdown-menu@2.1.4': + resolution: {integrity: sha512-iXU1Ab5ecM+yEepGAWK8ZhMyKX4ubFdCNtol4sT9D0OVErG9PNElfx3TQhjw7n7BC5nFVz68/5//clWy+8TXzA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2569,17 +2680,17 @@ packages: '@radix-ui/react-focus-guards@1.1.1': resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.0': - resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + '@radix-ui/react-focus-scope@1.1.1': + resolution: {integrity: sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2588,11 +2699,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-hover-card@1.1.2': - resolution: {integrity: sha512-Y5w0qGhysvmqsIy6nQxaPa6mXNKznfoGjOfBgzOjocLxr2XlSjqBMYQQL+FfyogsMuX+m8cZyQGYhJxvxUzO4w==} + '@radix-ui/react-hover-card@1.1.4': + resolution: {integrity: sha512-QSUUnRA3PQ2UhvoCv3eYvMnCAgGQW+sTu86QPuNb+ZMi+ZENd6UWpiXbcWDQ4AEaKF9KKpCHBeaJz9Rw6lRlaQ==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2601,25 +2712,25 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-icons@1.3.1': - resolution: {integrity: sha512-QvYompk0X+8Yjlo/Fv4McrzxohDdM5GgLHyQcPpcsPvlOSXCGFjdbuyGL5dzRbg0GpknAjQJJZzdiRK7iWVuFQ==} + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} peerDependencies: - react: ^16.x || ^17.x || ^18.x || ^19.x + react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-label@2.1.0': - resolution: {integrity: sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==} + '@radix-ui/react-label@2.1.1': + resolution: {integrity: sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2628,11 +2739,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-menu@2.1.2': - resolution: {integrity: sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==} + '@radix-ui/react-menu@2.1.4': + resolution: {integrity: sha512-BnOgVoL6YYdHAG6DtXONaR29Eq4nvbi8rutrV/xlr3RQCMMb3yqP85Qiw/3NReozrSW+4dfLkK+rc1hb4wPU/A==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2641,11 +2752,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-menubar@1.1.2': - resolution: {integrity: sha512-cKmj5Gte7LVyuz+8gXinxZAZECQU+N7aq5pw7kUPpx3xjnDXDbsdzHtCCD2W72bwzy74AvrqdYnKYS42ueskUQ==} + '@radix-ui/react-menubar@1.1.4': + resolution: {integrity: sha512-+KMpi7VAZuB46+1LD7a30zb5IxyzLgC8m8j42gk3N4TUCcViNQdX8FhoH1HDvYiA8quuqcek4R4bYpPn/SY1GA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2654,11 +2765,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popover@1.1.2': - resolution: {integrity: sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==} + '@radix-ui/react-popover@1.1.4': + resolution: {integrity: sha512-aUACAkXx8LaFymDma+HQVji7WhvEhpFJ7+qPz17Nf4lLZqtreGOFRiNQWQmhzp7kEWg9cOyyQJpdIMUMPc/CPw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2667,11 +2778,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.0': - resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + '@radix-ui/react-popper@1.2.1': + resolution: {integrity: sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2680,11 +2791,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.1.2': - resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==} + '@radix-ui/react-portal@1.1.3': + resolution: {integrity: sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2693,11 +2804,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.1': - resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} + '@radix-ui/react-presence@1.1.2': + resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2709,8 +2820,8 @@ packages: '@radix-ui/react-primitive@2.0.0': resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2719,11 +2830,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-progress@1.1.0': - resolution: {integrity: sha512-aSzvnYpP725CROcxAOEBVZZSIQVQdHgBr2QQFKySsaD14u8dNT0batuXI+AAGDdAHfXH8rbnHmjYFqVJ21KkRg==} + '@radix-ui/react-primitive@2.0.1': + resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2732,11 +2843,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-radio-group@1.2.1': - resolution: {integrity: sha512-kdbv54g4vfRjja9DNWPMxKvXblzqbpEC8kspEkZ6dVP7kQksGCn+iZHkcCz2nb00+lPdRvxrqy4WrvvV1cNqrQ==} + '@radix-ui/react-progress@1.1.1': + resolution: {integrity: sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2745,11 +2856,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.0': - resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + '@radix-ui/react-radio-group@1.2.2': + resolution: {integrity: sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2758,11 +2869,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-scroll-area@1.2.1': - resolution: {integrity: sha512-FnM1fHfCtEZ1JkyfH/1oMiTcFBQvHKl4vD9WnpwkLgtF+UmnXMCad6ECPTaAjcDjam+ndOEJWgHyKDGNteWSHw==} + '@radix-ui/react-roving-focus@1.1.1': + resolution: {integrity: sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2771,11 +2882,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-select@2.1.2': - resolution: {integrity: sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==} + '@radix-ui/react-scroll-area@1.2.2': + resolution: {integrity: sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2784,11 +2895,24 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slider@1.2.1': - resolution: {integrity: sha512-bEzQoDW0XP+h/oGbutF5VMWJPAl/UU8IJjr7h02SOHDIIIxq+cep8nItVNoBV+OMmahCdqdF38FTpmXoqQUGvw==} + '@radix-ui/react-select@2.1.4': + resolution: {integrity: sha512-pOkb2u8KgO47j/h7AylCj7dJsm69BXcjkrvTqMptFqsE2i0p8lHkfgneXKjAgPzBMivnoMyt8o4KiV4wYzDdyQ==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slider@1.2.2': + resolution: {integrity: sha512-sNlU06ii1/ZcbHf8I9En54ZPW0Vil/yPVg4vQMcFNjrIx51jsHbFl1HYHQvCIWJSr1q0ZmA+iIs/ZTv8h7HHSA==} + peerDependencies: + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2800,17 +2924,26 @@ packages: '@radix-ui/react-slot@1.1.0': resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-switch@1.1.1': - resolution: {integrity: sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==} + '@radix-ui/react-slot@1.1.1': + resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.1.2': + resolution: {integrity: sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g==} + peerDependencies: + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2819,11 +2952,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tabs@1.1.1': - resolution: {integrity: sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==} + '@radix-ui/react-tabs@1.1.2': + resolution: {integrity: sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2832,11 +2965,11 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.1.4': - resolution: {integrity: sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==} + '@radix-ui/react-tooltip@1.1.6': + resolution: {integrity: sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2848,7 +2981,7 @@ packages: '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2857,7 +2990,7 @@ packages: '@radix-ui/react-use-controllable-state@1.1.0': resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2866,7 +2999,7 @@ packages: '@radix-ui/react-use-escape-keydown@1.1.0': resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2875,7 +3008,7 @@ packages: '@radix-ui/react-use-layout-effect@1.1.0': resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2884,7 +3017,7 @@ packages: '@radix-ui/react-use-previous@1.1.0': resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2893,7 +3026,7 @@ packages: '@radix-ui/react-use-rect@1.1.0': resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2902,17 +3035,17 @@ packages: '@radix-ui/react-use-size@1.1.0': resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-visually-hidden@1.1.0': - resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} + '@radix-ui/react-visually-hidden@1.1.1': + resolution: {integrity: sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^19.0.2 + '@types/react-dom': ^19.0.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2924,10 +3057,6 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@remix-run/router@1.21.0': - resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} - engines: {node: '>=14.0.0'} - '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -3125,23 +3254,23 @@ packages: '@shikijs/core@1.10.3': resolution: {integrity: sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==} - '@shikijs/core@1.22.2': - resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} + '@shikijs/core@1.24.4': + resolution: {integrity: sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==} - '@shikijs/engine-javascript@1.22.2': - resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} + '@shikijs/engine-javascript@1.24.4': + resolution: {integrity: sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==} - '@shikijs/engine-oniguruma@1.22.2': - resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} + '@shikijs/engine-oniguruma@1.24.4': + resolution: {integrity: sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==} '@shikijs/transformers@1.10.3': resolution: {integrity: sha512-MNjsyye2WHVdxfZUSr5frS97sLGe6G1T+1P41QjyBFJehZphMcr4aBlRLmq6OSPBslYe9byQPVvt/LJCOfxw8Q==} - '@shikijs/types@1.22.2': - resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} + '@shikijs/types@1.24.4': + resolution: {integrity: sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==} - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + '@shikijs/vscode-textmate@9.3.1': + resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} @@ -3301,11 +3430,11 @@ packages: '@swc/types@0.1.12': resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} - '@tanstack/query-core@5.59.20': - resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} + '@tanstack/query-core@5.62.8': + resolution: {integrity: sha512-4fV31vDsUyvNGrKIOUNPrZztoyL187bThnoQOvAXEVlZbSiuPONpfx53634MKKdvsDir5NyOGm80ShFaoHS/mw==} - '@tanstack/react-query@5.59.20': - resolution: {integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw==} + '@tanstack/react-query@5.62.8': + resolution: {integrity: sha512-8TUstKxF/fysHonZsWg/hnlDVgasTdHx6Q+f1/s/oPKJBJbKUWPZEHwLTMOZgrZuroLMiqYKJ9w69Abm8mWP0Q==} peerDependencies: react: ^18 || ^19 @@ -3316,8 +3445,8 @@ packages: resolution: {integrity: sha512-objFTMXbLKoHbN8WIPz25gy/H16VewH5qcdEu2wrbAYtNid4d3s3C/F1PfXUiSYpzd7YoKh2yRUkTFl03btgRw==} engines: {node: '>=16'} - '@tomjs/vite-plugin-vscode@3.1.1': - resolution: {integrity: sha512-mFBzwH1gmX7MyvwkeQMPfGS6uNWNkkOe3yHsl8YHXABNxEavwDVpcjxMtZdohPGIWidovnlqKKhWmrfht3LSzQ==} + '@tomjs/vite-plugin-vscode@3.2.1': + resolution: {integrity: sha512-BXFQjoaAPvt6v7D5cbUQqJD+mgusRxjbTgS3pclTjrVHt7W1jxsQnSBf2OZ1WzTuUF0KseDjNVtYcEQQI63+8g==} engines: {node: '>=16'} peerDependencies: vite: '>=2' @@ -3352,6 +3481,9 @@ packages: '@types/cookie@0.4.1': resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/cors@2.8.17': resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} @@ -3454,9 +3586,6 @@ packages: '@types/diff@6.0.0': resolution: {integrity: sha512-dhVCYGv3ZSbzmQaBSagrv1WJ6rXCdkyTcDyoNu1MD8JohI7pR7k8wdZEm+mvdxRKXyHVwckFzWU1vJc+Z29MlA==} - '@types/dompurify@3.0.5': - resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} - '@types/eslint@8.56.10': resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} @@ -3532,8 +3661,8 @@ packages: '@types/node@20.3.0': resolution: {integrity: sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==} - '@types/node@22.9.0': - resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@22.10.2': + resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} '@types/pad-left@2.1.1': resolution: {integrity: sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA==} @@ -3541,6 +3670,14 @@ packages: '@types/papaparse@5.3.15': resolution: {integrity: sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw==} + '@types/react-dom@19.0.2': + resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==} + peerDependencies: + '@types/react': ^19.0.2 + + '@types/react@19.0.2': + resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==} + '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -3724,11 +3861,11 @@ packages: peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 - '@vitejs/plugin-react@4.3.3': - resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 '@vitejs/plugin-vue@5.0.5': resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} @@ -3737,11 +3874,11 @@ packages: vite: ^5.0.0 vue: ^3.2.25 - '@vitest/expect@2.1.4': - resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} + '@vitest/expect@2.1.8': + resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} - '@vitest/mocker@2.1.4': - resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} + '@vitest/mocker@2.1.8': + resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -3751,20 +3888,20 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.4': - resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} + '@vitest/pretty-format@2.1.8': + resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} - '@vitest/runner@2.1.4': - resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} + '@vitest/runner@2.1.8': + resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==} - '@vitest/snapshot@2.1.4': - resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} + '@vitest/snapshot@2.1.8': + resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==} - '@vitest/spy@2.1.4': - resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} + '@vitest/spy@2.1.8': + resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==} - '@vitest/utils@2.1.4': - resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} + '@vitest/utils@2.1.8': + resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} '@vscode/vsce-sign-alpine-arm64@2.0.2': resolution: {integrity: sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==} @@ -3941,6 +4078,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -4016,8 +4158,8 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - apache-arrow@18.0.0: - resolution: {integrity: sha512-gFlPaqN9osetbB83zC29AbbZqGiCuFH1vyyPseJ+B7SIbfBtESV62mMT/CkiIt77W6ykC/nTWFzTXFs0Uldg4g==} + apache-arrow@18.1.0: + resolution: {integrity: sha512-v/ShMp57iBnBp4lDgV8Jx3d3Q5/Hac25FWmQ98eMahUiHPXcvwIMKJD0hBIgclm/FCG+LwPkAKtkRO1O/W0YGg==} hasBin: true aproba@2.0.0: @@ -4196,13 +4338,13 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + browserslist@4.24.3: + resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4257,12 +4399,12 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001642: - resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} - caniuse-lite@1.0.30001653: resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} + caniuse-lite@1.0.30001690: + resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} engines: {node: '>=6'} @@ -4290,6 +4432,10 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -4339,8 +4485,8 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} @@ -4382,10 +4528,6 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -4490,6 +4632,9 @@ packages: confbox@0.1.7: resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confusing-browser-globals@1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} @@ -4523,6 +4668,10 @@ packages: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} @@ -4557,6 +4706,14 @@ packages: cosmiconfig: '>=8.2' typescript: '>=4' + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -4846,6 +5003,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -4879,6 +5045,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -4930,6 +5100,10 @@ packages: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -4971,8 +5145,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.1.6: - resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} + dompurify@3.2.3: + resolution: {integrity: sha512-U1U5Hzc2MO0oW3DF+G9qYN0aT7atAou4AgI0XjWz061nyBPbdxkfdhfy5uMgGn6+oLFCfn44ZGbdDqCzVmlOWA==} domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} @@ -5000,12 +5174,15 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - electron-to-chromium@1.4.774: - resolution: {integrity: sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==} - electron-to-chromium@1.5.13: resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} + electron-to-chromium@1.5.75: + resolution: {integrity: sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==} + + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -5081,6 +5258,9 @@ packages: resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -5096,8 +5276,8 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - es-toolkit@1.27.0: - resolution: {integrity: sha512-ETSFA+ZJArcuSCpzD2TjAy6UHpx4E4uqFsoDg9F/nTLogrLmVVZQ+zNxco5h7cWnA1nNak07IXsLcaSMih+ZPQ==} + es-toolkit@1.30.1: + resolution: {integrity: sha512-ZXflqanzH8BpHkDhFa10bBf6ONDCe84EPUm7SSICGzuuROSluT2ynTPtwn9PcRelMtorCRozSknI/U0MNYp0Uw==} es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} @@ -5126,6 +5306,10 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -5266,8 +5450,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-compiler@19.0.0-beta-df7b47d-20241124: - resolution: {integrity: sha512-82PfnllC8jP/68KdLAbpWuYTcfmtGLzkqy2IW85WopKMTr+4rdQpp+lfliQ/QE79wWrv/dRoADrk3Pdhq25nTw==} + eslint-plugin-react-compiler@19.0.0-beta-b2e8e9c-20241220: + resolution: {integrity: sha512-STVaOQyivSBv0un6/ujYOPntKcCaD0qXIG8siBEs9QcWmQ7q3J3ozuAE86SlSc7ElIZgPoL9HoSN3EONS47nqQ==} engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} peerDependencies: eslint: '>=7' @@ -5380,8 +5564,8 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - execa@9.5.1: - resolution: {integrity: sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==} + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} engines: {node: ^18.19.0 || >=20.5.0} expand-template@2.0.3: @@ -5554,12 +5738,12 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@12.0.0-alpha.1: - resolution: {integrity: sha512-WpMrDfk6I5Q4T/7+LEjQOVbAD5Yb/cGbbV+LLllFEg+dHi8XZ7QecJ9aYS9bn12cWuF7gGy+uqskyAkGTWHs3w==} + framer-motion@12.0.0-alpha.2: + resolution: {integrity: sha512-s603YLhCoX3GKaPDZnywwoFdd1T6gDFCfevVRek+TCpbvazUkITh+YZ3a6kqTvn4Aj7qQWT3vAmzWIjl/LsCFA==} peerDependencies: '@emotion/is-prop-valid': '*' - react: ^18.0.0 - react-dom: ^18.0.0 + react: ^19.0.0-rc.1 + react-dom: ^19.0.0-rc.1 peerDependenciesMeta: '@emotion/is-prop-valid': optional: true @@ -5586,6 +5770,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -5618,9 +5807,6 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -5797,8 +5983,8 @@ packages: hast-util-raw@9.0.4: resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + hast-util-to-html@9.0.4: + resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} @@ -5836,14 +6022,14 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} - html-dom-parser@5.0.10: - resolution: {integrity: sha512-GwArYL3V3V8yU/mLKoFF7HlLBv80BZ2Ey1BzfVNRpAci0cEKhFHI/Qh8o8oyt3qlAMLlK250wsxLdYX4viedvg==} + html-dom-parser@5.0.12: + resolution: {integrity: sha512-LP2BI8aCnv6HCnO1kyQMaycqL7RCTUODGFWdKwrlc6ROG5rtbVEtE4mkBn1tokBMflUN7wyNKL4AXq7EMmga6Q==} - html-react-parser@5.1.18: - resolution: {integrity: sha512-65BwC0zzrdeW96jB2FRr5f1ovBhRMpLPJNvwkY5kA8Ay5xdL9t/RH2/uUTM7p+cl5iM88i6dDk4LXtfMnRmaJQ==} + html-react-parser@5.2.1: + resolution: {integrity: sha512-4FZBYVzmlYzmNgoDVETZd/I/OnVR0d46UMnLdf/VdKTE973jImSfbonIRCov/AQQsL7zp7D1UKqMz0gbK6M0yA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - react: 0.14 || 15 || 16 || 17 || 18 + '@types/react': ^19.0.2 + react: 0.14 || 15 || 16 || 17 || 18 || 19 peerDependenciesMeta: '@types/react': optional: true @@ -5884,8 +6070,8 @@ packages: humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - husky@9.1.6: - resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true @@ -6226,6 +6412,10 @@ packages: resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -6233,8 +6423,8 @@ packages: js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} - js-tiktoken@1.0.15: - resolution: {integrity: sha512-65ruOWWXDEZHHbAo7EjOcNxOGasQKbL4Fq3jEr2xsCqSsoOo6VVSqzWQb6PRIqypFSDcma4jO90YP0w5X8qVXQ==} + js-tiktoken@1.0.16: + resolution: {integrity: sha512-nUVdO5k/M9llWpiaZlBBDdtmr6qWXwSD6fgaDu2zM8UP+OXxx9V37lFkI6w0/1IuaDx7WffZ37oYd9KvcWKElg==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6243,11 +6433,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -6335,8 +6520,8 @@ packages: khroma@2.1.0: resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - knip@5.36.7: - resolution: {integrity: sha512-PSuu62+6wqd1Q1V/ZzbDhvJ3X+RU8wZILon90h2s93+d1OZL118ZE9WihzSqwP29GVt72MTlbS/HHG+O47H68w==} + knip@5.41.1: + resolution: {integrity: sha512-yNpCCe2REU7U3VRvMASnXSEtfEC2HmOoDW9Vp9teQ9FktJYnuagvSZD3xWq8Ru7sPABkmvbC5TVWuMzIaeADNA==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: @@ -6346,14 +6531,14 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - langchain@0.3.5: - resolution: {integrity: sha512-Gq0xC45Sq6nszS8kQG9suCrmBsuXH0INMmiF7D2TwPb6mtG35Jiq4grCk9ykpwPsarTHdty3SzUbII/FqiYSSw==} + langchain@0.3.7: + resolution: {integrity: sha512-6/Gkk9Zez3HkbsETFxZVo1iKLmaK3OzkDseC5MYFKVmYFDXFAOyJR3srJ9P61xF8heVdsPixqYIsejBn7/9dXg==} engines: {node: '>=18'} peerDependencies: '@langchain/anthropic': '*' '@langchain/aws': '*' '@langchain/cohere': '*' - '@langchain/core': 0.3.18 + '@langchain/core': 0.3.26 '@langchain/google-genai': '*' '@langchain/google-vertexai': '*' '@langchain/groq': '*' @@ -6396,8 +6581,8 @@ packages: resolution: {integrity: sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==} engines: {node: '>=16.0.0'} - langsmith@0.2.3: - resolution: {integrity: sha512-SPMYPVqR9kwXZVmJ2PXC61HeBnXIFHrjfjDxQ14H0+n5p4gqjLzgSHIQyxBlFeWQUQzArJxe65Ap+s+Xo1cZog==} + langsmith@0.2.13: + resolution: {integrity: sha512-16EOM5nhU6GlMCKGm5sgBIAKOKzS2d30qcDZmF21kSLZJiUhUNTROwvYdqgZLrGfIIzmSMJHCKA7RFd5qf50uw==} peerDependencies: openai: '*' peerDependenciesMeta: @@ -6430,35 +6615,35 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lexical@0.20.0: - resolution: {integrity: sha512-lJEHLFACXqRf3u/VlIOu9T7MJ51O4la92uOBwiS9Sx+juDK3Nrru5Vgl1aUirV1qK8XEM3h6Org2HcrsrzZ3ZA==} + lexical@0.21.0: + resolution: {integrity: sha512-Dxc5SCG4kB+wF+Rh55ism3SuecOKeOtCtGHFGKd6pj2QKVojtjkxGTQPMt7//2z5rMSue4R+hmRM0pCEZflupA==} lib0@0.2.97: resolution: {integrity: sha512-Q4d1ekgvufi9FiHkkL46AhecfNjznSL9MRNoJRQ76gBHS9OqU2ArfQK0FvBpuxgWeJeNI0LVgAYMIpsGeX4gYg==} engines: {node: '>=16'} hasBin: true - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - lilconfig@3.1.2: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@15.2.10: - resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} + lint-staged@15.2.11: + resolution: {integrity: sha512-Ev6ivCTYRTGs9ychvpVw35m/bcNDuBN+mnTeObCL5h+boS5WzBEC6LHI4I9F/++sZm1m+J2LEiy0gxL/R9TBqQ==} engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.4: - resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} engines: {node: '>=18.0.0'} load-tsconfig@0.2.5: @@ -6469,6 +6654,10 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -6559,9 +6748,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} - loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} @@ -6587,10 +6773,10 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lucide-react@0.461.0: - resolution: {integrity: sha512-Scpw3D/dV1bgVRC5Kh774RCm99z0iZpPv75M6kg7QL1lLvkQ1rmI1Sjjic1aGp1ULBwd7FokV6ry0g+d6pMB+w==} + lucide-react@0.469.0: + resolution: {integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==} peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} @@ -6710,7 +6896,7 @@ packages: merge-refs@1.3.0: resolution: {integrity: sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 peerDependenciesMeta: '@types/react': optional: true @@ -6725,8 +6911,8 @@ packages: merge@2.1.1: resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - mermaid@11.4.0: - resolution: {integrity: sha512-mxCfEYvADJqOiHfGpJXLs4/fAjHz448rH0pfY5fAoxiz70rQiDSzUUy4dNET2T08i46IVpjohPd6WWbzmRHiPA==} + mermaid@11.4.1: + resolution: {integrity: sha512-Mb01JT/x6CKDWaxigwfZYuYmDZ6xtrNwNlidKZwkSrDaY9n90tdrJTV5Umk+wP1fZscGptmKFXHsXMDEVZ+Q6A==} micromark-core-commonmark@2.0.1: resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} @@ -6902,6 +7088,9 @@ packages: mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} @@ -6958,8 +7147,8 @@ packages: nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - next-themes@0.4.3: - resolution: {integrity: sha512-nG84VPkTdUHR2YeD89YchvV4I9RbiMAql3GiLEQlPvq1ioaqPaIReK+yMRdg/zgiXws620qS1rU30TiWmmG9lA==} + next-themes@0.4.4: + resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==} peerDependencies: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc @@ -6996,12 +7185,12 @@ packages: node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -7091,8 +7280,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-js@0.4.3: - resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + oniguruma-to-es@0.8.1: + resolution: {integrity: sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==} onnx-proto@4.0.4: resolution: {integrity: sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==} @@ -7111,8 +7300,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@4.72.0: - resolution: {integrity: sha512-hFqG9BWCs7L7ifrhJXw7mJXmUBr7d9N6If3J9563o0jfwVA4wFANFDDaOIWFdgDdwgCXg5emf0Q+LoLCGszQYA==} + openai@4.77.0: + resolution: {integrity: sha512-WWacavtns/7pCUkOWvQIjyOfcdr9X+9n9Vvb0zFeKVDAqwCMDHB+iSr24SVaBAhplvSG6JrRXFpcNM9gWhOGIw==} hasBin: true peerDependencies: zod: ^3.23.8 @@ -7155,8 +7344,8 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-limit@6.1.0: - resolution: {integrity: sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==} + p-limit@6.2.0: + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} engines: {node: '>=18'} p-locate@5.0.0: @@ -7313,9 +7502,6 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -7347,11 +7533,24 @@ packages: pkg-types@1.1.3: resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + platform@1.3.6: resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} - pnpm@9.12.3: - resolution: {integrity: sha512-zOD53pxafJW++UQWnMXf6HQav7FFB4wNUIuGgFaEiofIHmJiRstglny9f9KabAYu9z/4QNlrPIbECsks9KgT7g==} + playwright-core@1.49.1: + resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.49.1: + resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==} + engines: {node: '>=18'} + hasBin: true + + pnpm@9.15.1: + resolution: {integrity: sha512-GstWXmGT7769p3JwKVBGkVDPErzHZCYudYfnHRncmKQj3/lTblfqRMSb33kP9pToPCe+X6oj1n4MAztYO+S/zw==} engines: {node: '>=18.12'} hasBin: true @@ -7444,8 +7643,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} engines: {node: '>=14'} hasBin: true @@ -7509,10 +7708,10 @@ packages: peerDependencies: react: ^18.3.1 - react-dom@19.0.0-rc-ed15d500-20241110: - resolution: {integrity: sha512-V9wIC4SOsBvRKYvfKXRg2Rzgh5BymnI7qlO63U68gt6agfGExRPUyTH1CnlQwR0mnqxbEEfUBFr6MoYtF/bY3A==} + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: ^19.0.0 react-error-boundary@3.1.4: resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} @@ -7520,22 +7719,22 @@ packages: peerDependencies: react: '>=16.13.1' - react-error-boundary@4.1.2: - resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} + react-error-boundary@5.0.0: + resolution: {integrity: sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ==} peerDependencies: react: '>=16.13.1' - react-hook-form@7.53.2: - resolution: {integrity: sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==} + react-hook-form@7.54.2: + resolution: {integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-intersection-observer@9.13.1: - resolution: {integrity: sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==} + react-intersection-observer@9.14.0: + resolution: {integrity: sha512-AYqlmDZn85VUmlODwYym9y5OlqY2cFyIu41dkN0GJWvhdbd19Mh16mz5IH6fO1gp5V4FfQOO4m0zGc04Tj13rQ==} peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: react-dom: optional: true @@ -7546,13 +7745,13 @@ packages: react-markdown@9.0.1: resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: '>=18' react-pdf@9.1.1: resolution: {integrity: sha512-Cn3RTJZMqVOOCgLMRXDamLk4LPGfyB2Np3OwQAUjmHIh47EpuGW1OpAA1Z1GVDLoHx4d5duEDo/YbUkDbr4QFQ==} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -7566,44 +7765,48 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-remove-scroll-bar@2.3.6: - resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^19.0.2 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - react-remove-scroll@2.6.0: - resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} + react-remove-scroll@2.6.2: + resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==} engines: {node: '>=10'} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^19.0.2 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - react-resizable-panels@2.1.6: - resolution: {integrity: sha512-oIqo/7pp2TsR+Dp1qZMr1l4RBDV4Zz/0HEG5zxliBJoHqqFnG0MbmFbk+5Q1VMGfPQ4uhXxefunLC1o7v38PDQ==} + react-resizable-panels@2.1.7: + resolution: {integrity: sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==} peerDependencies: react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-router-dom@6.28.0: - resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} - engines: {node: '>=14.0.0'} + react-router-dom@7.1.0: + resolution: {integrity: sha512-F4/nYBC9e4s0/ZjxM8GkZ9a68DpX76LN1a9W9mfPl2GfbDJ9/vzJro6MThNR5qGBH6KkgcK1BziyEzXhHV46Xw==} + engines: {node: '>=20.0.0'} peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + react: '>=18' + react-dom: '>=18' - react-router@6.28.0: - resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} - engines: {node: '>=14.0.0'} + react-router@7.1.0: + resolution: {integrity: sha512-VcFhWqkNIcojDRYaUO8qV0Jib52s9ULpCp3nkBbmrvtoCVFRp6tmk3tJ2w9BZauVctA1YRnJlFYDn9iJRuCpGA==} + engines: {node: '>=20.0.0'} peerDependencies: - react: '>=16.8' + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true react-shiki@0.1.2: resolution: {integrity: sha512-UZRHdnt7dJQiwlIR8QwjlTFKgkEk0f5kaofem67flHQKp5fE2YCIKyDUNxEv9R+ti5mlp6Dth7JrTJpJIofvyQ==} @@ -7615,20 +7818,30 @@ packages: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: '@types/react': optional: true + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^19.0.2 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react-universal-interface@0.6.2: resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} peerDependencies: react: '*' tslib: '*' - react-use@17.5.1: - resolution: {integrity: sha512-LG/uPEVRflLWMwi3j/sZqR00nF6JGqTTDblkXK2nzXsIvij06hXl1V/MZIlwj1OKIQUtlh1l9jK8gLsRyCQxMg==} + react-use@17.6.0: + resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} peerDependencies: react: '*' react-dom: '*' @@ -7637,8 +7850,8 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - react@19.0.0-rc-ed15d500-20241110: - resolution: {integrity: sha512-i722LdWhGeR2cxbBJZeDC3jxDGSWe21kCwdo5zKwCLQB7YYiKhNtWfHuEXrH7nygQ06soywMu7uU+H7L5KcJlg==} + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -7674,8 +7887,14 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex@4.3.2: - resolution: {integrity: sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==} + regex-recursion@5.0.0: + resolution: {integrity: sha512-UwyOqeobrCCqTXPcsSqH4gDhOjD5cI/b8kjngWgSZbxYh5yVjAwTjO5+hAuPRNiuR70+5RlWSs+U9PVcVcW9Lw==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@5.0.2: + resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} @@ -7846,8 +8065,8 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.25.0-rc-ed15d500-20241110: - resolution: {integrity: sha512-7y78hEtogCIfAr1XytMxvgtuccmQTtnx99Fdna4atfTpuahKkRqp1NB+HBGYFi5i2jCzRiNXgNhSQQw+h7Mmgw==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -7887,6 +8106,9 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -7906,6 +8128,10 @@ packages: resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} engines: {node: '>=14.15.0'} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7914,11 +8140,12 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} - shiki@1.22.2: - resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} + shiki@1.24.4: + resolution: {integrity: sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -7969,8 +8196,8 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} - smol-toml@1.3.0: - resolution: {integrity: sha512-tWpi2TsODPScmi48b/OQZGi2lgUmBCHy6SZrhi/FdnnHiU1GwebbCfuQuxsC3nHaLwtYeJGPrDZDIeodDOc4pA==} + smol-toml@1.3.1: + resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==} engines: {node: '>= 18'} snake-case@3.0.4: @@ -7991,8 +8218,8 @@ packages: resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} engines: {node: '>=10.2.0'} - sonner@1.7.0: - resolution: {integrity: sha512-W6dH7m5MujEPyug3lpI2l3TC3Pp1+LTgK0Efg+IHDrBbtEjyCmCHHo6yfNBOsf1tFZ6zf+jceWwB38baC8yO9g==} + sonner@1.7.1: + resolution: {integrity: sha512-b6LHBfH32SoVasRFECrdY8p8s7hXPDn3OHUFbZZbiB1ctLS9Gdh6rpX2dVrpQA0kiL5jcRzDDldwwLkSKk3+QQ==} peerDependencies: react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc @@ -8045,8 +8272,8 @@ packages: stacktrace-js@2.0.2: resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} - std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} steno@4.0.2: resolution: {integrity: sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==} @@ -8222,16 +8449,16 @@ packages: engines: {node: '>=12.17'} hasBin: true - tailwind-merge@2.5.4: - resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} + tailwind-merge@2.5.5: + resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.14: - resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} hasBin: true @@ -8290,9 +8517,6 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.0: - resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} - tinyexec@0.3.1: resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} @@ -8446,6 +8670,9 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + turndown@7.2.0: resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==} @@ -8491,14 +8718,8 @@ packages: typed.js@2.1.0: resolution: {integrity: sha512-bDuXEf7YcaKN4g08NMTUM6G90XU25CK3bh6U0THC/Mod/QPKlEt9g/EjvbYB8x2Qwr2p6J6I3NrsoYaVnY6wsQ==} - types-react-dom@19.0.0-rc.1: - resolution: {integrity: sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==} - - types-react@19.0.0-rc.1: - resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==} - - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true @@ -8531,10 +8752,17 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici@6.20.1: resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} engines: {node: '>=18.17'} + undici@7.2.0: + resolution: {integrity: sha512-klt+0S55GBViA9nsq48/NSCo4YX5mjydjypxD7UmHh/brMu8h/Mhd/F7qAeoH2NOO8SDTk6kjnTFc4WpzmfYpQ==} + engines: {node: '>=20.18.1'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -8587,14 +8815,14 @@ packages: vite: optional: true - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -8608,21 +8836,21 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - use-callback-ref@1.3.2: - resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': ^19.0.2 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - use-immer@0.10.0: - resolution: {integrity: sha512-/eVwNR4TG9Tm/dd+aHYLLaI0FLfYKlkTqKMkn78Ah/EYVzWd/zJIgpkdoFEKbhQJOGo8XN7/mWrTx0exp1c+Ug==} + use-immer@0.11.0: + resolution: {integrity: sha512-RNAqi3GqsWJ4bcCd4LMBgdzvPmTABam24DUaFiKfX9s3MSorNRz9RDZYJkllJoMHUxVLMDetwAuCDeyWNrp1yA==} peerDependencies: immer: '>=8.0.0' - react: ^16.8.0 || ^17.0.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 use-resize-observer@9.1.0: resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} @@ -8634,7 +8862,7 @@ packages: resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: '@types/react': @@ -8668,14 +8896,14 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vaul@1.1.1: - resolution: {integrity: sha512-+ejzF6ffQKPcfgS7uOrGn017g39F8SO4yLPXbBhpC7a0H+oPqPna8f1BUfXaz8eU4+pxbQcmjxW+jWBSbxjaFg==} + vaul@1.1.2: + resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - vectordb@0.12.0: - resolution: {integrity: sha512-Dp4hpP3DpDGzzV+1uYpH/6EI2hgcV+zyBLesKNwPdZct8kv8ZzCFTHhP/IARdfovoKB/8b4fczwfWKb1SIfCQw==} + vectordb@0.14.0: + resolution: {integrity: sha512-dYNxinFFxFuWwjKhwQhZrYvqsizLAehcLIzfZGtdCTCY8I6F2ORxY7cEOOWjud+6fpaWeA/tDk4dOoGZUip51A==} cpu: [x64, arm64] os: [darwin, linux, win32] peerDependencies: @@ -8691,18 +8919,18 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@2.1.4: - resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} + vite-node@2.1.8: + resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-plugin-pages@0.32.3: - resolution: {integrity: sha512-1vmKwc9e+lRBLkpTAMUNSVV3BglyE+DRa0iivpe6q3pbOCGkAHHSUp8f6yceXC8+lu/kFgH60vm5vK6IHyvdVw==} + vite-plugin-pages@0.32.4: + resolution: {integrity: sha512-OM8CNb8mAzyYR8ASRC0+2LXVB8ecR/5JHc5RpxbWtF+CmhjhmIELs0iV5y8qvU48soZbk+NsFOYlhoIcjw3+ew==} peerDependencies: '@solidjs/router': '*' '@vue/compiler-sfc': ^2.7.0 || ^3.0.0 react-router: '*' - vite: ^2.0.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0 + vite: ^2.0.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0 || ^6.0.0 vue-router: '*' peerDependenciesMeta: '@solidjs/router': @@ -8719,8 +8947,8 @@ packages: peerDependencies: vite: '>=2.6.0' - vite-tsconfig-paths@5.1.2: - resolution: {integrity: sha512-gEIbKfJzSEv0yR3XS2QEocKetONoWkbROj6hGx0FHM18qKUojhvcokQsxQx5nMkelZq2n37zbSGCJn+FSODSjA==} + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: vite: '*' peerDependenciesMeta: @@ -8786,6 +9014,46 @@ packages: terser: optional: true + vite@6.0.5: + resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitepress@1.3.2: resolution: {integrity: sha512-6gvecsCuR6b1Cid4w19KQiQ02qkpgzFRqiG0v1ZBekGkrZCzsxdDD5y4WH82HRXAOhU4iZIpzA1CsWqs719rqA==} hasBin: true @@ -8798,15 +9066,15 @@ packages: postcss: optional: true - vitest@2.1.4: - resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} + vitest@2.1.8: + resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.4 - '@vitest/ui': 2.1.4 + '@vitest/browser': 2.1.8 + '@vitest/ui': 2.1.8 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -8881,8 +9149,8 @@ packages: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} - web-tree-sitter@0.24.4: - resolution: {integrity: sha512-sETP1Sf9OTd4LusrKBNznNgTt3fWoWhJnAFaKPiGSeVKXJbZ72qoMpxddKMdVI5BgXv32OI7tkKQre5PmF9reA==} + web-tree-sitter@0.24.5: + resolution: {integrity: sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -9014,6 +9282,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -9053,6 +9326,11 @@ packages: peerDependencies: zod: ^3.22.4 + zod-to-json-schema@3.24.1: + resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} + peerDependencies: + zod: ^3.24.1 + zod-validation-error@3.3.0: resolution: {integrity: sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==} engines: {node: '>=18.0.0'} @@ -9062,11 +9340,14 @@ packages: zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - zustand@5.0.1: - resolution: {integrity: sha512-pRET7Lao2z+n5R/HduXMio35TncTlSW68WsYBq2Lg1ASspsNGjpwLAsij3RpouyV6+kHMwwwzP0bZPD70/Jx/w==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + + zustand@5.0.2: + resolution: {integrity: sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==} engines: {node: '>=12.20.0'} peerDependencies: - '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react': ^19.0.2 immer: '>=9.0.6' react: '>=18.0.0' use-sync-external-store: '>=1.2.0' @@ -9227,6 +9508,18 @@ snapshots: transitivePeerDependencies: - encoding + '@anthropic-ai/sdk@0.32.1': + dependencies: + '@types/node': 18.19.39 + '@types/node-fetch': 2.6.11 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + '@apache-arrow/ts@14.0.2': dependencies: '@types/command-line-args': 5.2.0 @@ -9350,42 +9643,22 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.24.7': {} - '@babel/compat-data@7.25.2': {} - '@babel/core@7.24.7': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/compat-data@7.26.3': {} '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 + '@babel/generator': 7.26.2 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.3 + '@babel/parser': 7.26.2 '@babel/template': 7.25.0 - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 debug: 4.3.6 gensync: 1.0.0-beta.2 @@ -9394,19 +9667,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.24.7': + '@babel/core@7.26.0': dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/generator@7.25.0': - dependencies: - '@babel/types': 7.25.2 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color '@babel/generator@7.26.2': dependencies: @@ -9418,20 +9697,12 @@ snapshots: '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.0 - '@babel/helper-compilation-targets@7.24.7': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.25.2': dependencies: '@babel/compat-data': 7.25.2 @@ -9440,6 +9711,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.3 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -9470,21 +9749,17 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@babel/helper-function-name@7.24.7': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.25.2 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.25.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -9497,19 +9772,15 @@ snapshots: '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -9518,14 +9789,23 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.3 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@babel/helper-optimise-call-expression@7.25.9': dependencies: @@ -9555,15 +9835,15 @@ snapshots: '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -9576,51 +9856,49 @@ snapshots: '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.25.2 - - '@babel/helper-string-parser@7.24.7': {} - - '@babel/helper-string-parser@7.24.8': {} + '@babel/types': 7.26.0 '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.24.7': {} - '@babel/helper-validator-option@7.24.8': {} - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.25.2 + '@babel/helper-validator-option@7.25.9': {} '@babel/helpers@7.25.0': dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@babel/parser@7.25.3': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@babel/parser@7.26.2': dependencies: '@babel/types': 7.26.0 + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -9629,41 +9907,33 @@ snapshots: '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-simple-access': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -9683,17 +9953,11 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.25.2 - '@babel/template@7.25.0': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@babel/template@7.25.9': dependencies: @@ -9701,33 +9965,6 @@ snapshots: '@babel/parser': 7.26.2 '@babel/types': 7.26.0 - '@babel/traverse@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.25.3': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.3 - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - debug: 4.3.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.25.9': dependencies: '@babel/code-frame': 7.26.2 @@ -9740,24 +9977,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.24.7': + '@babel/types@7.26.0': dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@braintree/sanitize-url@7.1.0': {} - '@babel/types@7.25.2': + '@browserbasehq/sdk@2.0.0': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@types/node': 18.19.39 + '@types/node-fetch': 2.6.11 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding - '@babel/types@7.26.0': + '@browserbasehq/stagehand@1.7.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.5)(openai@4.77.0(zod@3.24.1))(zod@3.24.1)': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@anthropic-ai/sdk': 0.27.3 + '@browserbasehq/sdk': 2.0.0 + '@playwright/test': 1.49.1 + deepmerge: 4.3.1 + dotenv: 16.4.5 + openai: 4.77.0(zod@3.24.1) + sharp: 0.33.5 + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) + transitivePeerDependencies: + - encoding - '@braintree/sanitize-url@7.1.0': {} + '@cfworker/json-schema@4.0.3': {} '@chevrotain/cst-dts-gen@11.0.3': dependencies: @@ -9776,20 +10029,20 @@ snapshots: '@chevrotain/utils@11.0.3': {} - '@commitlint/cli@19.5.0(@types/node@22.9.0)(typescript@5.4.5)': + '@commitlint/cli@19.6.1(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@commitlint/format': 19.5.0 - '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@22.9.0)(typescript@5.4.5) + '@commitlint/lint': 19.6.0 + '@commitlint/load': 19.6.1(@types/node@22.10.2)(typescript@5.7.2) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 - tinyexec: 0.3.0 + tinyexec: 0.3.1 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/config-conventional@19.5.0': + '@commitlint/config-conventional@19.6.0': dependencies: '@commitlint/types': 19.5.0 conventional-changelog-conventionalcommits: 7.0.2 @@ -9799,13 +10052,13 @@ snapshots: '@commitlint/types': 19.5.0 ajv: 8.16.0 - '@commitlint/cz-commitlint@19.5.0(@types/node@22.9.0)(commitizen@4.3.1(@types/node@22.9.0)(typescript@5.4.5))(inquirer@9.3.4)(typescript@5.4.5)': + '@commitlint/cz-commitlint@19.6.1(@types/node@22.10.2)(commitizen@4.3.1(@types/node@22.10.2)(typescript@5.7.2))(inquirer@9.3.4)(typescript@5.7.2)': dependencies: '@commitlint/ensure': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@22.9.0)(typescript@5.4.5) + '@commitlint/load': 19.6.1(@types/node@22.10.2)(typescript@5.7.2) '@commitlint/types': 19.5.0 - chalk: 5.3.0 - commitizen: 4.3.1(@types/node@22.9.0)(typescript@5.4.5) + chalk: 5.4.1 + commitizen: 4.3.1(@types/node@22.10.2)(typescript@5.7.2) inquirer: 9.3.4 lodash.isplainobject: 4.0.6 word-wrap: 1.2.5 @@ -9827,29 +10080,46 @@ snapshots: '@commitlint/format@19.5.0': dependencies: '@commitlint/types': 19.5.0 - chalk: 5.3.0 + chalk: 5.4.1 - '@commitlint/is-ignored@19.5.0': + '@commitlint/is-ignored@19.6.0': dependencies: '@commitlint/types': 19.5.0 semver: 7.6.3 - '@commitlint/lint@19.5.0': + '@commitlint/lint@19.6.0': dependencies: - '@commitlint/is-ignored': 19.5.0 + '@commitlint/is-ignored': 19.6.0 '@commitlint/parse': 19.5.0 - '@commitlint/rules': 19.5.0 + '@commitlint/rules': 19.6.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@22.9.0)(typescript@5.4.5)': + '@commitlint/load@19.5.0(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 '@commitlint/resolve-extends': 19.5.0 '@commitlint/types': 19.5.0 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.4.5) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5) + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + optional: true + + '@commitlint/load@19.6.1(@types/node@22.10.2)(typescript@5.7.2)': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -9871,7 +10141,7 @@ snapshots: '@commitlint/types': 19.5.0 git-raw-commits: 4.0.0 minimist: 1.2.8 - tinyexec: 0.3.0 + tinyexec: 0.3.1 '@commitlint/resolve-extends@19.5.0': dependencies: @@ -9882,7 +10152,7 @@ snapshots: lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.5.0': + '@commitlint/rules@19.6.0': dependencies: '@commitlint/ensure': 19.5.0 '@commitlint/message': 19.5.0 @@ -9898,9 +10168,9 @@ snapshots: '@commitlint/types@19.5.0': dependencies: '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 + chalk: 5.4.1 - '@cyntler/react-doc-viewer@1.17.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@cyntler/react-doc-viewer@1.17.0(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@types/mustache': 4.2.5 '@types/papaparse': 5.3.15 @@ -9908,45 +10178,45 @@ snapshots: core-js: 3.37.1 mustache: 4.2.0 papaparse: 5.4.1 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-pdf: 9.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - styled-components: 6.1.13(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-pdf: 9.1.1(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + styled-components: 6.1.13(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@types/react' - encoding - supports-color - '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-ed15d500-20241110)': + '@dnd-kit/accessibility@3.1.1(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 tslib: 2.6.2 - '@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)': + '@dnd-kit/core@6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-ed15d500-20241110) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-ed15d500-20241110) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@dnd-kit/accessibility': 3.1.1(react@19.0.0) + '@dnd-kit/utilities': 3.2.2(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) tslib: 2.6.2 - '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)': + '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': dependencies: - '@dnd-kit/core': 6.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-ed15d500-20241110) - react: 19.0.0-rc-ed15d500-20241110 + '@dnd-kit/core': 6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@dnd-kit/utilities': 3.2.2(react@19.0.0) + react: 19.0.0 tslib: 2.6.2 - '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-ed15d500-20241110)': + '@dnd-kit/utilities@3.2.2(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 tslib: 2.6.2 '@docsearch/css@3.6.1': {} - '@docsearch/js@3.6.1(@algolia/client-search@4.24.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)': + '@docsearch/js@3.6.1(@algolia/client-search@4.24.0)(@types/react@19.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)': dependencies: - '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1) + '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(@types/react@19.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0) preact: 10.22.1 transitivePeerDependencies: - '@algolia/client-search' @@ -9955,20 +10225,25 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.6.1(@algolia/client-search@4.24.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)': + '@docsearch/react@3.6.1(@algolia/client-search@4.24.0)(@types/react@19.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)': dependencies: '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.15.0) '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) '@docsearch/css': 3.6.1 algoliasearch: 4.24.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) search-insights: 2.15.0 transitivePeerDependencies: - '@algolia/client-search' + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.6.2 + optional: true + '@emotion/is-prop-valid@1.2.2': dependencies: '@emotion/memoize': 0.8.1 @@ -10288,17 +10563,17 @@ snapshots: '@floating-ui/core': 1.6.7 '@floating-ui/utils': 0.2.7 - '@floating-ui/react-dom@2.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)': + '@floating-ui/react-dom@2.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@floating-ui/dom': 1.6.10 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) '@floating-ui/utils@0.2.7': {} - '@hookform/resolvers@3.9.1(react-hook-form@7.53.2(react@19.0.0-rc-ed15d500-20241110))': + '@hookform/resolvers@3.9.1(react-hook-form@7.54.2(react@19.0.0))': dependencies: - react-hook-form: 7.53.2(react@19.0.0-rc-ed15d500-20241110) + react-hook-form: 7.54.2(react@19.0.0) '@huggingface/jinja@0.2.2': {} @@ -10314,15 +10589,14 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@ianvs/prettier-plugin-sort-imports@4.3.1(@vue/compiler-sfc@3.4.36)(prettier@3.3.3)': + '@ianvs/prettier-plugin-sort-imports@4.4.0(@vue/compiler-sfc@3.4.36)(prettier@3.4.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - prettier: 3.3.3 - semver: 7.6.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + prettier: 3.4.2 + semver: 7.6.3 optionalDependencies: '@vue/compiler-sfc': 3.4.36 transitivePeerDependencies: @@ -10382,6 +10656,81 @@ snapshots: transitivePeerDependencies: - supports-color + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@inquirer/figures@1.0.3': {} '@isaacs/cliui@8.0.2': @@ -10396,79 +10745,89 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.1': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@juggle/resize-observer@3.4.0': {} '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color '@kwsites/promise-deferred@1.1.1': {} - '@lancedb/vectordb-darwin-arm64@0.12.0': + '@lancedb/vectordb-darwin-arm64@0.14.0': + optional: true + + '@lancedb/vectordb-darwin-x64@0.14.0': optional: true - '@lancedb/vectordb-darwin-x64@0.12.0': + '@lancedb/vectordb-linux-arm64-gnu@0.14.0': optional: true - '@lancedb/vectordb-linux-arm64-gnu@0.12.0': + '@lancedb/vectordb-linux-arm64-musl@0.14.0': optional: true - '@lancedb/vectordb-linux-x64-gnu@0.12.0': + '@lancedb/vectordb-linux-x64-gnu@0.14.0': optional: true - '@lancedb/vectordb-win32-x64-msvc@0.12.0': + '@lancedb/vectordb-linux-x64-musl@0.14.0': optional: true - '@langchain/anthropic@0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))': + '@lancedb/vectordb-win32-arm64-msvc@0.14.0': + optional: true + + '@lancedb/vectordb-win32-x64-msvc@0.14.0': + optional: true + + '@langchain/anthropic@0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))': dependencies: - '@anthropic-ai/sdk': 0.27.3 - '@langchain/core': 0.3.18(openai@4.72.0(zod@3.23.8)) + '@anthropic-ai/sdk': 0.32.1 + '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) fast-xml-parser: 4.4.1 - zod: 3.23.8 - zod-to-json-schema: 3.22.5(zod@3.23.8) + zod: 3.24.1 + zod-to-json-schema: 3.22.5(zod@3.24.1) transitivePeerDependencies: - encoding - '@langchain/community@0.3.14(@ibm-cloud/watsonx-ai@1.1.1)(@langchain/anthropic@0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))))(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))(@xenova/transformers@2.17.2)(axios@1.7.4)(cheerio@1.0.0)(ibm-cloud-sdk-core@5.1.0)(ignore@6.0.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.72.0(zod@3.23.8))(vectordb@0.12.0(@apache-arrow/ts@14.0.2)(apache-arrow@18.0.0))(ws@8.18.0)': + '@langchain/community@0.3.19(@browserbasehq/sdk@2.0.0)(@browserbasehq/stagehand@1.7.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.5)(openai@4.77.0(zod@3.24.1))(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.1.1)(@langchain/anthropic@0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(@xenova/transformers@2.17.2)(axios@1.7.4)(cheerio@1.0.0)(ibm-cloud-sdk-core@5.1.0)(ignore@6.0.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.77.0(zod@3.24.1))(playwright@1.49.1)(ws@8.18.0)': dependencies: + '@browserbasehq/stagehand': 1.7.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.5)(openai@4.77.0(zod@3.24.1))(zod@3.24.1) '@ibm-cloud/watsonx-ai': 1.1.1 - '@langchain/core': 0.3.18(openai@4.72.0(zod@3.23.8)) - '@langchain/openai': 0.3.13(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) + '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) + '@langchain/openai': 0.3.16(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) binary-extensions: 2.2.0 expr-eval: 2.0.2 flat: 5.0.2 ibm-cloud-sdk-core: 5.1.0 js-yaml: 4.1.0 - langchain: 0.3.5(@langchain/anthropic@0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))))(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))(axios@1.7.4)(cheerio@1.0.0)(openai@4.72.0(zod@3.23.8)) - langsmith: 0.2.3(openai@4.72.0(zod@3.23.8)) + langchain: 0.3.7(@langchain/anthropic@0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(axios@1.7.4)(cheerio@1.0.0)(openai@4.77.0(zod@3.24.1)) + langsmith: 0.2.13(openai@4.77.0(zod@3.24.1)) + openai: 4.77.0(zod@3.24.1) uuid: 10.0.0 - zod: 3.23.8 - zod-to-json-schema: 3.22.5(zod@3.23.8) + zod: 3.24.1 + zod-to-json-schema: 3.22.5(zod@3.24.1) optionalDependencies: + '@browserbasehq/sdk': 2.0.0 '@xenova/transformers': 2.17.2 cheerio: 1.0.0 ignore: 6.0.2 jsonwebtoken: 9.0.2 lodash: 4.17.21 - vectordb: 0.12.0(@apache-arrow/ts@14.0.2)(apache-arrow@18.0.0) + playwright: 1.49.1 ws: 8.18.0 transitivePeerDependencies: - '@langchain/anthropic' @@ -10482,28 +10841,28 @@ snapshots: - axios - encoding - handlebars - - openai - peggy - '@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))': + '@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))': dependencies: + '@cfworker/json-schema': 4.0.3 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 - js-tiktoken: 1.0.15 - langsmith: 0.2.3(openai@4.72.0(zod@3.23.8)) + js-tiktoken: 1.0.16 + langsmith: 0.2.13(openai@4.77.0(zod@3.24.1)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 10.0.0 - zod: 3.23.8 - zod-to-json-schema: 3.22.5(zod@3.23.8) + zod: 3.24.1 + zod-to-json-schema: 3.22.5(zod@3.24.1) transitivePeerDependencies: - openai - '@langchain/langgraph-checkpoint@0.0.10(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))': + '@langchain/langgraph-checkpoint@0.0.13(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.18(openai@4.72.0(zod@3.23.8)) + '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) uuid: 10.0.0 '@langchain/langgraph-sdk@0.0.23': @@ -10513,174 +10872,174 @@ snapshots: p-retry: 4.6.2 uuid: 9.0.1 - '@langchain/langgraph@0.2.20(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))': + '@langchain/langgraph@0.2.34(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.18(openai@4.72.0(zod@3.23.8)) - '@langchain/langgraph-checkpoint': 0.0.10(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) + '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) + '@langchain/langgraph-checkpoint': 0.0.13(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) '@langchain/langgraph-sdk': 0.0.23 uuid: 10.0.0 - zod: 3.23.8 + zod: 3.24.1 - '@langchain/openai@0.3.13(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))': + '@langchain/openai@0.3.16(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.18(openai@4.72.0(zod@3.23.8)) - js-tiktoken: 1.0.15 - openai: 4.72.0(zod@3.23.8) - zod: 3.23.8 - zod-to-json-schema: 3.22.5(zod@3.23.8) + '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) + js-tiktoken: 1.0.16 + openai: 4.77.0(zod@3.24.1) + zod: 3.24.1 + zod-to-json-schema: 3.22.5(zod@3.24.1) transitivePeerDependencies: - encoding - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))': + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))': dependencies: - '@langchain/core': 0.3.18(openai@4.72.0(zod@3.23.8)) - js-tiktoken: 1.0.15 + '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) + js-tiktoken: 1.0.16 - '@lexical/clipboard@0.20.0': + '@lexical/clipboard@0.21.0': dependencies: - '@lexical/html': 0.20.0 - '@lexical/list': 0.20.0 - '@lexical/selection': 0.20.0 - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/html': 0.21.0 + '@lexical/list': 0.21.0 + '@lexical/selection': 0.21.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/code@0.20.0': + '@lexical/code@0.21.0': dependencies: - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 prismjs: 1.29.0 - '@lexical/devtools-core@0.20.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)': + '@lexical/devtools-core@0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@lexical/html': 0.20.0 - '@lexical/link': 0.20.0 - '@lexical/mark': 0.20.0 - '@lexical/table': 0.20.0 - '@lexical/utils': 0.20.0 - lexical: 0.20.0 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@lexical/html': 0.21.0 + '@lexical/link': 0.21.0 + '@lexical/mark': 0.21.0 + '@lexical/table': 0.21.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@lexical/dragon@0.20.0': + '@lexical/dragon@0.21.0': dependencies: - lexical: 0.20.0 + lexical: 0.21.0 - '@lexical/hashtag@0.20.0': + '@lexical/hashtag@0.21.0': dependencies: - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/history@0.20.0': + '@lexical/history@0.21.0': dependencies: - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/html@0.20.0': + '@lexical/html@0.21.0': dependencies: - '@lexical/selection': 0.20.0 - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/selection': 0.21.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/link@0.20.0': + '@lexical/link@0.21.0': dependencies: - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/list@0.20.0': + '@lexical/list@0.21.0': dependencies: - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/mark@0.20.0': + '@lexical/mark@0.21.0': dependencies: - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/markdown@0.20.0': + '@lexical/markdown@0.21.0': dependencies: - '@lexical/code': 0.20.0 - '@lexical/link': 0.20.0 - '@lexical/list': 0.20.0 - '@lexical/rich-text': 0.20.0 - '@lexical/text': 0.20.0 - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/code': 0.21.0 + '@lexical/link': 0.21.0 + '@lexical/list': 0.21.0 + '@lexical/rich-text': 0.21.0 + '@lexical/text': 0.21.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/offset@0.20.0': + '@lexical/offset@0.21.0': dependencies: - lexical: 0.20.0 + lexical: 0.21.0 - '@lexical/overflow@0.20.0': + '@lexical/overflow@0.21.0': dependencies: - lexical: 0.20.0 + lexical: 0.21.0 - '@lexical/plain-text@0.20.0': + '@lexical/plain-text@0.21.0': dependencies: - '@lexical/clipboard': 0.20.0 - '@lexical/selection': 0.20.0 - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/clipboard': 0.21.0 + '@lexical/selection': 0.21.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/react@0.20.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(yjs@13.6.18)': + '@lexical/react@0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.18)': dependencies: - '@lexical/clipboard': 0.20.0 - '@lexical/code': 0.20.0 - '@lexical/devtools-core': 0.20.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) - '@lexical/dragon': 0.20.0 - '@lexical/hashtag': 0.20.0 - '@lexical/history': 0.20.0 - '@lexical/link': 0.20.0 - '@lexical/list': 0.20.0 - '@lexical/mark': 0.20.0 - '@lexical/markdown': 0.20.0 - '@lexical/overflow': 0.20.0 - '@lexical/plain-text': 0.20.0 - '@lexical/rich-text': 0.20.0 - '@lexical/selection': 0.20.0 - '@lexical/table': 0.20.0 - '@lexical/text': 0.20.0 - '@lexical/utils': 0.20.0 - '@lexical/yjs': 0.20.0(yjs@13.6.18) - lexical: 0.20.0 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-error-boundary: 3.1.4(react@19.0.0-rc-ed15d500-20241110) + '@lexical/clipboard': 0.21.0 + '@lexical/code': 0.21.0 + '@lexical/devtools-core': 0.21.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@lexical/dragon': 0.21.0 + '@lexical/hashtag': 0.21.0 + '@lexical/history': 0.21.0 + '@lexical/link': 0.21.0 + '@lexical/list': 0.21.0 + '@lexical/mark': 0.21.0 + '@lexical/markdown': 0.21.0 + '@lexical/overflow': 0.21.0 + '@lexical/plain-text': 0.21.0 + '@lexical/rich-text': 0.21.0 + '@lexical/selection': 0.21.0 + '@lexical/table': 0.21.0 + '@lexical/text': 0.21.0 + '@lexical/utils': 0.21.0 + '@lexical/yjs': 0.21.0(yjs@13.6.18) + lexical: 0.21.0 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-error-boundary: 3.1.4(react@19.0.0) transitivePeerDependencies: - yjs - '@lexical/rich-text@0.20.0': + '@lexical/rich-text@0.21.0': dependencies: - '@lexical/clipboard': 0.20.0 - '@lexical/selection': 0.20.0 - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/clipboard': 0.21.0 + '@lexical/selection': 0.21.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/selection@0.20.0': + '@lexical/selection@0.21.0': dependencies: - lexical: 0.20.0 + lexical: 0.21.0 - '@lexical/table@0.20.0': + '@lexical/table@0.21.0': dependencies: - '@lexical/clipboard': 0.20.0 - '@lexical/utils': 0.20.0 - lexical: 0.20.0 + '@lexical/clipboard': 0.21.0 + '@lexical/utils': 0.21.0 + lexical: 0.21.0 - '@lexical/text@0.20.0': + '@lexical/text@0.21.0': dependencies: - lexical: 0.20.0 + lexical: 0.21.0 - '@lexical/utils@0.20.0': + '@lexical/utils@0.21.0': dependencies: - '@lexical/list': 0.20.0 - '@lexical/selection': 0.20.0 - '@lexical/table': 0.20.0 - lexical: 0.20.0 + '@lexical/list': 0.21.0 + '@lexical/selection': 0.21.0 + '@lexical/table': 0.21.0 + lexical: 0.21.0 - '@lexical/yjs@0.20.0(yjs@13.6.18)': + '@lexical/yjs@0.21.0(yjs@13.6.18)': dependencies: - '@lexical/offset': 0.20.0 - '@lexical/selection': 0.20.0 - lexical: 0.20.0 + '@lexical/offset': 0.21.0 + '@lexical/selection': 0.21.0 + lexical: 0.21.0 yjs: 13.6.18 '@mapbox/node-pre-gyp@1.0.11': @@ -10723,12 +11082,12 @@ snapshots: dependencies: markdown-it: 14.1.0 - '@nolebase/ui@2.4.0(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5)': + '@nolebase/ui@2.4.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2)': dependencies: '@iconify-json/octicon': 1.1.56 less: 4.2.0 - vitepress: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5) - vue: 3.4.36(typescript@5.4.5) + vitepress: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2) + vue: 3.4.36(typescript@5.7.2) transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -10757,17 +11116,17 @@ snapshots: - typescript - universal-cookie - '@nolebase/vitepress-plugin-inline-link-preview@2.4.0(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5)': + '@nolebase/vitepress-plugin-inline-link-preview@2.4.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2)': dependencies: '@iconify-json/icon-park-outline': 1.1.15 '@iconify-json/octicon': 1.1.56 '@iconify-json/svg-spinners': 1.1.2 '@nolebase/markdown-it-element-transform': 2.4.0(markdown-it@14.1.0) - '@nolebase/ui': 2.4.0(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5) + '@nolebase/ui': 2.4.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2) less: 4.2.0 markdown-it: 14.1.0 markdown-it-attrs: 4.1.6(markdown-it@14.1.0) - vitepress: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5) + vitepress: 1.3.2(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2) transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -10803,6 +11162,10 @@ snapshots: '@pkgr/core@0.1.1': {} + '@playwright/test@1.49.1': + dependencies: + playwright: 1.49.1 + '@polka/url@1.0.0-next.25': {} '@protobufjs/aspromise@1.1.2': {} @@ -10830,575 +11193,589 @@ snapshots: '@radix-ui/number@1.1.0': {} - '@radix-ui/primitive@1.1.0': {} - - '@radix-ui/react-accordion@1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collapsible': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/primitive@1.1.1': {} + + '@radix-ui/react-accordion@1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collapsible': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-alert-dialog@1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-dialog': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-alert-dialog@1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-arrow@1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-checkbox@1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-previous': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-size': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-checkbox@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-collapsible@1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-collapsible@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-collection@1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-compose-refs@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - - '@radix-ui/react-context-menu@2.2.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-menu': 2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-context@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.2 + + '@radix-ui/react-context-menu@2.2.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-menu': 2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-context@1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-context@1.1.1(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - - '@radix-ui/react-dialog@1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-guards': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-portal': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + '@types/react': 19.0.2 + + '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) aria-hidden: 1.2.4 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-remove-scroll: 2.6.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.2(@types/react@19.0.2)(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-direction@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-direction@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-dismissable-layer@1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-dropdown-menu@2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-menu': 2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-dropdown-menu@2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-menu': 2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-focus-guards@1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-focus-scope@1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-hover-card@1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-portal': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-hover-card@1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-icons@1.3.1(react@19.0.0-rc-ed15d500-20241110)': + '@radix-ui/react-icons@1.3.2(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 - '@radix-ui/react-id@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-id@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-label@2.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-label@2.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-menu@2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-guards': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-portal': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-roving-focus': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-menu@2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) aria-hidden: 1.2.4 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-remove-scroll: 2.6.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.2(@types/react@19.0.2)(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-menubar@1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-menu': 2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-roving-focus': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-menubar@1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-menu': 2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-popover@1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-guards': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-portal': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-popover@1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) aria-hidden: 1.2.4 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-remove-scroll: 2.6.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.2(@types/react@19.0.2)(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-popper@1.2.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@floating-ui/react-dom': 2.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) - '@radix-ui/react-arrow': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-rect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-size': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-popper@1.2.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/react-dom': 2.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.2)(react@19.0.0) '@radix-ui/rect': 1.1.0 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-portal@1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-presence@1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-slot': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-primitive@2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-progress@1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-progress@1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-radio-group@1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-roving-focus': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-previous': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-size': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-radio-group@1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-roving-focus@1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-scroll-area@1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-scroll-area@1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-select@2.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-select@2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-guards': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-focus-scope': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-portal': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-previous': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-visually-hidden': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) aria-hidden: 1.2.4 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-remove-scroll: 2.6.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-remove-scroll: 2.6.2(@types/react@19.0.2)(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-slider@1.2.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-slider@1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-previous': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-size': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-slot@1.1.0(@types/react@19.0.2)(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-slot@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-slot@1.1.1(@types/react@19.0.2)(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - - '@radix-ui/react-switch@1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-previous': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-size': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + + '@radix-ui/react-switch@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-tabs@1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-direction': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-roving-focus': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-tabs@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 - - '@radix-ui/react-tooltip@1.1.4(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-context': 1.1.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-dismissable-layer': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-popper': 1.2.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-portal': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-presence': 1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-slot': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-use-controllable-state': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-visually-hidden': 1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) + + '@radix-ui/react-tooltip@1.1.6(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@radix-ui/react-use-callback-ref@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-use-controllable-state@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-use-escape-keydown@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-use-layout-effect@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-use-previous@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-previous@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-use-rect@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: '@radix-ui/rect': 1.1.0 - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-use-size@1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.0.2)(react@19.0.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - '@radix-ui/react-visually-hidden@1.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@radix-ui/react-visually-hidden@1.1.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) '@radix-ui/rect@1.1.0': {} - '@remix-run/router@1.21.0': {} - '@rollup/pluginutils@5.1.0(rollup@4.24.3)': dependencies: '@types/estree': 1.0.5 @@ -11525,36 +11902,36 @@ snapshots: dependencies: '@types/hast': 3.0.4 - '@shikijs/core@1.22.2': + '@shikijs/core@1.24.4': dependencies: - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/engine-javascript': 1.24.4 + '@shikijs/engine-oniguruma': 1.24.4 + '@shikijs/types': 1.24.4 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.22.2': + '@shikijs/engine-javascript@1.24.4': dependencies: - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-js: 0.4.3 + '@shikijs/types': 1.24.4 + '@shikijs/vscode-textmate': 9.3.1 + oniguruma-to-es: 0.8.1 - '@shikijs/engine-oniguruma@1.22.2': + '@shikijs/engine-oniguruma@1.24.4': dependencies: - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.24.4 + '@shikijs/vscode-textmate': 9.3.1 '@shikijs/transformers@1.10.3': dependencies: - shiki: 1.22.2 + shiki: 1.24.4 - '@shikijs/types@1.22.2': + '@shikijs/types@1.24.4': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.0': {} + '@shikijs/vscode-textmate@9.3.1': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -11610,12 +11987,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.25.2) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.25.2) - '@svgr/core@8.1.0(typescript@5.4.5)': + '@svgr/core@8.1.0(typescript@5.7.2)': dependencies: '@babel/core': 7.25.2 '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.7.2) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -11623,14 +12000,14 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.4.5))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.7.2))': dependencies: '@babel/core': 7.25.2 '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) - '@svgr/core': 8.1.0(typescript@5.4.5) + '@svgr/core': 8.1.0(typescript@5.7.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: @@ -11695,18 +12072,18 @@ snapshots: '@swc/counter': 0.1.3 optional: true - '@tanstack/query-core@5.59.20': {} + '@tanstack/query-core@5.62.8': {} - '@tanstack/react-query@5.59.20(react@19.0.0-rc-ed15d500-20241110)': + '@tanstack/react-query@5.62.8(react@19.0.0)': dependencies: - '@tanstack/query-core': 5.59.20 - react: 19.0.0-rc-ed15d500-20241110 + '@tanstack/query-core': 5.62.8 + react: 19.0.0 '@tokenizer/token@0.3.0': {} '@tomjs/node@2.2.3': {} - '@tomjs/vite-plugin-vscode@3.1.1(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.4.5)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0))': + '@tomjs/vite-plugin-vscode@3.2.1(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1))': dependencies: '@tomjs/node': 2.2.3 dayjs: 1.11.12 @@ -11715,8 +12092,8 @@ snapshots: lodash.clonedeep: 4.5.0 lodash.merge: 4.6.2 node-html-parser: 6.1.13 - tsup: 7.2.0(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.4.5) - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) + tsup: 7.2.0(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.7.2) + vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1) transitivePeerDependencies: - '@swc/core' - postcss @@ -11726,24 +12103,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 '@types/command-line-args@5.2.0': {} @@ -11755,13 +12132,15 @@ snapshots: '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 '@types/cookie@0.4.1': {} + '@types/cookie@0.6.0': {} + '@types/cors@2.8.17': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 '@types/d3-array@3.2.1': {} @@ -11886,10 +12265,6 @@ snapshots: '@types/diff@6.0.0': {} - '@types/dompurify@3.0.5': - dependencies: - '@types/trusted-types': 2.0.7 - '@types/eslint@8.56.10': dependencies: '@types/estree': 1.0.6 @@ -11907,7 +12282,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.9.0 + '@types/node': 22.10.2 '@types/geojson@7946.0.14': {} @@ -11925,7 +12300,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 '@types/katex@0.16.7': {} @@ -11950,7 +12325,7 @@ snapshots: '@types/node-fetch@2.6.11': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 form-data: 4.0.0 '@types/node@10.14.22': {} @@ -11965,15 +12340,23 @@ snapshots: '@types/node@20.3.0': {} - '@types/node@22.9.0': + '@types/node@22.10.2': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 '@types/pad-left@2.1.1': {} '@types/papaparse@5.3.15': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 + + '@types/react-dom@19.0.2(@types/react@19.0.2)': + dependencies: + '@types/react': 19.0.2 + + '@types/react@19.0.2': + dependencies: + csstype: 3.1.3 '@types/retry@0.12.0': {} @@ -11983,7 +12366,8 @@ snapshots: '@types/tough-cookie@4.0.5': {} - '@types/trusted-types@2.0.7': {} + '@types/trusted-types@2.0.7': + optional: true '@types/turndown@5.0.5': {} @@ -11999,34 +12383,34 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.7.2) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.7.2) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.4.5) + ts-api-utils: 1.3.0(typescript@5.7.2) optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.6 eslint: 8.57.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 transitivePeerDependencies: - supports-color @@ -12035,21 +12419,21 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.7.2) debug: 4.3.6 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) + ts-api-utils: 1.3.0(typescript@5.7.2) optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.2)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -12057,19 +12441,19 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.7.2) optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -12082,13 +12466,13 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unocss/astro@0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.9.0)(less@4.2.0))': + '@unocss/astro@0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.10.2)(less@4.2.0))': dependencies: '@unocss/core': 0.61.9 '@unocss/reset': 0.61.9 - '@unocss/vite': 0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.9.0)(less@4.2.0)) + '@unocss/vite': 0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.10.2)(less@4.2.0)) optionalDependencies: - vite: 5.3.5(@types/node@22.9.0)(less@4.2.0) + vite: 5.3.5(@types/node@22.10.2)(less@4.2.0) transitivePeerDependencies: - rollup - supports-color @@ -12225,7 +12609,7 @@ snapshots: dependencies: '@unocss/core': 0.61.9 - '@unocss/vite@0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.9.0)(less@4.2.0))': + '@unocss/vite@0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.10.2)(less@4.2.0))': dependencies: '@ampproject/remapping': 2.3.0 '@rollup/pluginutils': 5.1.0(rollup@4.24.3) @@ -12237,64 +12621,64 @@ snapshots: chokidar: 3.6.0 fast-glob: 3.3.2 magic-string: 0.30.11 - vite: 5.3.5(@types/node@22.9.0)(less@4.2.0) + vite: 5.3.5(@types/node@22.10.2)(less@4.2.0) transitivePeerDependencies: - rollup - supports-color - '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.9.0)(less@4.2.0))': + '@vitejs/plugin-react@4.3.4(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1))': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) + vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.0.5(vite@5.3.5(@types/node@22.9.0)(less@4.2.0))(vue@3.4.36(typescript@5.4.5))': + '@vitejs/plugin-vue@5.0.5(vite@5.3.5(@types/node@22.10.2)(less@4.2.0))(vue@3.4.36(typescript@5.7.2))': dependencies: - vite: 5.3.5(@types/node@22.9.0)(less@4.2.0) - vue: 3.4.36(typescript@5.4.5) + vite: 5.3.5(@types/node@22.10.2)(less@4.2.0) + vue: 3.4.36(typescript@5.7.2) - '@vitest/expect@2.1.4': + '@vitest/expect@2.1.8': dependencies: - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + '@vitest/spy': 2.1.8 + '@vitest/utils': 2.1.8 chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.4(vite@5.4.11(@types/node@22.9.0)(less@4.2.0))': + '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.2)(less@4.2.0))': dependencies: - '@vitest/spy': 2.1.4 + '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) + vite: 5.4.11(@types/node@22.10.2)(less@4.2.0) - '@vitest/pretty-format@2.1.4': + '@vitest/pretty-format@2.1.8': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.4': + '@vitest/runner@2.1.8': dependencies: - '@vitest/utils': 2.1.4 + '@vitest/utils': 2.1.8 pathe: 1.1.2 - '@vitest/snapshot@2.1.4': + '@vitest/snapshot@2.1.8': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.8 magic-string: 0.30.12 pathe: 1.1.2 - '@vitest/spy@2.1.4': + '@vitest/spy@2.1.8': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.4': + '@vitest/utils@2.1.8': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.8 loupe: 3.1.2 tinyrainbow: 1.2.0 @@ -12370,7 +12754,7 @@ snapshots: '@vue/compiler-core@3.4.36': dependencies: - '@babel/parser': 7.25.3 + '@babel/parser': 7.26.2 '@vue/shared': 3.4.36 entities: 5.0.0 estree-walker: 2.0.2 @@ -12432,31 +12816,31 @@ snapshots: '@vue/shared': 3.4.36 csstype: 3.1.3 - '@vue/server-renderer@3.4.36(vue@3.4.36(typescript@5.4.5))': + '@vue/server-renderer@3.4.36(vue@3.4.36(typescript@5.7.2))': dependencies: '@vue/compiler-ssr': 3.4.36 '@vue/shared': 3.4.36 - vue: 3.4.36(typescript@5.4.5) + vue: 3.4.36(typescript@5.7.2) '@vue/shared@3.4.35': {} '@vue/shared@3.4.36': {} - '@vueuse/core@10.11.0(vue@3.4.36(typescript@5.4.5))': + '@vueuse/core@10.11.0(vue@3.4.36(typescript@5.7.2))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.0 - '@vueuse/shared': 10.11.0(vue@3.4.36(typescript@5.4.5)) - vue-demi: 0.14.8(vue@3.4.36(typescript@5.4.5)) + '@vueuse/shared': 10.11.0(vue@3.4.36(typescript@5.7.2)) + vue-demi: 0.14.8(vue@3.4.36(typescript@5.7.2)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.4.36(typescript@5.4.5))': + '@vueuse/integrations@10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.4.36(typescript@5.7.2))': dependencies: - '@vueuse/core': 10.11.0(vue@3.4.36(typescript@5.4.5)) - '@vueuse/shared': 10.11.0(vue@3.4.36(typescript@5.4.5)) - vue-demi: 0.14.8(vue@3.4.36(typescript@5.4.5)) + '@vueuse/core': 10.11.0(vue@3.4.36(typescript@5.7.2)) + '@vueuse/shared': 10.11.0(vue@3.4.36(typescript@5.7.2)) + vue-demi: 0.14.8(vue@3.4.36(typescript@5.7.2)) optionalDependencies: axios: 1.7.7 focus-trap: 7.5.4 @@ -12466,9 +12850,9 @@ snapshots: '@vueuse/metadata@10.11.0': {} - '@vueuse/shared@10.11.0(vue@3.4.36(typescript@5.4.5))': + '@vueuse/shared@10.11.0(vue@3.4.36(typescript@5.7.2))': dependencies: - vue-demi: 0.14.8(vue@3.4.36(typescript@5.4.5)) + vue-demi: 0.14.8(vue@3.4.36(typescript@5.7.2)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -12506,6 +12890,8 @@ snapshots: acorn@8.11.3: {} + acorn@8.14.0: {} + agent-base@6.0.2: dependencies: debug: 4.3.7 @@ -12607,7 +12993,7 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - apache-arrow@18.0.0: + apache-arrow@18.1.0: dependencies: '@swc/helpers': 0.5.13 '@types/command-line-args': 5.2.3 @@ -12741,9 +13127,9 @@ snapshots: axe-core@4.10.0: {} - axios@1.7.4(debug@4.3.7): + axios@1.7.4(debug@4.4.0): dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -12751,7 +13137,7 @@ snapshots: axios@1.7.7: dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -12770,7 +13156,7 @@ snapshots: babel-plugin-react-compiler@19.0.0-beta-a7bf2bd-20241110: dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 bail@2.0.2: {} @@ -12831,13 +13217,6 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.0: - dependencies: - caniuse-lite: 1.0.30001642 - electron-to-chromium: 1.4.774 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.0) - browserslist@4.23.3: dependencies: caniuse-lite: 1.0.30001653 @@ -12845,6 +13224,13 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + browserslist@4.24.3: + dependencies: + caniuse-lite: 1.0.30001690 + electron-to-chromium: 1.5.75 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.3) + buffer-crc32@0.2.13: {} buffer-equal-constant-time@1.0.1: {} @@ -12891,10 +13277,10 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001642: {} - caniuse-lite@1.0.30001653: {} + caniuse-lite@1.0.30001690: {} + canvas@2.11.2: dependencies: '@mapbox/node-pre-gyp': 1.0.11 @@ -12912,7 +13298,7 @@ snapshots: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.1 + loupe: 3.1.2 pathval: 2.0.0 chalk-template@0.4.0: @@ -12932,6 +13318,8 @@ snapshots: chalk@5.3.0: {} + chalk@5.4.1: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -13002,9 +13390,9 @@ snapshots: chownr@2.0.0: optional: true - class-variance-authority@0.7.0: + class-variance-authority@0.7.1: dependencies: - clsx: 2.0.0 + clsx: 2.1.1 clean-stack@2.2.0: {} @@ -13039,18 +13427,16 @@ snapshots: clone@1.0.4: {} - clsx@2.0.0: {} - clsx@2.1.1: {} - cmdk@1.0.4(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1): + cmdk@1.0.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@radix-ui/react-dialog': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - '@radix-ui/react-id': 1.1.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - '@radix-ui/react-primitive': 2.0.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - use-sync-external-store: 1.2.2(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.2)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + use-sync-external-store: 1.2.2(react@19.0.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -13126,10 +13512,10 @@ snapshots: has-own-prop: 2.0.0 repeat-string: 1.6.1 - commitizen@4.3.1(@types/node@22.9.0)(typescript@5.4.5): + commitizen@4.3.1(@types/node@22.10.2)(typescript@5.7.2): dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@22.9.0)(typescript@5.4.5) + cz-conventional-changelog: 3.3.0(@types/node@22.10.2)(typescript@5.7.2) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -13157,6 +13543,8 @@ snapshots: confbox@0.1.7: {} + confbox@0.1.8: {} + confusing-browser-globals@1.0.11: {} consola@3.2.3: {} @@ -13185,6 +13573,8 @@ snapshots: cookie@0.4.2: {} + cookie@1.0.2: {} + copy-anything@2.0.6: dependencies: is-what: 3.14.1 @@ -13214,30 +13604,38 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig-typescript-loader@5.0.0(@types/node@22.9.0)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): dependencies: - '@types/node': 22.9.0 - cosmiconfig: 9.0.0(typescript@5.4.5) + '@types/node': 22.10.2 + cosmiconfig: 9.0.0(typescript@5.7.2) jiti: 1.21.6 - typescript: 5.4.5 + typescript: 5.7.2 + optional: true + + cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + dependencies: + '@types/node': 22.10.2 + cosmiconfig: 9.0.0(typescript@5.7.2) + jiti: 2.4.2 + typescript: 5.7.2 - cosmiconfig@8.3.6(typescript@5.4.5): + cosmiconfig@8.3.6(typescript@5.7.2): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 - cosmiconfig@9.0.0(typescript@5.4.5): + cosmiconfig@9.0.0(typescript@5.7.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 cp-file@10.0.0: dependencies: @@ -13310,16 +13708,16 @@ snapshots: cytoscape@3.30.2: {} - cz-conventional-changelog@3.3.0(@types/node@22.9.0)(typescript@5.4.5): + cz-conventional-changelog@3.3.0(@types/node@22.10.2)(typescript@5.7.2): dependencies: chalk: 2.4.2 - commitizen: 4.3.1(@types/node@22.9.0)(typescript@5.4.5) + commitizen: 4.3.1(@types/node@22.10.2)(typescript@5.7.2) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 19.5.0(@types/node@22.9.0)(typescript@5.4.5) + '@commitlint/load': 19.5.0(@types/node@22.10.2)(typescript@5.7.2) transitivePeerDependencies: - '@types/node' - typescript @@ -13540,6 +13938,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + decamelize@1.2.0: {} decode-named-character-reference@1.0.2: @@ -13584,6 +13986,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge@4.3.1: {} + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -13629,6 +14033,8 @@ snapshots: detect-libc@2.0.2: {} + detect-libc@2.0.3: {} + detect-node-es@1.1.0: {} detect-node@2.1.0: {} @@ -13667,7 +14073,9 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.1.6: {} + dompurify@3.2.3: + optionalDependencies: + '@types/trusted-types': 2.0.7 domutils@3.1.0: dependencies: @@ -13700,10 +14108,12 @@ snapshots: dependencies: safe-buffer: 5.2.1 - electron-to-chromium@1.4.774: {} - electron-to-chromium@1.5.13: {} + electron-to-chromium@1.5.75: {} + + emoji-regex-xs@1.0.0: {} + emoji-regex@10.3.0: {} emoji-regex@8.0.0: {} @@ -13722,7 +14132,7 @@ snapshots: engine.io-client@6.6.1: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.6 + debug: 4.3.7 engine.io-parser: 5.2.3 ws: 8.17.1 xmlhttprequest-ssl: 2.1.1 @@ -13737,12 +14147,12 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 22.9.0 + '@types/node': 22.10.2 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.6 + debug: 4.3.7 engine.io-parser: 5.2.3 ws: 8.17.1 transitivePeerDependencies: @@ -13860,6 +14270,8 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 + es-module-lexer@1.5.4: {} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -13880,7 +14292,7 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - es-toolkit@1.27.0: {} + es-toolkit@1.30.1: {} es6-error@4.1.1: {} @@ -13991,35 +14403,37 @@ snapshots: escalade@3.1.2: {} + escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.57.0 - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.8 semver: 6.3.1 - eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0): dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.7.2) eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0) transitivePeerDependencies: - eslint-plugin-import - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.35.0(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.35.0(eslint@8.57.0))(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) eslint-plugin-react: 7.35.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) @@ -14030,9 +14444,9 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -14042,47 +14456,47 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.5 is-bun-module: 1.1.0 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.7.2) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.7.2) eslint: 8.57.0 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -14093,7 +14507,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -14105,7 +14519,7 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14136,25 +14550,25 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - eslint-plugin-prettier@5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.4.2): dependencies: eslint: 8.57.0 - prettier: 3.3.3 + prettier: 3.4.2 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: '@types/eslint': 8.56.10 eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-plugin-react-compiler@19.0.0-beta-df7b47d-20241124(eslint@8.57.0): + eslint-plugin-react-compiler@19.0.0-beta-b2e8e9c-20241220(eslint@8.57.0): dependencies: '@babel/core': 7.25.2 '@babel/parser': 7.25.3 - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.25.2) eslint: 8.57.0 hermes-parser: 0.25.1 - zod: 3.23.8 - zod-validation-error: 3.3.0(zod@3.23.8) + zod: 3.24.1 + zod-validation-error: 3.3.0(zod@3.24.1) transitivePeerDependencies: - supports-color @@ -14188,12 +14602,12 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0): dependencies: eslint: 8.57.0 eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2) eslint-rule-composer@0.3.0: {} @@ -14279,7 +14693,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -14315,7 +14729,7 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - execa@9.5.1: + execa@9.5.2: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.3 @@ -14466,9 +14880,9 @@ snapshots: dependencies: tabbable: 6.2.0 - follow-redirects@1.15.9(debug@4.3.7): + follow-redirects@1.15.9(debug@4.4.0): optionalDependencies: - debug: 4.3.7 + debug: 4.4.0 for-each@0.3.3: dependencies: @@ -14494,13 +14908,13 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@12.0.0-alpha.1(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + framer-motion@12.0.0-alpha.2(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: tslib: 2.6.2 optionalDependencies: '@emotion/is-prop-valid': 1.2.2 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) fs-constants@1.0.0: {} @@ -14524,6 +14938,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -14557,8 +14974,6 @@ snapshots: get-east-asian-width@1.2.0: {} - get-func-name@2.0.2: {} - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -14792,7 +15207,7 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-to-html@9.0.3: + hast-util-to-html@9.0.4: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.2 @@ -14873,20 +15288,20 @@ snapshots: dependencies: lru-cache: 6.0.0 - html-dom-parser@5.0.10: + html-dom-parser@5.0.12: dependencies: domhandler: 5.0.3 htmlparser2: 9.1.0 - html-react-parser@5.1.18(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + html-react-parser@5.2.1(@types/react@19.0.2)(react@19.0.0): dependencies: domhandler: 5.0.3 - html-dom-parser: 5.0.10 - react: 19.0.0-rc-ed15d500-20241110 + html-dom-parser: 5.0.12 + react: 19.0.0 react-property: 2.0.2 style-to-js: 1.1.16 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 html-url-attributes@3.0.0: {} @@ -14931,7 +15346,7 @@ snapshots: dependencies: ms: 2.1.3 - husky@9.1.6: {} + husky@9.1.7: {} hyphenate-style-name@1.1.0: {} @@ -14940,9 +15355,9 @@ snapshots: '@types/debug': 4.1.12 '@types/node': 10.14.22 '@types/tough-cookie': 4.0.5 - axios: 1.7.4(debug@4.3.7) + axios: 1.7.4(debug@4.4.0) camelcase: 6.3.0 - debug: 4.3.7 + debug: 4.4.0 dotenv: 16.4.5 extend: 3.0.2 file-type: 16.5.4 @@ -14950,7 +15365,7 @@ snapshots: isstream: 0.1.2 jsonwebtoken: 9.0.2 mime-types: 2.1.35 - retry-axios: 2.6.0(axios@1.7.4(debug@4.3.7)) + retry-axios: 2.6.0(axios@1.7.4(debug@4.4.0)) tough-cookie: 4.1.4 transitivePeerDependencies: - supports-color @@ -15262,11 +15677,13 @@ snapshots: jiti@2.4.0: {} + jiti@2.4.2: {} + joycon@3.1.1: {} js-cookie@2.2.1: {} - js-tiktoken@1.0.15: + js-tiktoken@1.0.16: dependencies: base64-js: 1.5.1 @@ -15276,8 +15693,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@2.5.2: {} - jsesc@3.0.2: {} json-bignum@0.0.3: {} @@ -15372,11 +15787,11 @@ snapshots: khroma@2.1.0: {} - knip@5.36.7(@types/node@22.9.0)(typescript@5.4.5): + knip@5.41.1(@types/node@22.10.2)(typescript@5.7.2): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 - '@types/node': 22.9.0 + '@types/node': 22.10.2 easy-table: 1.2.0 enhanced-resolve: 5.17.1 fast-glob: 3.3.2 @@ -15386,33 +15801,33 @@ snapshots: picocolors: 1.1.1 picomatch: 4.0.2 pretty-ms: 9.0.0 - smol-toml: 1.3.0 + smol-toml: 1.3.1 strip-json-comments: 5.0.1 summary: 2.1.0 - typescript: 5.4.5 - zod: 3.23.8 - zod-validation-error: 3.3.0(zod@3.23.8) + typescript: 5.7.2 + zod: 3.24.1 + zod-validation-error: 3.3.0(zod@3.24.1) kolorist@1.8.0: {} - langchain@0.3.5(@langchain/anthropic@0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))))(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8)))(axios@1.7.4)(cheerio@1.0.0)(openai@4.72.0(zod@3.23.8)): + langchain@0.3.7(@langchain/anthropic@0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))))(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(axios@1.7.4)(cheerio@1.0.0)(openai@4.77.0(zod@3.24.1)): dependencies: - '@langchain/core': 0.3.18(openai@4.72.0(zod@3.23.8)) - '@langchain/openai': 0.3.13(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) - js-tiktoken: 1.0.15 + '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) + '@langchain/openai': 0.3.16(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) + js-tiktoken: 1.0.16 js-yaml: 4.1.0 jsonpointer: 5.0.1 - langsmith: 0.2.3(openai@4.72.0(zod@3.23.8)) + langsmith: 0.2.13(openai@4.77.0(zod@3.24.1)) openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 yaml: 2.5.0 - zod: 3.23.8 - zod-to-json-schema: 3.22.5(zod@3.23.8) + zod: 3.24.1 + zod-to-json-schema: 3.22.5(zod@3.24.1) optionalDependencies: - '@langchain/anthropic': 0.3.8(@langchain/core@0.3.18(openai@4.72.0(zod@3.23.8))) - axios: 1.7.4(debug@4.3.7) + '@langchain/anthropic': 0.3.11(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) + axios: 1.7.4(debug@4.4.0) cheerio: 1.0.0 transitivePeerDependencies: - encoding @@ -15426,7 +15841,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - langsmith@0.2.3(openai@4.72.0(zod@3.23.8)): + langsmith@0.2.13(openai@4.77.0(zod@3.24.1)): dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 @@ -15435,7 +15850,7 @@ snapshots: semver: 7.6.3 uuid: 10.0.0 optionalDependencies: - openai: 4.72.0(zod@3.23.8) + openai: 4.77.0(zod@3.24.1) language-subtag-registry@0.3.23: {} @@ -15468,38 +15883,38 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lexical@0.20.0: {} + lexical@0.21.0: {} lib0@0.2.97: dependencies: isomorphic.js: 0.2.5 - lilconfig@2.1.0: {} - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 - lint-staged@15.2.10: + lint-staged@15.2.11: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.6 + debug: 4.4.0 execa: 8.0.1 - lilconfig: 3.1.2 - listr2: 8.2.4 + lilconfig: 3.1.3 + listr2: 8.2.5 micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.5.0 + yaml: 2.6.1 transitivePeerDependencies: - supports-color - listr2@8.2.4: + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -15515,6 +15930,11 @@ snapshots: mlly: 1.7.1 pkg-types: 1.1.3 + local-pkg@0.5.1: + dependencies: + mlly: 1.7.3 + pkg-types: 1.2.1 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -15586,10 +16006,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.1: - dependencies: - get-func-name: 2.0.2 - loupe@3.1.2: {} lowdb@7.0.1: @@ -15612,9 +16028,9 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-react@0.461.0(react@19.0.0-rc-ed15d500-20241110): + lucide-react@0.469.0(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 magic-string@0.30.11: dependencies: @@ -15843,9 +16259,9 @@ snapshots: meow@12.1.1: {} - merge-refs@1.3.0(types-react@19.0.0-rc.1): + merge-refs@1.3.0(@types/react@19.0.2): optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 merge-stream@2.0.0: {} @@ -15853,13 +16269,12 @@ snapshots: merge@2.1.1: {} - mermaid@11.4.0: + mermaid@11.4.1: dependencies: '@braintree/sanitize-url': 7.1.0 '@iconify/utils': 2.1.33 '@mermaid-js/parser': 0.3.0 '@types/d3': 7.4.3 - '@types/dompurify': 3.0.5 cytoscape: 3.30.2 cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2) cytoscape-fcose: 2.2.0(cytoscape@3.30.2) @@ -15867,7 +16282,7 @@ snapshots: d3-sankey: 0.12.3 dagre-d3-es: 7.0.11 dayjs: 1.11.12 - dompurify: 3.1.6 + dompurify: 3.2.3 katex: 0.16.11 khroma: 2.1.0 lodash-es: 4.17.21 @@ -16152,6 +16567,13 @@ snapshots: pkg-types: 1.1.3 ufo: 1.5.4 + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 + mrmime@2.0.0: {} ms@2.1.2: {} @@ -16173,15 +16595,15 @@ snapshots: nan@2.22.0: optional: true - nano-css@5.6.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + nano-css@5.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 inline-style-prefixer: 7.0.1 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) rtl-css-js: 1.16.1 stacktrace-js: 2.0.2 stylis: 4.3.4 @@ -16202,10 +16624,10 @@ snapshots: nested-error-stacks@2.1.1: {} - next-themes@0.4.3(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + next-themes@0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) no-case@3.0.4: dependencies: @@ -16234,10 +16656,10 @@ snapshots: css-select: 5.1.0 he: 1.2.0 - node-releases@2.0.14: {} - node-releases@2.0.18: {} + node-releases@2.0.19: {} + nopt@5.0.0: dependencies: abbrev: 1.1.1 @@ -16339,9 +16761,11 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-js@0.4.3: + oniguruma-to-es@0.8.1: dependencies: - regex: 4.3.2 + emoji-regex-xs: 1.0.0 + regex: 5.0.2 + regex-recursion: 5.0.0 onnx-proto@4.0.4: dependencies: @@ -16369,7 +16793,7 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@4.72.0(zod@3.23.8): + openai@4.77.0(zod@3.24.1): dependencies: '@types/node': 18.19.39 '@types/node-fetch': 2.6.11 @@ -16379,7 +16803,7 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0 optionalDependencies: - zod: 3.23.8 + zod: 3.24.1 transitivePeerDependencies: - encoding @@ -16426,7 +16850,7 @@ snapshots: dependencies: yocto-queue: 1.1.1 - p-limit@6.1.0: + p-limit@6.2.0: dependencies: yocto-queue: 1.1.1 @@ -16493,7 +16917,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -16570,8 +16994,6 @@ snapshots: picocolors@1.0.1: {} - picocolors@1.1.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -16593,9 +17015,23 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 + pkg-types@1.2.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + platform@1.3.6: {} - pnpm@9.12.3: {} + playwright-core@1.49.1: {} + + playwright@1.49.1: + dependencies: + playwright-core: 1.49.1 + optionalDependencies: + fsevents: 2.3.2 + + pnpm@9.15.1: {} points-on-curve@0.2.0: {} @@ -16620,19 +17056,19 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.49): dependencies: - lilconfig: 3.1.2 + lilconfig: 3.1.3 yaml: 2.5.0 optionalDependencies: postcss: 8.4.49 - postcss-load-config@6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.1)(yaml@2.5.0): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.1)(yaml@2.6.1): dependencies: lilconfig: 3.1.2 optionalDependencies: - jiti: 2.4.0 + jiti: 2.4.2 postcss: 8.4.49 tsx: 4.19.1 - yaml: 2.5.0 + yaml: 2.6.1 postcss-nested@6.2.0(postcss@8.4.49): dependencies: @@ -16681,7 +17117,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.3: {} + prettier@3.4.2: {} pretty-ms@9.0.0: dependencies: @@ -16710,7 +17146,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 22.9.0 + '@types/node': 22.10.2 long: 4.0.0 proxy-from-env@1.1.0: {} @@ -16753,42 +17189,42 @@ snapshots: scheduler: 0.23.2 optional: true - react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110): + react-dom@19.0.0(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 - scheduler: 0.25.0-rc-ed15d500-20241110 + react: 19.0.0 + scheduler: 0.25.0 - react-error-boundary@3.1.4(react@19.0.0-rc-ed15d500-20241110): + react-error-boundary@3.1.4(react@19.0.0): dependencies: '@babel/runtime': 7.24.7 - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 - react-error-boundary@4.1.2(react@19.0.0-rc-ed15d500-20241110): + react-error-boundary@5.0.0(react@19.0.0): dependencies: '@babel/runtime': 7.24.7 - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 - react-hook-form@7.53.2(react@19.0.0-rc-ed15d500-20241110): + react-hook-form@7.54.2(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 - react-intersection-observer@9.13.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + react-intersection-observer@9.14.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 optionalDependencies: - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react-dom: 19.0.0(react@19.0.0) react-is@16.13.1: {} - react-markdown@9.0.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + react-markdown@9.0.1(@types/react@19.0.2)(react@19.0.0): dependencies: '@types/hast': 3.0.4 - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 mdast-util-to-hast: 13.2.0 - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 remark-parse: 11.0.0 remark-rehype: 11.1.0 unified: 11.0.5 @@ -16797,20 +17233,20 @@ snapshots: transitivePeerDependencies: - supports-color - react-pdf@9.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + react-pdf@9.1.1(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: clsx: 2.1.1 dequal: 2.0.3 make-cancellable-promise: 1.3.2 make-event-props: 1.6.2 - merge-refs: 1.3.0(types-react@19.0.0-rc.1) + merge-refs: 1.3.0(@types/react@19.0.2) pdfjs-dist: 4.4.168 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) tiny-invariant: 1.3.3 warning: 4.0.3 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 transitivePeerDependencies: - encoding - supports-color @@ -16819,67 +17255,79 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.6(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + react-remove-scroll-bar@2.3.8(@types/react@19.0.2)(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 - react-style-singleton: 2.2.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + react: 19.0.0 + react-style-singleton: 2.2.3(@types/react@19.0.2)(react@19.0.0) tslib: 2.6.2 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - react-remove-scroll@2.6.0(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + react-remove-scroll@2.6.2(@types/react@19.0.2)(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 - react-remove-scroll-bar: 2.3.6(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react-style-singleton: 2.2.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + react: 19.0.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.0.2)(react@19.0.0) + react-style-singleton: 2.2.1(@types/react@19.0.2)(react@19.0.0) tslib: 2.6.2 - use-callback-ref: 1.3.2(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - use-sidecar: 1.1.2(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) + use-callback-ref: 1.3.3(@types/react@19.0.2)(react@19.0.0) + use-sidecar: 1.1.2(@types/react@19.0.2)(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - react-resizable-panels@2.1.6(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + react-resizable-panels@2.1.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - react-router-dom@6.28.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + react-router-dom@7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@remix-run/router': 1.21.0 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-router: 6.28.0(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-router: 7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react-router@6.28.0(react@19.0.0-rc-ed15d500-20241110): + react-router@7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@remix-run/router': 1.21.0 - react: 19.0.0-rc-ed15d500-20241110 + '@types/cookie': 0.6.0 + cookie: 1.0.2 + react: 19.0.0 + set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 19.0.0(react@19.0.0) - react-shiki@0.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + react-shiki@0.1.2(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: clsx: 2.1.1 - html-react-parser: 5.1.18(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - shiki: 1.22.2 + html-react-parser: 5.2.1(@types/react@19.0.2)(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + shiki: 1.24.4 transitivePeerDependencies: - '@types/react' - react-style-singleton@2.2.1(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + react-style-singleton@2.2.1(@types/react@19.0.2)(react@19.0.0): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 + tslib: 2.6.2 + optionalDependencies: + '@types/react': 19.0.2 + + react-style-singleton@2.2.3(@types/react@19.0.2)(react@19.0.0): + dependencies: + get-nonce: 1.0.1 + react: 19.0.0 tslib: 2.6.2 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - react-universal-interface@0.6.2(react@19.0.0-rc-ed15d500-20241110)(tslib@2.6.2): + react-universal-interface@0.6.2(react@19.0.0)(tslib@2.6.2): dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 tslib: 2.6.2 - react-use@17.5.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + react-use@17.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@types/js-cookie': 2.2.7 '@xobotyi/scrollbar-width': 1.9.5 @@ -16887,10 +17335,10 @@ snapshots: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) - react-universal-interface: 0.6.2(react@19.0.0-rc-ed15d500-20241110)(tslib@2.6.2) + nano-css: 5.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-universal-interface: 0.6.2(react@19.0.0)(tslib@2.6.2) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 @@ -16903,7 +17351,7 @@ snapshots: loose-envify: 1.4.0 optional: true - react@19.0.0-rc-ed15d500-20241110: {} + react@19.0.0: {} read-cache@1.0.0: dependencies: @@ -16943,7 +17391,15 @@ snapshots: regenerator-runtime@0.14.1: {} - regex@4.3.2: {} + regex-recursion@5.0.0: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@5.0.2: + dependencies: + regex-utilities: 2.3.0 regexp.prototype.flags@1.5.2: dependencies: @@ -17060,9 +17516,9 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - retry-axios@2.6.0(axios@1.7.4(debug@4.3.7)): + retry-axios@2.6.0(axios@1.7.4(debug@4.4.0)): dependencies: - axios: 1.7.4(debug@4.3.7) + axios: 1.7.4(debug@4.4.0) retry@0.13.1: {} @@ -17189,7 +17645,7 @@ snapshots: loose-envify: 1.4.0 optional: true - scheduler@0.25.0-rc-ed15d500-20241110: {} + scheduler@0.25.0: {} screenfull@5.2.0: {} @@ -17216,6 +17672,8 @@ snapshots: set-blocking@2.0.0: optional: true + set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -17247,21 +17705,47 @@ snapshots: tar-fs: 3.0.6 tunnel-agent: 0.6.0 + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - shell-quote@1.8.1: {} + shell-quote@1.8.2: {} - shiki@1.22.2: + shiki@1.24.4: dependencies: - '@shikijs/core': 1.22.2 - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/core': 1.24.4 + '@shikijs/engine-javascript': 1.24.4 + '@shikijs/engine-oniguruma': 1.24.4 + '@shikijs/types': 1.24.4 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 side-channel@1.0.6: @@ -17324,7 +17808,7 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - smol-toml@1.3.0: {} + smol-toml@1.3.1: {} snake-case@3.0.4: dependencies: @@ -17333,7 +17817,7 @@ snapshots: socket.io-adapter@2.5.5: dependencies: - debug: 4.3.6 + debug: 4.3.7 ws: 8.17.1 transitivePeerDependencies: - bufferutil @@ -17354,7 +17838,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -17372,10 +17856,10 @@ snapshots: - supports-color - utf-8-validate - sonner@1.7.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + sonner@1.7.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) source-map-js@1.2.1: {} @@ -17419,7 +17903,7 @@ snapshots: stack-generator: 2.0.10 stacktrace-gps: 3.1.2 - std-env@3.7.0: {} + std-env@3.8.0: {} steno@4.0.2: {} @@ -17555,7 +18039,7 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-components@6.1.13(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + styled-components@6.1.13(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@emotion/is-prop-valid': 1.2.2 '@emotion/unitless': 0.8.1 @@ -17563,8 +18047,8 @@ snapshots: css-to-react-native: 3.2.0 csstype: 3.1.3 postcss: 8.4.38 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) shallowequal: 1.1.0 stylis: 4.3.2 tslib: 2.6.2 @@ -17623,13 +18107,13 @@ snapshots: typical: 7.2.0 wordwrapjs: 5.1.0 - tailwind-merge@2.5.4: {} + tailwind-merge@2.5.5: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.14): + tailwindcss-animate@1.0.7(tailwindcss@3.4.17): dependencies: - tailwindcss: 3.4.14 + tailwindcss: 3.4.17 - tailwindcss@3.4.14: + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -17640,11 +18124,11 @@ snapshots: glob-parent: 6.0.2 is-glob: 4.0.3 jiti: 1.21.6 - lilconfig: 2.1.0 + lilconfig: 3.1.3 micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.1.0 + picocolors: 1.1.1 postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) @@ -17726,8 +18210,6 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.0: {} - tinyexec@0.3.1: {} tinyglobby@0.2.10: @@ -17783,9 +18265,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.4.5): + ts-api-utils@1.3.0(typescript@5.7.2): dependencies: - typescript: 5.4.5 + typescript: 5.7.2 ts-dedent@2.2.0: {} @@ -17793,9 +18275,9 @@ snapshots: ts-interface-checker@0.1.13: {} - tsconfck@3.1.1(typescript@5.4.5): + tsconfck@3.1.1(typescript@5.7.2): optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 tsconfig-paths@3.15.0: dependencies: @@ -17806,12 +18288,12 @@ snapshots: tslib@2.6.2: {} - tsup@7.2.0(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.4.5): + tsup@7.2.0(@swc/core@1.7.10)(postcss@8.4.49)(typescript@5.7.2): dependencies: bundle-require: 4.2.1(esbuild@0.18.20) cac: 6.7.14 chokidar: 3.6.0 - debug: 4.3.6 + debug: 4.3.7 esbuild: 0.18.20 execa: 5.1.1 globby: 11.1.0 @@ -17825,12 +18307,12 @@ snapshots: optionalDependencies: '@swc/core': 1.7.10 postcss: 8.4.49 - typescript: 5.4.5 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - ts-node - tsup@8.3.5(@swc/core@1.7.10)(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.1)(typescript@5.4.5)(yaml@2.5.0): + tsup@8.3.5(@swc/core@1.7.10)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.1)(typescript@5.7.2)(yaml@2.6.1): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -17840,7 +18322,7 @@ snapshots: esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.1)(yaml@2.5.0) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.1)(yaml@2.6.1) resolve-from: 5.0.0 rollup: 4.24.3 source-map: 0.8.0-beta.0 @@ -17851,7 +18333,7 @@ snapshots: optionalDependencies: '@swc/core': 1.7.10 postcss: 8.4.49 - typescript: 5.4.5 + typescript: 5.7.2 transitivePeerDependencies: - jiti - supports-color @@ -17878,6 +18360,8 @@ snapshots: tunnel@0.0.6: {} + turbo-stream@2.4.0: {} + turndown@7.2.0: dependencies: '@mixmark-io/domino': 2.2.0 @@ -17934,15 +18418,7 @@ snapshots: typed.js@2.1.0: {} - types-react-dom@19.0.0-rc.1: - dependencies: - '@types/react': types-react@19.0.0-rc.1 - - types-react@19.0.0-rc.1: - dependencies: - csstype: 3.1.3 - - typescript@5.4.5: {} + typescript@5.7.2: {} typical@4.0.0: {} @@ -17973,8 +18449,12 @@ snapshots: undici-types@6.19.8: {} + undici-types@6.20.0: {} + undici@6.20.1: {} + undici@7.2.0: {} + unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} @@ -18026,9 +18506,9 @@ snapshots: universalify@2.0.1: {} - unocss@0.61.9(postcss@8.4.49)(rollup@4.24.3)(vite@5.3.5(@types/node@22.9.0)(less@4.2.0)): + unocss@0.61.9(postcss@8.4.49)(rollup@4.24.3)(vite@5.3.5(@types/node@22.10.2)(less@4.2.0)): dependencies: - '@unocss/astro': 0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.9.0)(less@4.2.0)) + '@unocss/astro': 0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.10.2)(less@4.2.0)) '@unocss/cli': 0.61.9(rollup@4.24.3) '@unocss/core': 0.61.9 '@unocss/extractor-arbitrary-variants': 0.61.9 @@ -18047,24 +18527,24 @@ snapshots: '@unocss/transformer-compile-class': 0.61.9 '@unocss/transformer-directives': 0.61.9 '@unocss/transformer-variant-group': 0.61.9 - '@unocss/vite': 0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.9.0)(less@4.2.0)) + '@unocss/vite': 0.61.9(rollup@4.24.3)(vite@5.3.5(@types/node@22.10.2)(less@4.2.0)) optionalDependencies: - vite: 5.3.5(@types/node@22.9.0)(less@4.2.0) + vite: 5.3.5(@types/node@22.10.2)(less@4.2.0) transitivePeerDependencies: - postcss - rollup - supports-color - update-browserslist-db@1.0.16(browserslist@4.23.0): + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: - browserslist: 4.23.0 + browserslist: 4.23.3 escalade: 3.1.2 picocolors: 1.1.1 - update-browserslist-db@1.1.0(browserslist@4.23.3): + update-browserslist-db@1.1.1(browserslist@4.24.3): dependencies: - browserslist: 4.23.3 - escalade: 3.1.2 + browserslist: 4.24.3 + escalade: 3.2.0 picocolors: 1.1.1 uri-js@4.4.1: @@ -18078,35 +18558,35 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-callback-ref@1.3.2(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + use-callback-ref@1.3.3(@types/react@19.0.2)(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 tslib: 2.6.2 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - use-immer@0.10.0(immer@10.1.1)(react@19.0.0-rc-ed15d500-20241110): + use-immer@0.11.0(immer@10.1.1)(react@19.0.0): dependencies: immer: 10.1.1 - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 - use-resize-observer@9.1.0(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110): + use-resize-observer@9.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@juggle/resize-observer': 3.4.0 - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - use-sidecar@1.1.2(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1): + use-sidecar@1.1.2(@types/react@19.0.2)(react@19.0.0): dependencies: detect-node-es: 1.1.0 - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 tslib: 2.6.2 optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 - use-sync-external-store@1.2.2(react@19.0.0-rc-ed15d500-20241110): + use-sync-external-store@1.2.2(react@19.0.0): dependencies: - react: 19.0.0-rc-ed15d500-20241110 + react: 19.0.0 util-deprecate@1.0.2: {} @@ -18120,27 +18600,30 @@ snapshots: vary@1.1.2: {} - vaul@1.1.1(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1): + vaul@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@radix-ui/react-dialog': 1.1.2(react-dom@19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110))(react@19.0.0-rc-ed15d500-20241110)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) - react: 19.0.0-rc-ed15d500-20241110 - react-dom: 19.0.0-rc-ed15d500-20241110(react@19.0.0-rc-ed15d500-20241110) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - vectordb@0.12.0(@apache-arrow/ts@14.0.2)(apache-arrow@18.0.0): + vectordb@0.14.0(@apache-arrow/ts@14.0.2)(apache-arrow@18.1.0): dependencies: '@apache-arrow/ts': 14.0.2 '@neon-rs/load': 0.0.74 - apache-arrow: 18.0.0 + apache-arrow: 18.1.0 axios: 1.7.7 optionalDependencies: - '@lancedb/vectordb-darwin-arm64': 0.12.0 - '@lancedb/vectordb-darwin-x64': 0.12.0 - '@lancedb/vectordb-linux-arm64-gnu': 0.12.0 - '@lancedb/vectordb-linux-x64-gnu': 0.12.0 - '@lancedb/vectordb-win32-x64-msvc': 0.12.0 + '@lancedb/vectordb-darwin-arm64': 0.14.0 + '@lancedb/vectordb-darwin-x64': 0.14.0 + '@lancedb/vectordb-linux-arm64-gnu': 0.14.0 + '@lancedb/vectordb-linux-arm64-musl': 0.14.0 + '@lancedb/vectordb-linux-x64-gnu': 0.14.0 + '@lancedb/vectordb-linux-x64-musl': 0.14.0 + '@lancedb/vectordb-win32-arm64-msvc': 0.14.0 + '@lancedb/vectordb-win32-x64-msvc': 0.14.0 transitivePeerDependencies: - debug @@ -18159,12 +18642,13 @@ snapshots: '@types/unist': 3.0.2 vfile-message: 4.0.2 - vite-node@2.1.4(@types/node@22.9.0)(less@4.2.0): + vite-node@2.1.8(@types/node@22.10.2)(less@4.2.0): dependencies: cac: 6.7.14 debug: 4.3.7 + es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) + vite: 5.4.11(@types/node@22.10.2)(less@4.2.0) transitivePeerDependencies: - '@types/node' - less @@ -18176,84 +18660,97 @@ snapshots: - supports-color - terser - vite-plugin-pages@0.32.3(@vue/compiler-sfc@3.4.36)(react-router@6.28.0(react@19.0.0-rc-ed15d500-20241110))(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)): + vite-plugin-pages@0.32.4(@vue/compiler-sfc@3.4.36)(react-router@7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)): dependencies: '@types/debug': 4.1.12 - debug: 4.3.6 + debug: 4.3.7 dequal: 2.0.3 extract-comments: 1.1.0 fast-glob: 3.3.2 json5: 2.2.3 - local-pkg: 0.5.0 - picocolors: 1.1.0 - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) - yaml: 2.5.0 + local-pkg: 0.5.1 + picocolors: 1.1.1 + vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1) + yaml: 2.6.1 optionalDependencies: '@vue/compiler-sfc': 3.4.36 - react-router: 6.28.0(react@19.0.0-rc-ed15d500-20241110) + react-router: 7.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - supports-color - vite-plugin-svgr@4.3.0(rollup@4.24.3)(typescript@5.4.5)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)): + vite-plugin-svgr@4.3.0(rollup@4.24.3)(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)): dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.24.3) - '@svgr/core': 8.1.0(typescript@5.4.5) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) + '@svgr/core': 8.1.0(typescript@5.7.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.7.2)) + vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@5.1.2(typescript@5.4.5)(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)): + vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1)): dependencies: debug: 4.3.7 globrex: 0.1.2 - tsconfck: 3.1.1(typescript@5.4.5) + tsconfck: 3.1.1(typescript@5.7.2) optionalDependencies: - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) + vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1) transitivePeerDependencies: - supports-color - typescript - vite@5.3.5(@types/node@22.9.0)(less@4.2.0): + vite@5.3.5(@types/node@22.10.2)(less@4.2.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.19.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 fsevents: 2.3.3 less: 4.2.0 - vite@5.4.11(@types/node@22.9.0)(less@4.2.0): + vite@5.4.11(@types/node@22.10.2)(less@4.2.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.24.3 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 + fsevents: 2.3.3 + less: 4.2.0 + + vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(less@4.2.0)(tsx@4.19.1)(yaml@2.6.1): + dependencies: + esbuild: 0.24.0 + postcss: 8.4.49 + rollup: 4.24.3 + optionalDependencies: + '@types/node': 22.10.2 fsevents: 2.3.3 + jiti: 2.4.2 less: 4.2.0 + tsx: 4.19.1 + yaml: 2.6.1 - vitepress@1.3.2(@algolia/client-search@4.24.0)(@types/node@22.9.0)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1)(typescript@5.4.5): + vitepress@1.3.2(@algolia/client-search@4.24.0)(@types/node@22.10.2)(@types/react@19.0.2)(axios@1.7.7)(less@4.2.0)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.7.2): dependencies: '@docsearch/css': 3.6.1 - '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(types-react@19.0.0-rc.1) + '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(@types/react@19.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0) '@shikijs/core': 1.10.3 '@shikijs/transformers': 1.10.3 '@types/markdown-it': 14.1.1 - '@vitejs/plugin-vue': 5.0.5(vite@5.3.5(@types/node@22.9.0)(less@4.2.0))(vue@3.4.36(typescript@5.4.5)) + '@vitejs/plugin-vue': 5.0.5(vite@5.3.5(@types/node@22.10.2)(less@4.2.0))(vue@3.4.36(typescript@5.7.2)) '@vue/devtools-api': 7.3.6 '@vue/shared': 3.4.35 - '@vueuse/core': 10.11.0(vue@3.4.36(typescript@5.4.5)) - '@vueuse/integrations': 10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.4.36(typescript@5.4.5)) + '@vueuse/core': 10.11.0(vue@3.4.36(typescript@5.7.2)) + '@vueuse/integrations': 10.11.0(axios@1.7.7)(focus-trap@7.5.4)(vue@3.4.36(typescript@5.7.2)) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 7.0.1 - shiki: 1.22.2 - vite: 5.3.5(@types/node@22.9.0)(less@4.2.0) - vue: 3.4.36(typescript@5.4.5) + shiki: 1.24.4 + vite: 5.3.5(@types/node@22.10.2)(less@4.2.0) + vue: 3.4.36(typescript@5.7.2) optionalDependencies: postcss: 8.4.49 transitivePeerDependencies: @@ -18283,30 +18780,30 @@ snapshots: - typescript - universal-cookie - vitest@2.1.4(@types/node@22.9.0)(less@4.2.0): + vitest@2.1.8(@types/node@22.10.2)(less@4.2.0): dependencies: - '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(vite@5.4.11(@types/node@22.9.0)(less@4.2.0)) - '@vitest/pretty-format': 2.1.4 - '@vitest/runner': 2.1.4 - '@vitest/snapshot': 2.1.4 - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + '@vitest/expect': 2.1.8 + '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.2)(less@4.2.0)) + '@vitest/pretty-format': 2.1.8 + '@vitest/runner': 2.1.8 + '@vitest/snapshot': 2.1.8 + '@vitest/spy': 2.1.8 + '@vitest/utils': 2.1.8 chai: 5.1.2 debug: 4.3.7 expect-type: 1.1.0 magic-string: 0.30.12 pathe: 1.1.2 - std-env: 3.7.0 + std-env: 3.8.0 tinybench: 2.9.0 tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.9.0)(less@4.2.0) - vite-node: 2.1.4(@types/node@22.9.0)(less@4.2.0) + vite: 5.4.11(@types/node@22.10.2)(less@4.2.0) + vite-node: 2.1.8(@types/node@22.10.2)(less@4.2.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.10.2 transitivePeerDependencies: - less - lightningcss @@ -18345,19 +18842,19 @@ snapshots: vscode-uri@3.0.8: {} - vue-demi@0.14.8(vue@3.4.36(typescript@5.4.5)): + vue-demi@0.14.8(vue@3.4.36(typescript@5.7.2)): dependencies: - vue: 3.4.36(typescript@5.4.5) + vue: 3.4.36(typescript@5.7.2) - vue@3.4.36(typescript@5.4.5): + vue@3.4.36(typescript@5.7.2): dependencies: '@vue/compiler-dom': 3.4.36 '@vue/compiler-sfc': 3.4.36 '@vue/runtime-dom': 3.4.36 - '@vue/server-renderer': 3.4.36(vue@3.4.36(typescript@5.4.5)) + '@vue/server-renderer': 3.4.36(vue@3.4.36(typescript@5.7.2)) '@vue/shared': 3.4.36 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 warning@4.0.3: dependencies: @@ -18371,7 +18868,7 @@ snapshots: web-streams-polyfill@4.0.0-beta.3: {} - web-tree-sitter@0.24.4: {} + web-tree-sitter@0.24.5: {} webidl-conversions@3.0.1: {} @@ -18502,6 +18999,8 @@ snapshots: yaml@2.5.0: {} + yaml@2.6.1: {} + yargs-parser@21.1.1: {} yargs@17.7.2: @@ -18535,21 +19034,27 @@ snapshots: yoctocolors@2.1.0: {} - zod-to-json-schema@3.22.5(zod@3.23.8): + zod-to-json-schema@3.22.5(zod@3.24.1): + dependencies: + zod: 3.24.1 + + zod-to-json-schema@3.24.1(zod@3.24.1): dependencies: - zod: 3.23.8 + zod: 3.24.1 - zod-validation-error@3.3.0(zod@3.23.8): + zod-validation-error@3.3.0(zod@3.24.1): dependencies: - zod: 3.23.8 + zod: 3.24.1 zod@3.23.8: {} - zustand@5.0.1(immer@10.1.1)(react@19.0.0-rc-ed15d500-20241110)(types-react@19.0.0-rc.1)(use-sync-external-store@1.2.2(react@19.0.0-rc-ed15d500-20241110)): + zod@3.24.1: {} + + zustand@5.0.2(@types/react@19.0.2)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.2.2(react@19.0.0)): optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 + '@types/react': 19.0.2 immer: 10.1.1 - react: 19.0.0-rc-ed15d500-20241110 - use-sync-external-store: 1.2.2(react@19.0.0-rc-ed15d500-20241110) + react: 19.0.0 + use-sync-external-store: 1.2.2(react@19.0.0) zwitch@2.0.4: {} diff --git a/src/extension/actions/ai-model-actions.ts b/src/extension/actions/ai-model-actions.ts new file mode 100644 index 0000000..5a04049 --- /dev/null +++ b/src/extension/actions/ai-model-actions.ts @@ -0,0 +1,148 @@ +import { ModelProviderFactory } from '@extension/ai/model-providers/helpers/factory' +import { logger } from '@extension/logger' +import { aiModelDB } from '@extension/lowdb/ai-model-db' +import { aiProviderDB } from '@extension/lowdb/ai-provider-db' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' +import { + AIProviderType, + type AIModel, + type AIModelFeature, + type AIProvider, + type FeatureModelSettingKey, + type FeatureModelSettingValue +} from '@shared/entities' + +export class AIModelActionsCollection extends ServerActionCollection { + readonly categoryName = 'aiModel' + + async getModels(context: ActionContext<{}>) { + return await aiModelDB.getAll() + } + + async getModelsByProviderOrBaseUrl( + context: ActionContext<{ + providerOrBaseUrl: AIProviderType | string + }> + ) { + const { actionParams } = context + const { providerOrBaseUrl } = actionParams + const models = await aiModelDB.getAll() + return models.filter(model => model.providerOrBaseUrl === providerOrBaseUrl) + } + + async addModel(context: ActionContext>) { + const { actionParams } = context + const { name, providerOrBaseUrl } = actionParams + const all = await aiModelDB.getAll() + const existingModel = all.find( + model => + model.name === name && model.providerOrBaseUrl === providerOrBaseUrl + ) + + if (existingModel) return existingModel + + return await aiModelDB.add(actionParams) + } + + async createOrUpdateModel(context: ActionContext>) { + const { actionParams } = context + return await aiModelDB.createOrUpdate(actionParams) + } + + async batchCreateOrUpdateModels(context: ActionContext[]>) { + const { actionParams } = context + return await aiModelDB.batchCreateOrUpdate(actionParams) + } + + async removeModel(context: ActionContext<{ id: string }>) { + const { actionParams } = context + await aiModelDB.remove(actionParams.id) + } + + async fetchRemoteModelNames( + context: ActionContext<{ provider: AIProvider }> + ) { + const { actionParams } = context + try { + const modelProvider = ModelProviderFactory.createProvider( + actionParams.provider, + undefined + ) + return await modelProvider.getSupportModelNames() + } catch (error) { + logger.error('Failed to fetch remote models:', error) + return [] as string[] + } + } + + async testModelFeatures( + context: ActionContext<{ + provider: AIProvider + model: AIModel + features: AIModelFeature[] + }> + ) { + const { actionParams } = context + const { provider, model, features } = actionParams + const modelProvider = ModelProviderFactory.createProvider(provider, model) + + return await modelProvider.testModelFeatures(features) + } + + async getProviderAndModelForFeature( + context: ActionContext<{ key: FeatureModelSettingKey }> + ): Promise<{ provider?: AIProvider; model?: AIModel }> { + const { actionParams } = context + const { key } = actionParams + const defaultResult = { provider: undefined, model: undefined } + const setting = await ModelProviderFactory.getModelSettingForFeature( + key, + false + ) + + if (!setting) { + return defaultResult + } + + const provider = (await aiProviderDB.getAll()).find( + p => p.id === setting.providerId + ) + + if (!provider) { + return defaultResult + } + + const model = (await aiModelDB.getAll()).find( + m => + m.name === setting.modelName && + m.providerOrBaseUrl === + (provider.type === AIProviderType.Custom + ? provider.extraFields.customBaseUrl + : provider.type) + ) + + if (!model) { + return { + ...defaultResult, + provider + } + } + + return { + provider, + model + } + } + + async setModelSettingForFeature( + context: ActionContext<{ + key: FeatureModelSettingKey + value: FeatureModelSettingValue + }> + ) { + const { actionParams } = context + const { key, value } = actionParams + return await ModelProviderFactory.setModelSettingForFeature(key, value) + } +} diff --git a/src/extension/actions/ai-provider-actions.ts b/src/extension/actions/ai-provider-actions.ts new file mode 100644 index 0000000..4beb3ef --- /dev/null +++ b/src/extension/actions/ai-provider-actions.ts @@ -0,0 +1,38 @@ +import { aiProviderDB } from '@extension/lowdb/ai-provider-db' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' +import type { AIProvider } from '@shared/entities' + +export class AIProviderActionsCollection extends ServerActionCollection { + readonly categoryName = 'aiProvider' + + async getProviders(context: ActionContext<{}>) { + const providers = await aiProviderDB.getAll() + return providers.sort((a, b) => b.order - a.order) + } + + async addProvider(context: ActionContext>) { + const { actionParams } = context + return await aiProviderDB.add(actionParams) + } + + async updateProvider( + context: ActionContext & { id: string }> + ) { + const { actionParams } = context + const { id, ...updates } = actionParams + return await aiProviderDB.update(id, updates) + } + + async updateProviders( + context: ActionContext & { id: string }[]> + ) { + const { actionParams } = context + return await aiProviderDB.batchUpdate(actionParams) + } + + async removeProvider(context: ActionContext<{ id: string }>) { + const { actionParams } = context + await aiProviderDB.remove(actionParams.id) + } +} diff --git a/src/extension/webview-api/controllers/apply-controller.ts b/src/extension/actions/apply-actions.ts similarity index 67% rename from src/extension/webview-api/controllers/apply-controller.ts rename to src/extension/actions/apply-actions.ts index 551f70f..2b640d6 100644 --- a/src/extension/webview-api/controllers/apply-controller.ts +++ b/src/extension/actions/apply-actions.ts @@ -3,13 +3,13 @@ import { VsCodeFS } from '@extension/file-utils/vscode-fs' import { InlineDiffRegister } from '@extension/registers/inline-diff-register' import type { InlineDiffTask } from '@extension/registers/inline-diff-register/types' import { HumanMessage, SystemMessage } from '@langchain/core/messages' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' import { FeatureModelSettingKey } from '@shared/entities' import * as vscode from 'vscode' -import { Controller } from '../types' - -export class ApplyController extends Controller { - readonly name = 'apply' +export class ApplyActionsCollection extends ServerActionCollection { + readonly categoryName = 'apply' private get inlineDiffProvider() { return this.registerManager?.getRegister(InlineDiffRegister) @@ -17,20 +17,21 @@ export class ApplyController extends Controller { } async *applyCode( - req: { + context: ActionContext<{ path: string code: string selectionRange?: vscode.Range cleanLast?: boolean - }, - abortController?: AbortController - ): AsyncGenerator { - if (!req.path || !req.code || !this.inlineDiffProvider) return + }> + ): AsyncGenerator { + const { abortController, actionParams } = context + const { path, code, selectionRange, cleanLast } = actionParams + if (!path || !code || !this.inlineDiffProvider) return - const originalCode = await VsCodeFS.readFileOrOpenDocumentContent(req.path) - const taskId = req.path + const originalCode = await VsCodeFS.readFileOrOpenDocumentContent(path) + const taskId = path - if (req.cleanLast) { + if (cleanLast) { await this.inlineDiffProvider.resetAndCleanHistory(taskId) } @@ -45,7 +46,7 @@ export class ApplyController extends Controller { new SystemMessage( ` You are a code editor assistant. You are given a file path and a code snippet. You need to apply the code snippet to the file at the given path. -The file path is ${req.path}. +The file path is ${path}. The original code is: ${originalCode} @@ -54,15 +55,15 @@ Your task is to apply the code snippet which from the user to the original code. Don't reply with anything except the code. ` ), - new HumanMessage(req.code) + new HumanMessage(code) ]) return aiStream } const uri = vscode.window.visibleTextEditors.find( - editor => editor.document.uri.toString() === req.path - )?.document.uri || vscode.Uri.file(req.path) + editor => editor.document.uri.toString() === path + )?.document.uri || vscode.Uri.file(path) const document = await vscode.workspace.openTextDocument(uri) const fullRange = new vscode.Range( 0, @@ -70,12 +71,12 @@ Don't reply with anything except the code. document.lineCount - 1, document.lineAt(document.lineCount - 1).text.length ) - const selectionRange = req.selectionRange || fullRange + const finalSelectionRange = selectionRange || fullRange await this.inlineDiffProvider.createTask( taskId, uri, - selectionRange, + finalSelectionRange, '', abortController ) @@ -83,10 +84,14 @@ Don't reply with anything except the code. yield* this.inlineDiffProvider.startStreamTask(taskId, buildAiStream) } - async interruptApplyCode(req: { path: string }): Promise { - if (!req.path || !this.inlineDiffProvider) return + async interruptApplyCode( + context: ActionContext<{ path: string }> + ): Promise { + const { actionParams } = context + const { path } = actionParams + if (!path || !this.inlineDiffProvider) return - const taskId = req.path + const taskId = path await this.inlineDiffProvider.resetAndCleanHistory(taskId) } } diff --git a/src/extension/webview-api/controllers/chat-controller.ts b/src/extension/actions/chat-actions.ts similarity index 53% rename from src/extension/webview-api/controllers/chat-controller.ts rename to src/extension/actions/chat-actions.ts index fc18a2d..9cb3de7 100644 --- a/src/extension/webview-api/controllers/chat-controller.ts +++ b/src/extension/actions/chat-actions.ts @@ -1,18 +1,18 @@ +import { ChatContextProcessor } from '@extension/chat' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' import type { ChatContext, Conversation } from '@shared/entities' -import { ChatContextProcessor } from '../chat-context-processor' -import { Controller } from '../types' - -export class ChatController extends Controller { - readonly name = 'chat' +export class ChatActionsCollection extends ServerActionCollection { + readonly categoryName = 'chat' async *streamChat( - req: { + context: ActionContext<{ chatContext: ChatContext - }, - abortController?: AbortController + }> ): AsyncGenerator { - const { chatContext } = req + const { abortController, actionParams } = context + const { chatContext } = actionParams const chatContextProcessor = new ChatContextProcessor( this.registerManager, this.commandManager diff --git a/src/extension/actions/chat-session-actions.ts b/src/extension/actions/chat-session-actions.ts new file mode 100644 index 0000000..b9b1385 --- /dev/null +++ b/src/extension/actions/chat-session-actions.ts @@ -0,0 +1,192 @@ +import { aidePaths } from '@extension/file-utils/paths' +import { VsCodeFS } from '@extension/file-utils/vscode-fs' +import { logger } from '@extension/logger' +import { chatSessionsDB } from '@extension/lowdb/chat-sessions-db' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' +import { + ChatContextEntity, + type ChatContext, + type ChatSession, + type Conversation +} from '@shared/entities' +import { settledPromiseResults } from '@shared/utils/common' +import { v4 as uuidv4 } from 'uuid' + +export class ChatSessionActionsCollection extends ServerActionCollection { + readonly categoryName = 'chatSession' + + private getSessionFilePath(sessionId: string): string { + return aidePaths.getSessionFilePath(sessionId) + } + + async createSession( + context: ActionContext<{ chatContext: ChatContext }> + ): Promise { + const { actionParams } = context + const { chatContext } = actionParams + const chatSession = new ChatContextEntity(chatContext).toChatSession() + const now = new Date().getTime() + const session = await chatSessionsDB.add({ + ...chatSession, + createdAt: now, + updatedAt: now + }) + + await VsCodeFS.writeJsonFile(this.getSessionFilePath(session.id), { + ...chatContext, + createdAt: now, + updatedAt: now + }) + + return session + } + + async getChatContext( + context: ActionContext<{ sessionId: string }> + ): Promise { + const { actionParams } = context + const { sessionId } = actionParams + const filePath = this.getSessionFilePath(sessionId) + try { + return await VsCodeFS.readJsonFile(filePath) + } catch (error) { + logger.error(`Failed to read session file: ${filePath}`, error) + return null + } + } + + async updateSession( + context: ActionContext<{ chatContext: ChatContext }> + ): Promise { + const { actionParams } = context + const { chatContext } = actionParams + const now = new Date().getTime() + const session = await chatSessionsDB.update(chatContext.id, { + ...new ChatContextEntity(chatContext).toChatSession(), + updatedAt: now + }) + + if (session) { + await VsCodeFS.writeJsonFile(this.getSessionFilePath(session.id), { + ...chatContext, + updatedAt: now + }) + } + } + + async createOrUpdateSession( + context: ActionContext<{ chatContext: ChatContext }> + ): Promise { + const { actionParams } = context + const { chatContext } = actionParams + const now = new Date().getTime() + const session = await chatSessionsDB.createOrUpdate({ + ...new ChatContextEntity(chatContext).toChatSession(), + updatedAt: now + }) + + await VsCodeFS.writeJsonFile(this.getSessionFilePath(session.id), { + ...chatContext, + updatedAt: now + }) + } + + async duplicateSessionById( + context: ActionContext<{ sessionId: string }> + ): Promise { + const { actionParams } = context + const { sessionId } = actionParams + const chatContext = await this.getChatContext({ + ...context, + actionParams: { sessionId } + }) + + if (!chatContext) throw new Error('Session not found') + + const newSession = await this.createSession({ + ...context, + actionParams: { + chatContext: { + ...chatContext, + id: uuidv4() + } + } + }) + + return newSession + } + + async ensureASessionExists(context: ActionContext<{}>): Promise { + const sessions = await this.getAllSessions(context) + if (sessions.length === 0) { + await this.createSession({ + ...context, + actionParams: { + chatContext: new ChatContextEntity().entity + } + }) + } + } + + async deleteSession( + context: ActionContext<{ sessionId: string }> + ): Promise { + const { actionParams } = context + const { sessionId } = actionParams + await chatSessionsDB.remove(sessionId) + await VsCodeFS.unlink(this.getSessionFilePath(sessionId)) + } + + async deleteSessions( + context: ActionContext<{ sessionIds: string[] }> + ): Promise { + const { actionParams } = context + const { sessionIds } = actionParams + await chatSessionsDB.batchRemove(sessionIds) + await settledPromiseResults( + sessionIds.map(id => VsCodeFS.unlink(this.getSessionFilePath(id))) + ) + } + + async getAllSessions(context: ActionContext<{}>): Promise { + return await chatSessionsDB.getAll() + } + + async searchSessions( + context: ActionContext<{ query: string }> + ): Promise { + const { actionParams } = context + const { query } = actionParams + const sessions = await chatSessionsDB.search(query) + const results: ChatSession[] = [] + + for (const session of sessions) { + const chatContext = await this.getChatContext({ + ...context, + actionParams: { sessionId: session.id } + }) + if ( + chatContext && + this.searchInConversations(chatContext.conversations, query) + ) { + results.push(session) + } + } + + return results + } + + private searchInConversations( + conversations: Conversation[], + query: string + ): boolean { + return conversations.some(conv => + conv.contents.some( + content => + content.type === 'text' && + content.text.toLowerCase().includes(query.toLowerCase()) + ) + ) + } +} diff --git a/src/extension/webview-api/controllers/codebase-controller.ts b/src/extension/actions/codebase-actions.ts similarity index 50% rename from src/extension/webview-api/controllers/codebase-controller.ts rename to src/extension/actions/codebase-actions.ts index 7a35c41..37bf429 100644 --- a/src/extension/webview-api/controllers/codebase-controller.ts +++ b/src/extension/actions/codebase-actions.ts @@ -1,16 +1,17 @@ +import type { ReIndexType } from '@extension/chat/vectordb/base-indexer' import { CodebaseWatcherRegister } from '@extension/registers/codebase-watcher-register' - -import type { ProgressInfo } from '../chat-context-processor/utils/progress-reporter' -import type { ReIndexType } from '../chat-context-processor/vectordb/base-indexer' -import { Controller } from '../types' - -export class CodebaseController extends Controller { - readonly name = 'codebase' - - async *reindexCodebase(req: { - type: ReIndexType - }): AsyncGenerator { - const { type } = req +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' +import type { ProgressInfo } from '@webview/types/chat' + +export class CodebaseActionsCollection extends ServerActionCollection { + readonly categoryName = 'codebase' + + async *reindexCodebase( + context: ActionContext<{ type: ReIndexType }> + ): AsyncGenerator { + const { actionParams } = context + const { type } = actionParams const codebaseWatcherRegister = this.registerManager.getRegister( CodebaseWatcherRegister ) diff --git a/src/extension/webview-api/controllers/doc-controller.ts b/src/extension/actions/doc-actions.ts similarity index 50% rename from src/extension/webview-api/controllers/doc-controller.ts rename to src/extension/actions/doc-actions.ts index 4b13d79..6c9982e 100644 --- a/src/extension/webview-api/controllers/doc-controller.ts +++ b/src/extension/actions/doc-actions.ts @@ -1,95 +1,107 @@ -import { aidePaths } from '@extension/file-utils/paths' -import { logger } from '@extension/logger' - import { DocCrawler, type CrawlerOptions -} from '../chat-context-processor/utils/doc-crawler' -import type { ProgressInfo } from '../chat-context-processor/utils/progress-reporter' -import type { ReIndexType } from '../chat-context-processor/vectordb/base-indexer' -import { DocIndexer } from '../chat-context-processor/vectordb/doc-indexer' -import { docSitesDB } from '../lowdb/doc-sites-db' -import { Controller } from '../types' +} from '@extension/chat/utils/doc-crawler' +import type { ReIndexType } from '@extension/chat/vectordb/base-indexer' +import { DocIndexer } from '@extension/chat/vectordb/doc-indexer' +import { aidePaths } from '@extension/file-utils/paths' +import { logger } from '@extension/logger' +import { docSitesDB } from '@extension/lowdb/doc-sites-db' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' +import type { ProgressInfo } from '@webview/types/chat' -export class DocController extends Controller { - readonly name = 'doc' +export class DocActionsCollection extends ServerActionCollection { + readonly categoryName = 'doc' private docCrawlers: Record = {} private docIndexers: Record = {} - async getDocSites() { + async getDocSites(context: ActionContext<{}>) { return await docSitesDB.getAll() } - async addDocSite(request: { name: string; url: string }) { - return await docSitesDB.add(request) + async addDocSite(context: ActionContext<{ name: string; url: string }>) { + const { actionParams } = context + const { name, url } = actionParams + return await docSitesDB.add({ name, url }) } - async removeDocSite(request: { id: string }) { - await docSitesDB.remove(request.id) - this.disposeResources(request.id) + async removeDocSite(context: ActionContext<{ id: string }>) { + const { actionParams } = context + const { id } = actionParams + await docSitesDB.remove(id) + this.disposeResources(id) } - async removeDocSites(request: { ids: string[] }) { - await docSitesDB.batchRemove(request.ids) - request.ids.forEach(id => this.disposeResources(id)) + async removeDocSites(context: ActionContext<{ ids: string[] }>) { + const { actionParams } = context + const { ids } = actionParams + await docSitesDB.batchRemove(ids) + ids.forEach(id => this.disposeResources(id)) } - async *crawlDocs(request: { - id: string - options?: Partial - }): AsyncGenerator { + async *crawlDocs( + context: ActionContext<{ + id: string + options?: Partial + }> + ): AsyncGenerator { + const { actionParams } = context + const { id, options } = actionParams try { - const site = await this.findSiteById(request.id) - if (!site) throw new Error('找不到文档站点') - - const crawler = this.initiateCrawler( - request.id, - site.url, - request.options - ) + const site = await this.findSiteById(id) + if (!site) throw new Error('can not find doc site') + + const crawler = this.initiateCrawler(id, site.url, options) const crawlingCompleted = crawler.crawl() yield* this.reportProgress(crawler.progressReporter.getProgressIterator()) await crawlingCompleted - await docSitesDB.updateStatus(request.id, { isCrawled: true }) - logger.log('文档抓取完成') + await docSitesDB.updateStatus(id, { isCrawled: true }) + logger.log('docs crawled') } finally { - this.disposeCrawler(request.id) + this.disposeCrawler(id) } } async *reindexDocs( - request: { id: string }, - type: ReIndexType = 'full' + context: ActionContext<{ id: string; type: ReIndexType }> ): AsyncGenerator { + const { actionParams } = context + const { id, type } = actionParams try { - const site = await this.findSiteById(request.id) + const site = await this.findSiteById(id) if (!site) throw new Error('can not find doc site') if (!site.isCrawled) throw new Error('please crawl the site first') - const indexer = await this.initiateIndexer(request.id) + const indexer = await this.initiateIndexer(id) await indexer.initialize() const indexingCompleted = indexer.reindexWorkspace(type) yield* this.reportProgress(indexer.progressReporter.getProgressIterator()) await indexingCompleted - await docSitesDB.updateStatus(request.id, { isIndexed: true }) - logger.log('文档索引完成') + await docSitesDB.updateStatus(id, { isIndexed: true }) + logger.log('docs indexed') } finally { - this.disposeIndexer(request.id) + this.disposeIndexer(id) } } - async updateDocSite(request: { id: string; name: string; url: string }) { - const { id, ...updates } = request + async updateDocSite( + context: ActionContext<{ id: string; name: string; url: string }> + ) { + const { actionParams } = context + const { id, ...updates } = actionParams return await docSitesDB.update(id, updates) } - async searchDocSites(query: string) { + async searchDocSites(context: ActionContext<{ query: string }>) { + const { actionParams } = context + const { query } = actionParams const sites = await docSitesDB.getAll() return sites.filter( site => diff --git a/src/extension/webview-api/controllers/file-controller.ts b/src/extension/actions/file-actions.ts similarity index 51% rename from src/extension/webview-api/controllers/file-controller.ts rename to src/extension/actions/file-actions.ts index d39782a..60dc6cf 100644 --- a/src/extension/webview-api/controllers/file-controller.ts +++ b/src/extension/actions/file-actions.ts @@ -11,66 +11,98 @@ import { import { VsCodeFS } from '@extension/file-utils/vscode-fs' import { logger } from '@extension/logger' import { getWorkspaceFolder } from '@extension/utils' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' import type { EditorError, TreeInfo } from '@shared/plugins/fs-plugin/types' import * as vscode from 'vscode' -import { Controller } from '../types' - -export class FileController extends Controller { - readonly name = 'file' - - async readFile(req: { - path: string - encoding?: BufferEncoding - }): Promise { - return await VsCodeFS.readFileOrOpenDocumentContent(req.path, req.encoding) +export class FileActionsCollection extends ServerActionCollection { + readonly categoryName = 'file' + + async readFile( + context: ActionContext<{ + path: string + encoding?: BufferEncoding + }> + ): Promise { + const { actionParams } = context + const { path, encoding } = actionParams + return await VsCodeFS.readFileOrOpenDocumentContent(path, encoding) } - async writeFile(req: { - path: string - data: string - encoding?: BufferEncoding - }): Promise { - await VsCodeFS.writeFile(req.path, req.data, req.encoding) + async writeFile( + context: ActionContext<{ + path: string + data: string + encoding?: BufferEncoding + }> + ): Promise { + const { actionParams } = context + const { path, data, encoding } = actionParams + await VsCodeFS.writeFile(path, data, encoding) } - async mkdir(req: { path: string; recursive?: boolean }): Promise { - await VsCodeFS.mkdir(req.path, { recursive: req.recursive }) + async mkdir( + context: ActionContext<{ path: string; recursive?: boolean }> + ): Promise { + const { actionParams } = context + const { path, recursive } = actionParams + await VsCodeFS.mkdir(path, { recursive }) } - async rmdir(req: { path: string; recursive?: boolean }): Promise { - await VsCodeFS.rmdir(req.path, { recursive: req.recursive }) + async rmdir( + context: ActionContext<{ path: string; recursive?: boolean }> + ): Promise { + const { actionParams } = context + const { path, recursive } = actionParams + await VsCodeFS.rmdir(path, { recursive }) } - async unlink(req: { path: string }): Promise { - await VsCodeFS.unlink(req.path) + async unlink(context: ActionContext<{ path: string }>): Promise { + const { actionParams } = context + const { path } = actionParams + await VsCodeFS.unlink(path) } - async rename(req: { oldPath: string; newPath: string }): Promise { - await VsCodeFS.rename(req.oldPath, req.newPath) + async rename( + context: ActionContext<{ oldPath: string; newPath: string }> + ): Promise { + const { actionParams } = context + const { oldPath, newPath } = actionParams + await VsCodeFS.rename(oldPath, newPath) } - async stat(req: { path: string }): Promise { - return await VsCodeFS.stat(req.path) + async stat( + context: ActionContext<{ path: string }> + ): Promise { + const { actionParams } = context + const { path } = actionParams + return await VsCodeFS.stat(path) } - async readdir(req: { path: string }): Promise { - return await VsCodeFS.readdir(req.path) + async readdir(context: ActionContext<{ path: string }>): Promise { + const { actionParams } = context + const { path } = actionParams + return await VsCodeFS.readdir(path) } - async getFullPath(req: { - path: string - returnNullIfNotExists?: boolean - }): Promise { + async getFullPath( + context: ActionContext<{ + path: string + returnNullIfNotExists?: boolean + }> + ): Promise { + const { actionParams } = context + const { path: filePath, returnNullIfNotExists } = actionParams try { const workspaceFolder = getWorkspaceFolder() - const absolutePath = path.isAbsolute(req.path) - ? req.path - : path.join(workspaceFolder.uri.fsPath, req.path) + const absolutePath = path.isAbsolute(filePath) + ? filePath + : path.join(workspaceFolder.uri.fsPath, filePath) const stat = await VsCodeFS.stat(absolutePath) if ( - req.returnNullIfNotExists && + returnNullIfNotExists && stat.type !== vscode.FileType.File && stat.type !== vscode.FileType.Directory ) @@ -82,28 +114,32 @@ export class FileController extends Controller { } } - async getFileInfoForMessage(req: { - relativePath: string - startLine?: number - endLine?: number - }): Promise { + async getFileInfoForMessage( + context: ActionContext<{ + relativePath: string + startLine?: number + endLine?: number + }> + ): Promise { + const { actionParams } = context + const { relativePath, startLine, endLine } = actionParams try { const workspaceFolder = getWorkspaceFolder() - const fullPath = path.join(workspaceFolder.uri.fsPath, req.relativePath) + const fullPath = path.join(workspaceFolder.uri.fsPath, relativePath) const fileInfo = await VsCodeFS.stat(fullPath) if (!fileInfo || fileInfo.type !== vscode.FileType.File) return null const fileContent = await VsCodeFS.readFile(fullPath) const lines = fileContent.split('\n') - const startLine = req.startLine ?? 0 - const endLine = req.endLine ?? lines.length - 1 - const code = lines.slice(startLine, endLine + 1).join('\n') + const finalStartLine = startLine ?? 0 + const finalEndLine = endLine ?? lines.length - 1 + const code = lines.slice(finalStartLine, finalEndLine + 1).join('\n') return { type: 'file', content: code, - relativePath: req.relativePath, + relativePath, fullPath } } catch (error) { @@ -112,14 +148,19 @@ export class FileController extends Controller { } } - async openFileInEditor(req: { - path: string - startLine?: number - }): Promise { - if (!req.path) return + async openFileInEditor( + context: ActionContext<{ + path: string + startLine?: number + }> + ): Promise { + const { actionParams } = context + const { path: filePath, startLine } = actionParams + + if (!filePath) return - const document = await vscode.workspace.openTextDocument(req.path) - const startPosition = new vscode.Position(req.startLine ?? 0, 0) + const document = await vscode.workspace.openTextDocument(filePath) + const startPosition = new vscode.Position(startLine ?? 0, 0) await vscode.window.showTextDocument(document, { preview: true, @@ -127,33 +168,39 @@ export class FileController extends Controller { }) } - async traverseWorkspaceFiles(req: { - filesOrFolders: string[] - }): Promise { + async traverseWorkspaceFiles( + context: ActionContext<{ filesOrFolders: string[] }> + ): Promise { + const { actionParams } = context + const { filesOrFolders } = actionParams const workspaceFolder = getWorkspaceFolder() return await traverseFileOrFolders({ type: 'file', - filesOrFolders: req.filesOrFolders, + filesOrFolders, isGetFileContent: false, workspacePath: workspaceFolder.uri.fsPath, itemCallback: fileInfo => fileInfo }) } - async traverseWorkspaceFolders(req: { - folders: string[] - }): Promise { + async traverseWorkspaceFolders( + context: ActionContext<{ folders: string[] }> + ): Promise { + const { actionParams } = context + const { folders } = actionParams const workspaceFolder = getWorkspaceFolder() return await traverseFileOrFolders({ type: 'folder', - filesOrFolders: req.folders, + filesOrFolders: folders, isGetFileContent: false, workspacePath: workspaceFolder.uri.fsPath, itemCallback: folderInfo => folderInfo }) } - async getCurrentEditorErrors(): Promise { + async getCurrentEditorErrors( + context: ActionContext<{}> + ): Promise { const errors: EditorError[] = [] try { @@ -227,12 +274,17 @@ export class FileController extends Controller { } } - async getTreeInfo(req: { path: string }): Promise { + async getTreeInfo( + context: ActionContext<{ path: string }> + ): Promise { + const { actionParams } = context + const { path: filePath } = actionParams + try { const workspaceFolder = getWorkspaceFolder() - const fullPath = path.isAbsolute(req.path) - ? req.path - : path.join(workspaceFolder.uri.fsPath, req.path) + const fullPath = path.isAbsolute(filePath) + ? filePath + : path.join(workspaceFolder.uri.fsPath, filePath) return await getTreeInfo(fullPath) } catch (error) { @@ -241,9 +293,14 @@ export class FileController extends Controller { } } - async getWorkspaceTreesInfo(req: { depth?: number }): Promise { + async getWorkspaceTreesInfo( + context: ActionContext<{ depth?: number }> + ): Promise { + const { actionParams } = context + const { depth } = actionParams + try { - return await getWorkspaceTreesInfo(req.depth) + return await getWorkspaceTreesInfo(depth) } catch (error) { logger.error('Error getting workspace trees info:', error) return [] diff --git a/src/extension/webview-api/controllers/git-controller.ts b/src/extension/actions/git-actions.ts similarity index 74% rename from src/extension/webview-api/controllers/git-controller.ts rename to src/extension/actions/git-actions.ts index 656a87c..25c55fe 100644 --- a/src/extension/webview-api/controllers/git-controller.ts +++ b/src/extension/actions/git-actions.ts @@ -1,14 +1,14 @@ import type { CommandManager } from '@extension/commands/command-manager' import type { RegisterManager } from '@extension/registers/register-manager' import { getWorkspaceFolder } from '@extension/utils' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' import type { GitCommit, GitDiff } from '@shared/plugins/git-plugin/types' import { settledPromiseResults } from '@shared/utils/common' import simpleGit, { SimpleGit } from 'simple-git' -import { Controller } from '../types' - -export class GitController extends Controller { - readonly name = 'git' +export class GitActionsCollection extends ServerActionCollection { + readonly categoryName = 'git' private git: SimpleGit @@ -21,8 +21,11 @@ export class GitController extends Controller { this.git = simpleGit(workspaceFolder.uri.fsPath) } - async getHistoryCommits(req: { maxCount?: number }): Promise { - const { maxCount = 50 } = req + async getHistoryCommits( + context: ActionContext<{ maxCount?: number }> + ): Promise { + const { actionParams } = context + const { maxCount = 50 } = actionParams const log = await this.git.log({ maxCount }) const commits: GitCommit[] = await settledPromiseResults( @@ -41,11 +44,12 @@ export class GitController extends Controller { return commits } - async getDiffWithRemoteMainBranch(req: { - file?: string - }): Promise { + async getDiffWithRemoteMainBranch( + context: ActionContext<{ file?: string }> + ): Promise { + const { actionParams } = context + const { file } = actionParams const mainBranchName = await this.getMainBranchName() - const { file } = req let diff: string if (file) { @@ -57,8 +61,11 @@ export class GitController extends Controller { return this.parseDiff(diff) } - async getDiffWithWorkingState(req: { file?: string }): Promise { - const { file } = req + async getDiffWithWorkingState( + context: ActionContext<{ file?: string }> + ): Promise { + const { actionParams } = context + const { file } = actionParams let diff: string if (file) { @@ -99,15 +106,15 @@ export class GitController extends Controller { return diffs } - async getCurrentBranch(): Promise { + async getCurrentBranch(context: ActionContext<{}>): Promise { return await this.git.revparse(['--abbrev-ref', 'HEAD']) } - async getStatus(): Promise { + async getStatus(context: ActionContext<{}>): Promise { return await this.git.status() } - async getRemotes(): Promise { + async getRemotes(context: ActionContext<{}>): Promise { const remotes = await this.git.getRemotes(true) return remotes } diff --git a/src/extension/actions/index.ts b/src/extension/actions/index.ts new file mode 100644 index 0000000..73ae388 --- /dev/null +++ b/src/extension/actions/index.ts @@ -0,0 +1,33 @@ +import type { ServerActionCollection } from '@shared/actions/server-action-collection' + +import { AIModelActionsCollection } from './ai-model-actions' +import { AIProviderActionsCollection } from './ai-provider-actions' +import { ApplyActionsCollection } from './apply-actions' +import { ChatActionsCollection } from './chat-actions' +import { ChatSessionActionsCollection } from './chat-session-actions' +import { CodebaseActionsCollection } from './codebase-actions' +import { DocActionsCollection } from './doc-actions' +import { FileActionsCollection } from './file-actions' +import { GitActionsCollection } from './git-actions' +import { MentionActionsCollection } from './mention-actions' +import { SettingsActionsCollection } from './settings-actions' +import { SystemActionsCollection } from './system-actions' +import { TerminalActionsCollection } from './terminal-actions' + +export const serverActionCollections = [ + ChatActionsCollection, + CodebaseActionsCollection, + FileActionsCollection, + TerminalActionsCollection, + GitActionsCollection, + SystemActionsCollection, + DocActionsCollection, + ChatSessionActionsCollection, + ApplyActionsCollection, + SettingsActionsCollection, + AIProviderActionsCollection, + AIModelActionsCollection, + MentionActionsCollection +] as const satisfies (typeof ServerActionCollection)[] + +export type ServerActionCollections = typeof serverActionCollections diff --git a/src/extension/webview-api/controllers/mention-controller.ts b/src/extension/actions/mention-actions.ts similarity index 80% rename from src/extension/webview-api/controllers/mention-controller.ts rename to src/extension/actions/mention-actions.ts index b45b7c0..8528e82 100644 --- a/src/extension/webview-api/controllers/mention-controller.ts +++ b/src/extension/actions/mention-actions.ts @@ -1,14 +1,14 @@ -import { ControllerRegister } from '@extension/registers/controller-register' +import { ActionRegister } from '@extension/registers/action-register' import { ServerPluginRegister } from '@extension/registers/server-plugin-register' import { tryParseJSON } from '@extension/utils' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' import type { Conversation, Mention } from '@shared/entities' import type { RefreshMentionFn } from '@shared/plugins/base/server/create-provider-manager' import { settledPromiseResults } from '@shared/utils/common' -import { Controller } from '../types' - -export class MentionController extends Controller { - readonly name = 'mention' +export class MentionActionsCollection extends ServerActionCollection { + readonly categoryName = 'mention' private async createCompositeRefreshFunction(): Promise { // Get mention utils providers @@ -22,17 +22,15 @@ export class MentionController extends Controller { } // Get controller register - const controllerRegister = - this.registerManager.getRegister(ControllerRegister) - if (!controllerRegister) { - throw new Error('ControllerRegister not found') + const actionRegister = this.registerManager.getRegister(ActionRegister) + if (!actionRegister) { + throw new Error('ActionRegister not found') } // Create refresh functions from all providers const refreshFunctions = await settledPromiseResults( mentionUtilsProviders.map( - async provider => - await provider.createRefreshMentionFn(controllerRegister) + async provider => await provider.createRefreshMentionFn(actionRegister) ) ) @@ -44,8 +42,10 @@ export class MentionController extends Controller { } async refreshConversationMentions( - conversation: Conversation + context: ActionContext<{ conversation: Conversation }> ): Promise { + const { actionParams } = context + const { conversation } = actionParams // Get and compose refresh functions const compositeRefreshFn = await this.createCompositeRefreshFunction() diff --git a/src/extension/actions/settings-actions.ts b/src/extension/actions/settings-actions.ts new file mode 100644 index 0000000..abb1331 --- /dev/null +++ b/src/extension/actions/settings-actions.ts @@ -0,0 +1,134 @@ +import { + globalSettingsDB, + workspaceSettingsDB +} from '@extension/lowdb/settings-db' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' +import { settingKeyItemConfigMap } from '@shared/entities' +import type { + SettingKey, + SettingsSaveType, + SettingValue +} from '@shared/entities' + +export class SettingsActionsCollection extends ServerActionCollection { + readonly categoryName = 'settings' + + async getGlobalSetting( + context: ActionContext<{ key: K }> + ): Promise | null> { + const { actionParams } = context + const { key } = actionParams + + return await globalSettingsDB.getSetting(key) + } + + async setGlobalSetting( + context: ActionContext<{ key: K; value: SettingValue }> + ): Promise { + const { actionParams } = context + const { key, value } = actionParams + await globalSettingsDB.setSetting(key, value) + } + + async getAllGlobalSettings( + context: ActionContext<{}> + ): Promise> { + return await globalSettingsDB.getAllSettings() + } + + async getWorkspaceSetting( + context: ActionContext<{ key: K }> + ): Promise | null> { + const { actionParams } = context + const { key } = actionParams + + return await workspaceSettingsDB.getSetting(key) + } + + async setWorkspaceSetting( + context: ActionContext<{ key: K; value: SettingValue }> + ): Promise { + const { actionParams } = context + const { key, value } = actionParams + await workspaceSettingsDB.setSetting(key, value) + } + + async getAllWorkspaceSettings( + context: ActionContext<{}> + ): Promise> { + return await workspaceSettingsDB.getAllSettings() + } + + async setGlobalSettings( + context: ActionContext<{ + settings: Partial>> + }> + ): Promise { + const { actionParams } = context + const { settings } = actionParams + + for (const [key, value] of Object.entries(settings)) { + await globalSettingsDB.setSetting(key as SettingKey, value) + } + } + + async setWorkspaceSettings( + context: ActionContext<{ + settings: Partial>> + }> + ): Promise { + const { actionParams } = context + const { settings } = actionParams + + for (const [key, value] of Object.entries(settings)) { + await workspaceSettingsDB.setSetting(key as SettingKey, value) + } + } + + private async getSaveType(key: SettingKey): Promise { + return settingKeyItemConfigMap[key].saveType + } + + async getSetting( + context: ActionContext<{ key: SettingKey }> + ): Promise | null> { + const { actionParams } = context + const { key } = actionParams + const saveType = await this.getSaveType(key) + + return saveType === 'global' + ? await globalSettingsDB.getSetting(key) + : await workspaceSettingsDB.getSetting(key) + } + + async setSettings( + context: ActionContext<{ + settings: Partial>> + }> + ): Promise { + const { actionParams } = context + const { settings } = actionParams + + for (const [key, value] of Object.entries(settings)) { + const saveType = await this.getSaveType(key as SettingKey) + if (saveType === 'global') { + await globalSettingsDB.setSetting(key as SettingKey, value) + } else { + await workspaceSettingsDB.setSetting(key as SettingKey, value) + } + } + } + + async getMergedSettings( + context: ActionContext<{}> + ): Promise> { + const globalSettings = await globalSettingsDB.getAllSettings() + const workspaceSettings = await workspaceSettingsDB.getAllSettings() + + return { + ...globalSettings, + ...workspaceSettings // Workspace settings take precedence + } + } +} diff --git a/src/extension/actions/system-actions.ts b/src/extension/actions/system-actions.ts new file mode 100644 index 0000000..5570d18 --- /dev/null +++ b/src/extension/actions/system-actions.ts @@ -0,0 +1,27 @@ +import * as os from 'os' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' + +export interface SystemInfo { + os: string + cpu: string + memory: string + platform: string +} + +export class SystemActionsCollection extends ServerActionCollection { + readonly categoryName = 'system' + + async getSystemInfo(context: ActionContext<{}>): Promise { + return { + os: `${os.type()} ${os.release()}`, + cpu: os.cpus()[0]?.model || 'Unknown', + memory: `${Math.round(os.totalmem() / (1024 * 1024 * 1024))} GB`, + platform: os.platform() + } + } + + async isWindows(context: ActionContext<{}>): Promise { + return os.platform() === 'win32' + } +} diff --git a/src/extension/actions/terminal-actions.ts b/src/extension/actions/terminal-actions.ts new file mode 100644 index 0000000..37fdb74 --- /dev/null +++ b/src/extension/actions/terminal-actions.ts @@ -0,0 +1,20 @@ +import { + TerminalWatcherRegister, + type TerminalInfo +} from '@extension/registers/terminal-watcher-register' +import { ServerActionCollection } from '@shared/actions/server-action-collection' +import type { ActionContext } from '@shared/actions/types' + +export class TerminalActionsCollection extends ServerActionCollection { + readonly categoryName = 'terminal' + + private get terminalWatcher() { + return this.registerManager.getRegister(TerminalWatcherRegister) + } + + async getTerminalsForMention( + context: ActionContext<{}> + ): Promise { + return this.terminalWatcher?.getAllTerminalInfos() || [] + } +} diff --git a/src/extension/ai/model-providers/helpers/factory.ts b/src/extension/ai/model-providers/helpers/factory.ts index f7589e1..bcc0700 100644 --- a/src/extension/ai/model-providers/helpers/factory.ts +++ b/src/extension/ai/model-providers/helpers/factory.ts @@ -1,7 +1,7 @@ +import { aiModelDB } from '@extension/lowdb/ai-model-db' +import { aiProviderDB } from '@extension/lowdb/ai-provider-db' +import { globalSettingsDB } from '@extension/lowdb/settings-db' import { normalizeLineEndings } from '@extension/utils' -import { aiModelDB } from '@extension/webview-api/lowdb/ai-model-db' -import { aiProviderDB } from '@extension/webview-api/lowdb/ai-provider-db' -import { globalSettingsDB } from '@extension/webview-api/lowdb/settings-db' import type { MessageContent } from '@langchain/core/messages' import type { ChatContext } from '@shared/entities' import type { AIModel } from '@shared/entities/ai-model-entity' diff --git a/src/extension/webview-api/chat-context-processor/index.ts b/src/extension/chat/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/index.ts rename to src/extension/chat/index.ts diff --git a/src/extension/webview-api/chat-context-processor/models/README.md b/src/extension/chat/models/README.md similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/README.md rename to src/extension/chat/models/README.md diff --git a/src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/README.md b/src/extension/chat/models/all-MiniLM-L6-v2/README.md similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/README.md rename to src/extension/chat/models/all-MiniLM-L6-v2/README.md diff --git a/src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/config.json b/src/extension/chat/models/all-MiniLM-L6-v2/config.json similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/config.json rename to src/extension/chat/models/all-MiniLM-L6-v2/config.json diff --git a/src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/onnx/model_quantized.onnx b/src/extension/chat/models/all-MiniLM-L6-v2/onnx/model_quantized.onnx similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/onnx/model_quantized.onnx rename to src/extension/chat/models/all-MiniLM-L6-v2/onnx/model_quantized.onnx diff --git a/src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/special_tokens_map.json b/src/extension/chat/models/all-MiniLM-L6-v2/special_tokens_map.json similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/special_tokens_map.json rename to src/extension/chat/models/all-MiniLM-L6-v2/special_tokens_map.json diff --git a/src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/tokenizer.json b/src/extension/chat/models/all-MiniLM-L6-v2/tokenizer.json similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/tokenizer.json rename to src/extension/chat/models/all-MiniLM-L6-v2/tokenizer.json diff --git a/src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/tokenizer_config.json b/src/extension/chat/models/all-MiniLM-L6-v2/tokenizer_config.json similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/tokenizer_config.json rename to src/extension/chat/models/all-MiniLM-L6-v2/tokenizer_config.json diff --git a/src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/vocab.txt b/src/extension/chat/models/all-MiniLM-L6-v2/vocab.txt similarity index 100% rename from src/extension/webview-api/chat-context-processor/models/all-MiniLM-L6-v2/vocab.txt rename to src/extension/chat/models/all-MiniLM-L6-v2/vocab.txt diff --git a/src/extension/webview-api/chat-context-processor/strategies/auto-task-strategy/index.ts b/src/extension/chat/strategies/auto-task-strategy/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/auto-task-strategy/index.ts rename to src/extension/chat/strategies/auto-task-strategy/index.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/base/base-agent.ts b/src/extension/chat/strategies/base/base-agent.ts similarity index 88% rename from src/extension/webview-api/chat-context-processor/strategies/base/base-agent.ts rename to src/extension/chat/strategies/base/base-agent.ts index 3222b8c..29f09a9 100644 --- a/src/extension/webview-api/chat-context-processor/strategies/base/base-agent.ts +++ b/src/extension/chat/strategies/base/base-agent.ts @@ -1,5 +1,5 @@ -import type { BaseGraphState } from '@extension/webview-api/chat-context-processor/strategies/base/base-state' -import type { BaseStrategyOptions } from '@extension/webview-api/chat-context-processor/strategies/base/base-strategy' +import type { BaseGraphState } from '@extension/chat/strategies/base/base-state' +import type { BaseStrategyOptions } from '@extension/chat/strategies/base/base-strategy' import { DynamicStructuredTool } from '@langchain/core/tools' import type { Agent } from '@shared/entities' import { z } from 'zod' diff --git a/src/extension/webview-api/chat-context-processor/strategies/base/base-node.ts b/src/extension/chat/strategies/base/base-node.ts similarity index 94% rename from src/extension/webview-api/chat-context-processor/strategies/base/base-node.ts rename to src/extension/chat/strategies/base/base-node.ts index 9919c07..6330ed3 100644 --- a/src/extension/webview-api/chat-context-processor/strategies/base/base-node.ts +++ b/src/extension/chat/strategies/base/base-node.ts @@ -2,13 +2,13 @@ import type { BaseGraphNode, BaseGraphState -} from '@extension/webview-api/chat-context-processor/strategies/base/base-state' -import type { BaseStrategyOptions } from '@extension/webview-api/chat-context-processor/strategies/base/base-strategy' -import { findCurrentToolsCallParams } from '@extension/webview-api/chat-context-processor/utils/find-current-tools-call-params' -import type { ZodObjectAny } from '@langchain/core/dist/types/zod' +} from '@extension/chat/strategies/base/base-state' +import type { BaseStrategyOptions } from '@extension/chat/strategies/base/base-strategy' +import { findCurrentToolsCallParams } from '@extension/chat/utils/find-current-tools-call-params' import type { ToolMessage } from '@langchain/core/messages' import type { DynamicStructuredTool } from '@langchain/core/tools' import type { Agent, Conversation, ConversationLog } from '@shared/entities' +import type { ZodObjectAny } from '@shared/types/common' import { settledPromiseResults } from '@shared/utils/common' import { produce } from 'immer' import { v4 as uuidv4 } from 'uuid' diff --git a/src/extension/webview-api/chat-context-processor/strategies/base/base-state.ts b/src/extension/chat/strategies/base/base-state.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/base/base-state.ts rename to src/extension/chat/strategies/base/base-state.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/base/base-strategy.ts b/src/extension/chat/strategies/base/base-strategy.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/base/base-strategy.ts rename to src/extension/chat/strategies/base/base-strategy.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/base/index.ts b/src/extension/chat/strategies/base/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/base/index.ts rename to src/extension/chat/strategies/base/index.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/chat-workflow.ts b/src/extension/chat/strategies/chat-strategy/chat-workflow.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/chat-strategy/chat-workflow.ts rename to src/extension/chat/strategies/chat-strategy/chat-workflow.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/index.ts b/src/extension/chat/strategies/chat-strategy/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/chat-strategy/index.ts rename to src/extension/chat/strategies/chat-strategy/index.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/messages-constructors/chat-messages-constructor.ts b/src/extension/chat/strategies/chat-strategy/messages-constructors/chat-messages-constructor.ts similarity index 96% rename from src/extension/webview-api/chat-context-processor/strategies/chat-strategy/messages-constructors/chat-messages-constructor.ts rename to src/extension/chat/strategies/chat-strategy/messages-constructors/chat-messages-constructor.ts index d774f0e..2e3070a 100644 --- a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/messages-constructors/chat-messages-constructor.ts +++ b/src/extension/chat/strategies/chat-strategy/messages-constructors/chat-messages-constructor.ts @@ -1,7 +1,7 @@ +import { processConversationsWithAgents } from '@extension/chat/utils/conversation-utils' import type { CommandManager } from '@extension/commands/command-manager' import type { RegisterManager } from '@extension/registers/register-manager' import { ServerPluginRegister } from '@extension/registers/server-plugin-register' -import { processConversationsWithAgents } from '@extension/webview-api/chat-context-processor/utils/conversation-utils' import { HumanMessage, SystemMessage } from '@langchain/core/messages' import type { ChatContext, LangchainMessage } from '@shared/entities' import { settledPromiseResults } from '@shared/utils/common' diff --git a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/messages-constructors/conversation-message-constructor.ts b/src/extension/chat/strategies/chat-strategy/messages-constructors/conversation-message-constructor.ts similarity index 96% rename from src/extension/webview-api/chat-context-processor/strategies/chat-strategy/messages-constructors/conversation-message-constructor.ts rename to src/extension/chat/strategies/chat-strategy/messages-constructors/conversation-message-constructor.ts index 467fdb3..f8ab697 100644 --- a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/messages-constructors/conversation-message-constructor.ts +++ b/src/extension/chat/strategies/chat-strategy/messages-constructors/conversation-message-constructor.ts @@ -1,4 +1,4 @@ -import { MessageBuilder } from '@extension/webview-api/chat-context-processor/utils/message-builder' +import { MessageBuilder } from '@extension/chat/utils/message-builder' import { HumanMessage } from '@langchain/core/messages' import type { ChatContext, diff --git a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/nodes/agent-node.ts b/src/extension/chat/strategies/chat-strategy/nodes/agent-node.ts similarity index 96% rename from src/extension/webview-api/chat-context-processor/strategies/chat-strategy/nodes/agent-node.ts rename to src/extension/chat/strategies/chat-strategy/nodes/agent-node.ts index 30051be..1dd3f28 100644 --- a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/nodes/agent-node.ts +++ b/src/extension/chat/strategies/chat-strategy/nodes/agent-node.ts @@ -1,6 +1,6 @@ import { ModelProviderFactory } from '@extension/ai/model-providers/helpers/factory' +import { getToolCallsFromMessage } from '@extension/chat/utils/get-tool-calls-from-message' import { ServerPluginRegister } from '@extension/registers/server-plugin-register' -import { getToolCallsFromMessage } from '@extension/webview-api/chat-context-processor/utils/get-tool-calls-from-message' import type { AIMessageChunk } from '@langchain/core/messages' import { type LangchainTool } from '@shared/entities' import { convertToLangchainMessageContents } from '@shared/utils/convert-to-langchain-message-contents' diff --git a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/nodes/generate-node.ts b/src/extension/chat/strategies/chat-strategy/nodes/generate-node.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/chat-strategy/nodes/generate-node.ts rename to src/extension/chat/strategies/chat-strategy/nodes/generate-node.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/chat-strategy/state.ts b/src/extension/chat/strategies/chat-strategy/state.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/chat-strategy/state.ts rename to src/extension/chat/strategies/chat-strategy/state.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/composer-strategy/index.ts b/src/extension/chat/strategies/composer-strategy/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/composer-strategy/index.ts rename to src/extension/chat/strategies/composer-strategy/index.ts diff --git a/src/extension/webview-api/chat-context-processor/strategies/ui-designer-strategy/index.ts b/src/extension/chat/strategies/ui-designer-strategy/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/strategies/ui-designer-strategy/index.ts rename to src/extension/chat/strategies/ui-designer-strategy/index.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/code-chunker.ts b/src/extension/chat/tree-sitter/code-chunker.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/code-chunker.ts rename to src/extension/chat/tree-sitter/code-chunker.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/constants.ts b/src/extension/chat/tree-sitter/constants.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/constants.ts rename to src/extension/chat/tree-sitter/constants.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/c_sharp.ts b/src/extension/chat/tree-sitter/copilot-langs-config/c_sharp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/c_sharp.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/c_sharp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/cpp.ts b/src/extension/chat/tree-sitter/copilot-langs-config/cpp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/cpp.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/cpp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/go.ts b/src/extension/chat/tree-sitter/copilot-langs-config/go.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/go.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/go.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/index.ts b/src/extension/chat/tree-sitter/copilot-langs-config/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/index.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/index.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/java.ts b/src/extension/chat/tree-sitter/copilot-langs-config/java.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/java.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/java.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/javascript.ts b/src/extension/chat/tree-sitter/copilot-langs-config/javascript.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/javascript.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/javascript.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/python.ts b/src/extension/chat/tree-sitter/copilot-langs-config/python.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/python.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/python.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/ruby.ts b/src/extension/chat/tree-sitter/copilot-langs-config/ruby.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/ruby.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/ruby.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/rust.ts b/src/extension/chat/tree-sitter/copilot-langs-config/rust.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/rust.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/rust.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/tsx.ts b/src/extension/chat/tree-sitter/copilot-langs-config/tsx.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/tsx.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/tsx.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/types.ts b/src/extension/chat/tree-sitter/copilot-langs-config/types.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/types.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/types.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/typescript.ts b/src/extension/chat/tree-sitter/copilot-langs-config/typescript.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/copilot-langs-config/typescript.ts rename to src/extension/chat/tree-sitter/copilot-langs-config/typescript.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/c.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/c.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/c.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/c.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/c_sharp.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/c_sharp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/c_sharp.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/c_sharp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/cpp.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/cpp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/cpp.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/cpp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/elisp.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/elisp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/elisp.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/elisp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/elixir.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/elixir.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/elixir.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/elixir.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/go.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/go.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/go.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/go.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/index.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/index.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/index.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/java.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/java.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/java.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/java.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/javascript.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/javascript.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/javascript.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/javascript.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/ocaml.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/ocaml.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/ocaml.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/ocaml.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/php.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/php.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/php.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/php.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/python.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/python.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/python.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/python.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/ql.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/ql.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/ql.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/ql.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/ruby.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/ruby.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/ruby.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/ruby.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/rust.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/rust.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/rust.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/rust.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/typescript.ts b/src/extension/chat/tree-sitter/queries/code-snippet-queries/typescript.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/code-snippet-queries/typescript.ts rename to src/extension/chat/tree-sitter/queries/code-snippet-queries/typescript.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/import-queries/index.ts b/src/extension/chat/tree-sitter/queries/import-queries/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/import-queries/index.ts rename to src/extension/chat/tree-sitter/queries/import-queries/index.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/import-queries/typescript.ts b/src/extension/chat/tree-sitter/queries/import-queries/typescript.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/import-queries/typescript.ts rename to src/extension/chat/tree-sitter/queries/import-queries/typescript.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/c.ts b/src/extension/chat/tree-sitter/queries/tags-queries/c.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/c.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/c.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/c_sharp.ts b/src/extension/chat/tree-sitter/queries/tags-queries/c_sharp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/c_sharp.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/c_sharp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/cpp.ts b/src/extension/chat/tree-sitter/queries/tags-queries/cpp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/cpp.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/cpp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/elisp.ts b/src/extension/chat/tree-sitter/queries/tags-queries/elisp.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/elisp.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/elisp.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/elixir.ts b/src/extension/chat/tree-sitter/queries/tags-queries/elixir.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/elixir.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/elixir.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/elm.ts b/src/extension/chat/tree-sitter/queries/tags-queries/elm.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/elm.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/elm.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/go.ts b/src/extension/chat/tree-sitter/queries/tags-queries/go.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/go.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/go.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/index.ts b/src/extension/chat/tree-sitter/queries/tags-queries/index.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/index.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/index.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/java.ts b/src/extension/chat/tree-sitter/queries/tags-queries/java.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/java.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/java.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/javascript.ts b/src/extension/chat/tree-sitter/queries/tags-queries/javascript.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/javascript.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/javascript.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/ocaml.ts b/src/extension/chat/tree-sitter/queries/tags-queries/ocaml.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/ocaml.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/ocaml.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/php.ts b/src/extension/chat/tree-sitter/queries/tags-queries/php.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/php.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/php.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/python.ts b/src/extension/chat/tree-sitter/queries/tags-queries/python.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/python.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/python.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/ql.ts b/src/extension/chat/tree-sitter/queries/tags-queries/ql.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/ql.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/ql.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/ruby.ts b/src/extension/chat/tree-sitter/queries/tags-queries/ruby.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/ruby.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/ruby.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/rust.ts b/src/extension/chat/tree-sitter/queries/tags-queries/rust.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/rust.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/rust.ts diff --git a/src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/typescript.ts b/src/extension/chat/tree-sitter/queries/tags-queries/typescript.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/tree-sitter/queries/tags-queries/typescript.ts rename to src/extension/chat/tree-sitter/queries/tags-queries/typescript.ts diff --git a/src/extension/webview-api/chat-context-processor/types/langgraph.ts b/src/extension/chat/types/langgraph.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/types/langgraph.ts rename to src/extension/chat/types/langgraph.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/code-snippet-formatter.ts b/src/extension/chat/utils/code-snippet-formatter.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/code-snippet-formatter.ts rename to src/extension/chat/utils/code-snippet-formatter.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/combine-node.ts b/src/extension/chat/utils/combine-node.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/combine-node.ts rename to src/extension/chat/utils/combine-node.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/conversation-utils.ts b/src/extension/chat/utils/conversation-utils.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/conversation-utils.ts rename to src/extension/chat/utils/conversation-utils.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/convert-langchain-message-to-conversation.ts b/src/extension/chat/utils/convert-langchain-message-to-conversation.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/convert-langchain-message-to-conversation.ts rename to src/extension/chat/utils/convert-langchain-message-to-conversation.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/doc-crawler.ts b/src/extension/chat/utils/doc-crawler.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/doc-crawler.ts rename to src/extension/chat/utils/doc-crawler.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/fake-request-headers.ts b/src/extension/chat/utils/fake-request-headers.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/fake-request-headers.ts rename to src/extension/chat/utils/fake-request-headers.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/find-current-tools-call-params.ts b/src/extension/chat/utils/find-current-tools-call-params.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/find-current-tools-call-params.ts rename to src/extension/chat/utils/find-current-tools-call-params.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/get-file-content.ts b/src/extension/chat/utils/get-file-content.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/get-file-content.ts rename to src/extension/chat/utils/get-file-content.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/get-tool-calls-from-message.ts b/src/extension/chat/utils/get-tool-calls-from-message.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/get-tool-calls-from-message.ts rename to src/extension/chat/utils/get-tool-calls-from-message.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/message-builder.ts b/src/extension/chat/utils/message-builder.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/message-builder.ts rename to src/extension/chat/utils/message-builder.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/progress-reporter.ts b/src/extension/chat/utils/progress-reporter.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/progress-reporter.ts rename to src/extension/chat/utils/progress-reporter.ts diff --git a/src/extension/webview-api/chat-context-processor/utils/searxng-search.ts b/src/extension/chat/utils/searxng-search.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/utils/searxng-search.ts rename to src/extension/chat/utils/searxng-search.ts diff --git a/src/extension/webview-api/chat-context-processor/vectordb/base-indexer.ts b/src/extension/chat/vectordb/base-indexer.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/vectordb/base-indexer.ts rename to src/extension/chat/vectordb/base-indexer.ts diff --git a/src/extension/webview-api/chat-context-processor/vectordb/codebase-indexer.ts b/src/extension/chat/vectordb/codebase-indexer.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/vectordb/codebase-indexer.ts rename to src/extension/chat/vectordb/codebase-indexer.ts diff --git a/src/extension/webview-api/chat-context-processor/vectordb/doc-indexer.ts b/src/extension/chat/vectordb/doc-indexer.ts similarity index 100% rename from src/extension/webview-api/chat-context-processor/vectordb/doc-indexer.ts rename to src/extension/chat/vectordb/doc-indexer.ts diff --git a/src/extension/commands/action/command.ts b/src/extension/commands/action/command.ts new file mode 100644 index 0000000..2764ab7 --- /dev/null +++ b/src/extension/commands/action/command.ts @@ -0,0 +1,37 @@ +import { ActionRegister } from '@extension/registers/action-register' +import type { AllActionsConfigs } from '@shared/actions/types' + +import { BaseCommand } from '../base.command' + +export class ActionCommand extends BaseCommand { + get commandName(): string { + return 'aide.action' + } + + run< + T extends AllActionsConfigs, + Context extends T['context'], + Result extends Extract< + AllActionsConfigs, + { + context: { + actionType: Context['actionType'] + actionCategory: Context['actionCategory'] + actionName: Context['actionName'] + } + } + >['result'] + >( + context: Context, + onStream?: Context['actionType'] extends 'client' + ? (result: Result) => void + : never + ): Result { + const actionRegister = + this.commandManager.registerManager.getRegister(ActionRegister) + + if (!actionRegister) throw new Error('ActionRegister not found') + + return actionRegister.execute(context, onStream as any) as Result + } +} diff --git a/src/extension/commands/command-manager.ts b/src/extension/commands/command-manager.ts index 388719c..515fd06 100644 --- a/src/extension/commands/command-manager.ts +++ b/src/extension/commands/command-manager.ts @@ -1,4 +1,5 @@ import { logger } from '@extension/logger' +import type { RegisterManager } from '@extension/registers/register-manager' import * as vscode from 'vscode' import { BaseCommand } from './base.command' @@ -10,6 +11,8 @@ export class CommandManager { constructor(private context: vscode.ExtensionContext) {} + registerManager!: RegisterManager + registerCommand( CommandClass: new ( ...args: ConstructorParameters diff --git a/src/extension/commands/index.ts b/src/extension/commands/index.ts index d0e0671..c93b87d 100644 --- a/src/extension/commands/index.ts +++ b/src/extension/commands/index.ts @@ -1,3 +1,4 @@ +import { ActionCommand } from './action/command' import { AskAICommand } from './ask-ai/command' import type { BaseCommand } from './base.command' import { BatchProcessorCommand } from './batch-processor/command' @@ -17,6 +18,8 @@ import { SmartPasteCommand } from './smart-paste/command' export const registerCommands = (commandManager: CommandManager) => { const Commands = [ + ActionCommand, + CopyAsPromptCommand, AskAICommand, BatchProcessorCommand, diff --git a/src/extension/index.ts b/src/extension/index.ts index 8a362bf..86415b2 100644 --- a/src/extension/index.ts +++ b/src/extension/index.ts @@ -8,6 +8,7 @@ import { initializeLocalization } from './i18n' import { logger } from './logger' import { setupRegisters } from './registers' import { RegisterManager } from './registers/register-manager' +import { setServerState } from './state' import { redisStorage, stateStorage } from './storage' export const activate = async (context: vscode.ExtensionContext) => { @@ -22,6 +23,9 @@ export const activate = async (context: vscode.ExtensionContext) => { const registerManager = new RegisterManager(context, commandManager) await setupRegisters(registerManager) + commandManager.registerManager = registerManager + + setServerState({ context, registerManager, commandManager }) } catch (err) { logger.warn('Failed to activate extension', err) } diff --git a/src/extension/logger.ts b/src/extension/logger.ts index 681d72a..1f36047 100644 --- a/src/extension/logger.ts +++ b/src/extension/logger.ts @@ -51,3 +51,5 @@ export class VSCodeLogger extends BaseLogger { } export const logger = new VSCodeLogger({ name: 'Aide', level: 'info' }) + +export type ServerLogger = typeof logger diff --git a/src/extension/webview-api/lowdb/ai-model-db.ts b/src/extension/lowdb/ai-model-db.ts similarity index 100% rename from src/extension/webview-api/lowdb/ai-model-db.ts rename to src/extension/lowdb/ai-model-db.ts diff --git a/src/extension/webview-api/lowdb/ai-provider-db.ts b/src/extension/lowdb/ai-provider-db.ts similarity index 100% rename from src/extension/webview-api/lowdb/ai-provider-db.ts rename to src/extension/lowdb/ai-provider-db.ts diff --git a/src/extension/webview-api/lowdb/base-db.ts b/src/extension/lowdb/base-db.ts similarity index 100% rename from src/extension/webview-api/lowdb/base-db.ts rename to src/extension/lowdb/base-db.ts diff --git a/src/extension/webview-api/lowdb/chat-sessions-db.ts b/src/extension/lowdb/chat-sessions-db.ts similarity index 100% rename from src/extension/webview-api/lowdb/chat-sessions-db.ts rename to src/extension/lowdb/chat-sessions-db.ts diff --git a/src/extension/webview-api/lowdb/doc-sites-db.ts b/src/extension/lowdb/doc-sites-db.ts similarity index 100% rename from src/extension/webview-api/lowdb/doc-sites-db.ts rename to src/extension/lowdb/doc-sites-db.ts diff --git a/src/extension/webview-api/lowdb/settings-db.ts b/src/extension/lowdb/settings-db.ts similarity index 100% rename from src/extension/webview-api/lowdb/settings-db.ts rename to src/extension/lowdb/settings-db.ts diff --git a/src/extension/polyfill.ts b/src/extension/polyfill.ts index 832b1c9..f6d6513 100644 --- a/src/extension/polyfill.ts +++ b/src/extension/polyfill.ts @@ -1,7 +1,7 @@ const enableFetchPolyfill = async () => { if (!globalThis.fetch) { // if globalThis.fetch is not available, we use undici - const { fetch, FormData, Headers, Request, Response, File } = await import( + const { fetch, FormData, Headers, Request, Response } = await import( 'undici' ) @@ -10,8 +10,7 @@ const enableFetchPolyfill = async () => { FormData, Headers, Request, - Response, - File + Response }) } diff --git a/src/extension/registers/action-register.ts b/src/extension/registers/action-register.ts new file mode 100644 index 0000000..35a4b63 --- /dev/null +++ b/src/extension/registers/action-register.ts @@ -0,0 +1,136 @@ +import type { CommandManager } from '@extension/commands/command-manager' +import { + createServerActionManager, + ServerActionManager +} from '@shared/actions/server-action-manager' +import type { + ActionContext, + ActionType, + AllActionsConfigs, + AllActionsProxy +} from '@shared/actions/types' +import * as vscode from 'vscode' + +import { BaseRegister } from './base-register' +import type { RegisterManager } from './register-manager' + +export class ActionRegister extends BaseRegister { + serverActionManager!: ServerActionManager, any> + + constructor( + protected context: vscode.ExtensionContext, + protected registerManager: RegisterManager, + protected commandManager: CommandManager + ) { + super(context, registerManager, commandManager) + } + + async register(): Promise { + this.serverActionManager = createServerActionManager( + this.context, + this.registerManager, + this.commandManager + ) + + await this.serverActionManager.init() + } + + execute< + T extends AllActionsConfigs, + Context extends T['context'], + Result extends Extract< + AllActionsConfigs, + { + context: { + actionType: Context['actionType'] + actionCategory: Context['actionCategory'] + actionName: Context['actionName'] + } + } + >['result'] + >( + context: Context, + onStream?: Context['actionType'] extends 'client' + ? (result: Result) => void + : never + ): Result { + return this.serverActionManager.execute(context, onStream) as Result + } + + actions(): AllActionsProxy { + const proxy = new Proxy( + {}, + { + get: (target, actionType: ActionType) => + new Proxy( + {}, + { + get: (target, actionCategory: string) => + new Proxy( + {}, + { + get: + (target, actionName: string) => + ( + context: Omit< + ActionContext, + 'actionType' | 'actionCategory' | 'actionName' + > + ) => + this.serverActionManager.execute({ + ...context, + actionType, + actionCategory, + actionName + }) + } + ) + } + ) + } + ) as AllActionsProxy + + return proxy + } + + dispose(): void { + this.serverActionManager.dispose() + } +} + +// const r = new ActionRegister() +// r.actions().client.chatUI.updateConversationUIState({}) +// const a = await r.execute( +// { +// actionType: 'server', +// actionCategory: 'apply', +// actionName: 'applyCode', +// actionParams: { +// cleanLast: true, +// code: 'console.log("hello")', +// path: 'test.ts' +// } +// } +// // result => { +// // console.log(result) +// // } +// ) + +// const b = r.actions().server.apply.applyCode( +// { +// actionParams: { +// cleanLast: true, +// code: 'console.log("hello")', +// path: 'test.ts' +// } +// }, +// result => { +// console.log(result) +// } +// ) + +// const c = r.actions().server.file.getFullPath({ +// actionParams: { +// path: 'test.ts' +// } +// }) diff --git a/src/extension/registers/chat-histories-tree-register.ts b/src/extension/registers/chat-histories-tree-register.ts new file mode 100644 index 0000000..661338b --- /dev/null +++ b/src/extension/registers/chat-histories-tree-register.ts @@ -0,0 +1,330 @@ +import type { CommandManager } from '@extension/commands/command-manager' +import { runAction } from '@extension/state' +import type { AllActionsConfigs } from '@shared/actions/types' +import { ChatContextEntity, type ChatSession } from '@shared/entities' +import * as vscode from 'vscode' + +import { BaseRegister } from './base-register' +import type { RegisterManager } from './register-manager' + +class ChatHistoriesTreeItem extends vscode.TreeItem { + constructor( + public readonly chatSession: ChatSession, + public collapsibleState: vscode.TreeItemCollapsibleState, + public checked: boolean, + private treeDataProvider: ChatHistoriesTreeProvider + ) { + super( + { + label: chatSession.title, + highlights: [] + }, + collapsibleState + ) + + // Define all available actions for this item + const actions: string[] = ['deleteSession', 'duplicateSession'] + + // Generate contextValue from all actions + this.contextValue = [ + 'chatHistoriesTreeItem', + ...actions.map(a => `action:${a}`) + ].join(',') + + this.iconPath = new vscode.ThemeIcon('comment-discussion') + this.description = this.formatDate(new Date(chatSession.createdAt)) + this.tooltip = this.chatSession.title + + // this.checkboxState = vscode.TreeItemCheckboxState.Unchecked + // this.updateCheckbox() + this.updateCommand() + } + + private formatDate(date: Date | string): string { + const d = new Date(date) + return d.toLocaleString() + } + + updateCheckbox() { + this.checkboxState = this.checked + ? vscode.TreeItemCheckboxState.Checked + : vscode.TreeItemCheckboxState.Unchecked + } + + updateCommand() { + if (this.collapsibleState === vscode.TreeItemCollapsibleState.None) { + // For files + this.command = { + command: 'aide.action', + title: 'Open Chat Session', + arguments: [ + { + actionType: 'client', + actionCategory: 'chat', + actionName: 'openChatPage', + actionParams: { + sessionId: this.chatSession.id + } + } satisfies AllActionsConfigs['context'] + ] + } + } + } +} + +class ChatHistoriesTreeProvider + implements vscode.TreeDataProvider +{ + private _onDidChangeTreeData: vscode.EventEmitter< + ChatHistoriesTreeItem | undefined | null | void + > = new vscode.EventEmitter() + + readonly onDidChangeTreeData: vscode.Event< + ChatHistoriesTreeItem | undefined | null | void + > = this._onDidChangeTreeData.event + + constructor( + protected context: vscode.ExtensionContext, + protected registerManager: RegisterManager, + protected commandManager: CommandManager, + private checkboxStateManager: CheckboxStateManager + ) {} + + refresh(item?: ChatHistoriesTreeItem): void { + this._onDidChangeTreeData.fire(item) + } + + async createAndOpenSession(): Promise { + const session = await runAction( + this.registerManager + )?.server.chatSession.createSession({ + actionParams: { + chatContext: new ChatContextEntity().entity + } + }) + + if (!session) return + + this.refresh() + + runAction(this.registerManager)?.client.chat.openChatPage({ + actionParams: { + refreshSessions: true, + sessionId: session.id + } + }) + } + + async duplicateSession(sessionId: string): Promise { + const session = await runAction( + this.registerManager + )?.server.chatSession.duplicateSessionById({ + actionParams: { sessionId } + }) + + if (!session) return + + this.refresh() + + runAction(this.registerManager)?.client.chat.openChatPage({ + actionParams: { + refreshSessions: true, + sessionId: session.id + } + }) + } + + async deleteCheckedSessions(): Promise { + const sessionIds = this.checkboxStateManager.getCheckedIds() + await runAction(this.registerManager)?.server.chatSession.deleteSessions({ + actionParams: { sessionIds } + }) + this.checkboxStateManager.clear() + this.refresh() + } + + async deleteSession(sessionId: string): Promise { + await runAction(this.registerManager)?.server.chatSession.deleteSession({ + actionParams: { sessionId } + }) + this.refresh() + } + + getTreeItem(element: ChatHistoriesTreeItem): vscode.TreeItem { + return element + } + + getChildren( + element?: ChatHistoriesTreeItem + ): Thenable { + if (!element) { + return this.getSessionTreeItems() + } + return Promise.resolve([]) + } + + toggleCheckbox(item: ChatHistoriesTreeItem) { + item.checked = !item.checked + if (item.checked) { + this.checkboxStateManager.addCheckedId(item.chatSession.id) + } else { + this.checkboxStateManager.removeCheckedId(item.chatSession.id) + } + item.updateCheckbox() + this.refresh(item) + } + + private async getSessionTreeItems(): Promise { + const chatSessions = await runAction( + this.registerManager + )?.server.chatSession.getAllSessions({ + actionParams: {} + }) + + return ( + chatSessions + ?.sort((a, b) => b.updatedAt - a.updatedAt) + ?.map( + session => + new ChatHistoriesTreeItem( + session, + vscode.TreeItemCollapsibleState.None, + this.checkboxStateManager.isChecked(session.id), + this + ) + ) ?? [] + ) + } +} + +export class ChatHistoriesTreeRegister extends BaseRegister { + private treeDataProvider: ChatHistoriesTreeProvider | undefined + + private treeView: vscode.TreeView | undefined + + private checkboxStateManager: CheckboxStateManager + + constructor( + context: vscode.ExtensionContext, + registerManager: RegisterManager, + commandManager: CommandManager + ) { + super(context, registerManager, commandManager) + this.checkboxStateManager = new CheckboxStateManager() + } + + register(): void { + this.treeDataProvider = new ChatHistoriesTreeProvider( + this.context, + this.registerManager, + this.commandManager, + this.checkboxStateManager + ) + + this.treeView = vscode.window.createTreeView('aide.chatHistoriesTree', { + treeDataProvider: this.treeDataProvider, + showCollapseAll: false, + canSelectMany: false + }) + + this.setupCheckboxStateSync() + this.registerCommands() + + this.context.subscriptions.push(this.treeView) + } + + private setupCheckboxStateSync(): void { + this.treeView?.onDidChangeCheckboxState(e => { + e.items.forEach(([item, state]) => { + if (state === vscode.TreeItemCheckboxState.Checked) { + this.checkboxStateManager.addCheckedId(item.chatSession.id) + } else { + this.checkboxStateManager.removeCheckedId(item.chatSession.id) + } + }) + }) + } + + private registerCommands(): void { + // Register handlers for all item actions + const actionCommands: { + id: string + handler: (...args: any[]) => any + }[] = [ + { + id: 'refresh', + handler: () => this.treeDataProvider?.refresh() + }, + { + id: 'deleteCheckedSessions', + handler: () => this.treeDataProvider?.deleteCheckedSessions() + }, + { + id: 'createAndOpenSession', + handler: () => this.treeDataProvider?.createAndOpenSession() + }, + { + id: 'deleteSession', + handler: async (item: ChatHistoriesTreeItem) => { + await this.treeDataProvider?.deleteSession(item.chatSession.id) + } + }, + { + id: 'duplicateSession', + handler: async (item: ChatHistoriesTreeItem) => { + await this.treeDataProvider?.duplicateSession(item.chatSession.id) + } + } + // Easy to add more command handlers: + // { id: 'duplicate', handler: async (item) => { ... } }, + // { id: 'export', handler: async (item) => { ... } }, + ] + + const actionDisposables = actionCommands.map(({ id, handler }) => + vscode.commands.registerCommand(`aide.chatHistoriesTree.${id}`, handler) + ) + + this.context.subscriptions.push(...actionDisposables) + } + + dispose(): void { + this.treeView?.dispose() + } +} + +class CheckboxStateManager { + private checkedIds: Set = new Set() + + private onStateChangeCallbacks: ((ids: Set) => void)[] = [] + + addCheckedId(id: string): void { + this.checkedIds.add(id) + this.notifyStateChange() + } + + removeCheckedId(id: string): void { + this.checkedIds.delete(id) + this.notifyStateChange() + } + + isChecked(id: string): boolean { + return this.checkedIds.has(id) + } + + getCheckedIds(): string[] { + return Array.from(this.checkedIds) + } + + clear(): void { + this.checkedIds.clear() + this.notifyStateChange() + } + + onStateChange(callback: (ids: Set) => void): void { + this.onStateChangeCallbacks.push(callback) + } + + private notifyStateChange(): void { + this.onStateChangeCallbacks.forEach(callback => callback(this.checkedIds)) + } +} diff --git a/src/extension/registers/codebase-watcher-register.ts b/src/extension/registers/codebase-watcher-register.ts index 1581a5d..5f17e09 100644 --- a/src/extension/registers/codebase-watcher-register.ts +++ b/src/extension/registers/codebase-watcher-register.ts @@ -1,6 +1,6 @@ +import { CodebaseIndexer } from '@extension/chat/vectordb/codebase-indexer' import { aidePaths } from '@extension/file-utils/paths' import { getWorkspaceFolder } from '@extension/utils' -import { CodebaseIndexer } from '@extension/webview-api/chat-context-processor/vectordb/codebase-indexer' import * as vscode from 'vscode' import { BaseRegister } from './base-register' diff --git a/src/extension/registers/controller-register.ts b/src/extension/registers/controller-register.ts deleted file mode 100644 index 279bf1e..0000000 --- a/src/extension/registers/controller-register.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { CommandManager } from '@extension/commands/command-manager' -import { - controllers, - type Controllers -} from '@extension/webview-api/controllers' -import type { Controller } from '@extension/webview-api/types' -import * as vscode from 'vscode' - -import { BaseRegister } from './base-register' -import type { RegisterManager } from './register-manager' - -export class ControllerRegister extends BaseRegister { - public controllers: Map = new Map() - - constructor( - protected context: vscode.ExtensionContext, - protected registerManager: RegisterManager, - protected commandManager: CommandManager - ) { - super(context, registerManager, commandManager) - } - - async register(): Promise { - for (const ControllerClass of controllers) { - const controller = new ControllerClass( - this.registerManager, - this.commandManager - ) - this.controllers.set(controller.name, controller) - } - } - - api['name']>( - apiName: T - ): Extract, { name: T }> { - // Type assertion needed since Map.get doesn't preserve the exact type - return this.controllers.get(apiName) as Extract< - InstanceType, - { name: T } - > - } - - dispose(): void { - this.controllers.clear() - } -} diff --git a/src/extension/registers/index.ts b/src/extension/registers/index.ts index 42d27e1..df43486 100644 --- a/src/extension/registers/index.ts +++ b/src/extension/registers/index.ts @@ -1,8 +1,9 @@ +import { ActionRegister } from './action-register' import { AideKeyUsageStatusBarRegister } from './aide-key-usage-statusbar-register' import { AutoOpenCorrespondingFilesRegister } from './auto-open-corresponding-files-register' import { BaseRegister } from './base-register' +import { ChatHistoriesTreeRegister } from './chat-histories-tree-register' import { CodebaseWatcherRegister } from './codebase-watcher-register' -import { ControllerRegister } from './controller-register' import { InlineDiffRegister } from './inline-diff-register' import { ModelRegister } from './model-register' import { RegisterManager } from './register-manager' @@ -16,6 +17,7 @@ import { WebviewRegister } from './webview-register' export const setupRegisters = async (registerManager: RegisterManager) => { const Registers = [ SystemSetupRegister, + ActionRegister, TmpFileSchemaRegister, TmpFileActionRegister, AideKeyUsageStatusBarRegister, @@ -23,10 +25,10 @@ export const setupRegisters = async (registerManager: RegisterManager) => { InlineDiffRegister, TerminalWatcherRegister, ServerPluginRegister, - ControllerRegister, WebviewRegister, ModelRegister, - CodebaseWatcherRegister + CodebaseWatcherRegister, + ChatHistoriesTreeRegister ] satisfies (typeof BaseRegister)[] for await (const Register of Registers) { diff --git a/src/extension/registers/webview-register.ts b/src/extension/registers/webview-register.ts index 0148c65..fbc3bc2 100644 --- a/src/extension/registers/webview-register.ts +++ b/src/extension/registers/webview-register.ts @@ -1,20 +1,20 @@ import type { CommandManager } from '@extension/commands/command-manager' import { setupHtml } from '@extension/utils' -import { setupWebviewAPIManager } from '@extension/webview-api' -import type { WebviewPanel } from '@extension/webview-api/types' +import { type WebviewPanel } from '@shared/actions/server-action-manager' import * as vscode from 'vscode' +import { ActionRegister } from './action-register' import { BaseRegister } from './base-register' import type { RegisterManager } from './register-manager' export class AideWebViewProvider { - static readonly viewType = 'aide.webview' + static readonly viewType = 'aide-webview' - private webviewPanel: vscode.WebviewPanel | undefined + private disposes: vscode.Disposable[] = [] - private sidebarView: vscode.WebviewView | undefined + webviewPanel: vscode.WebviewPanel | undefined - private disposes: vscode.Disposable[] = [] + sidebarView: vscode.WebviewView | undefined constructor( private readonly extensionUri: vscode.Uri, @@ -69,23 +69,29 @@ export class AideWebViewProvider { } } - // add socket port state to html string - const setupWebviewAPIManagerDispose = await setupWebviewAPIManager( - this.context, - webview, - this.registerManager, - this.commandManager - ) - this.disposes.push(setupWebviewAPIManagerDispose) + const actionRegister = this.registerManager.getRegister(ActionRegister) + + if (!actionRegister) { + throw new Error('ActionRegister not found') + } + + await actionRegister.serverActionManager.init(webview) + + this.disposes.push({ + dispose: () => { + actionRegister.serverActionManager.dispose() + } + }) webview.webview.html = this.getHtmlForWebview(webview.webview) webview.onDidDispose(() => { - setupWebviewAPIManagerDispose.dispose() + actionRegister.serverActionManager.dispose() }) } revealSidebar() { + vscode.commands.executeCommand('workbench.view.extension.aide-sidebar-view') this.sidebarView?.show?.(true) } @@ -103,7 +109,7 @@ export class AideWebViewProvider { } export class WebviewRegister extends BaseRegister { - private provider: AideWebViewProvider | undefined + provider: AideWebViewProvider | undefined async register(): Promise { this.provider = new AideWebViewProvider( diff --git a/src/extension/state.ts b/src/extension/state.ts new file mode 100644 index 0000000..65d8e43 --- /dev/null +++ b/src/extension/state.ts @@ -0,0 +1,30 @@ +import * as vscode from 'vscode' + +import type { CommandManager } from './commands/command-manager' +import { ActionRegister } from './registers/action-register' +import { RegisterManager } from './registers/register-manager' + +export interface ServerState { + context: vscode.ExtensionContext | null + registerManager: RegisterManager | null + commandManager: CommandManager | null +} + +export const serverState: ServerState = { + context: null, + registerManager: null, + commandManager: null +} + +export const setServerState = (state: Partial) => { + Object.assign(serverState, state) +} + +export const runAction = (_registerManager?: RegisterManager) => { + const registerManager = _registerManager || serverState.registerManager + + if (!registerManager) throw new Error('RegisterManager is not set') + + const actionRegister = registerManager.getRegister(ActionRegister) + return actionRegister?.actions() +} diff --git a/src/extension/webview-api/controllers/ai-model-controller.ts b/src/extension/webview-api/controllers/ai-model-controller.ts deleted file mode 100644 index e586b26..0000000 --- a/src/extension/webview-api/controllers/ai-model-controller.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { ModelProviderFactory } from '@extension/ai/model-providers/helpers/factory' -import { logger } from '@extension/logger' -import { - AIProviderType, - type AIModel, - type AIModelFeature, - type AIProvider, - type FeatureModelSettingKey, - type FeatureModelSettingValue -} from '@shared/entities' - -import { aiModelDB } from '../lowdb/ai-model-db' -import { aiProviderDB } from '../lowdb/ai-provider-db' -import { Controller } from '../types' - -export class AIModelController extends Controller { - readonly name = 'aiModel' - - async getModels() { - return await aiModelDB.getAll() - } - - async getModelsByProviderOrBaseUrl(req: { - providerOrBaseUrl: AIProviderType | string - }) { - const models = await aiModelDB.getAll() - return models.filter( - model => model.providerOrBaseUrl === req.providerOrBaseUrl - ) - } - - async addModel(req: Omit) { - const all = await aiModelDB.getAll() - const existingModel = all.find( - model => - model.name === req.name && - model.providerOrBaseUrl === req.providerOrBaseUrl - ) - - if (existingModel) return existingModel - - return await aiModelDB.add(req) - } - - async createOrUpdateModel(req: Partial) { - return await aiModelDB.createOrUpdate(req) - } - - async batchCreateOrUpdateModels(req: Partial[]) { - return await aiModelDB.batchCreateOrUpdate(req) - } - - async removeModel(req: { id: string }) { - await aiModelDB.remove(req.id) - } - - async fetchRemoteModelNames(req: { provider: AIProvider }) { - try { - const modelProvider = ModelProviderFactory.createProvider( - req.provider, - undefined - ) - return await modelProvider.getSupportModelNames() - } catch (error) { - logger.error('Failed to fetch remote models:', error) - return [] as string[] - } - } - - async testModelFeatures(req: { - provider: AIProvider - model: AIModel - features: AIModelFeature[] - }) { - const modelProvider = ModelProviderFactory.createProvider( - req.provider, - req.model - ) - - return await modelProvider.testModelFeatures(req.features) - } - - async getProviderAndModelForFeature(req: { - key: FeatureModelSettingKey - }): Promise<{ provider?: AIProvider; model?: AIModel }> { - const defaultResult = { provider: undefined, model: undefined } - const setting = await ModelProviderFactory.getModelSettingForFeature( - req.key, - false - ) - - if (!setting) { - return defaultResult - } - - const provider = (await aiProviderDB.getAll()).find( - p => p.id === setting.providerId - ) - - if (!provider) { - return defaultResult - } - - const model = (await aiModelDB.getAll()).find( - m => - m.name === setting.modelName && - m.providerOrBaseUrl === - (provider.type === AIProviderType.Custom - ? provider.extraFields.customBaseUrl - : provider.type) - ) - - if (!model) { - return { - ...defaultResult, - provider - } - } - - return { - provider, - model - } - } - - async setModelSettingForFeature(req: { - key: FeatureModelSettingKey - value: FeatureModelSettingValue - }) { - return await ModelProviderFactory.setModelSettingForFeature( - req.key, - req.value - ) - } -} diff --git a/src/extension/webview-api/controllers/ai-provider-controller.ts b/src/extension/webview-api/controllers/ai-provider-controller.ts deleted file mode 100644 index 5187076..0000000 --- a/src/extension/webview-api/controllers/ai-provider-controller.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { AIProvider } from '@shared/entities' - -import { aiProviderDB } from '../lowdb/ai-provider-db' -import { Controller } from '../types' - -export class AIProviderController extends Controller { - readonly name = 'aiProvider' - - async getProviders() { - const providers = await aiProviderDB.getAll() - return providers.sort((a, b) => b.order - a.order) - } - - async addProvider(req: Omit) { - return await aiProviderDB.add(req) - } - - async updateProvider(req: Partial & { id: string }) { - const { id, ...updates } = req - return await aiProviderDB.update(id, updates) - } - - async updateProviders(req: Partial & { id: string }[]) { - return await aiProviderDB.batchUpdate(req) - } - - async removeProvider(req: { id: string }) { - await aiProviderDB.remove(req.id) - } -} diff --git a/src/extension/webview-api/controllers/chat-session-controller.ts b/src/extension/webview-api/controllers/chat-session-controller.ts deleted file mode 100644 index 1757fe2..0000000 --- a/src/extension/webview-api/controllers/chat-session-controller.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { aidePaths } from '@extension/file-utils/paths' -import { VsCodeFS } from '@extension/file-utils/vscode-fs' -import { logger } from '@extension/logger' -import { - ChatContextEntity, - type ChatContext, - type ChatSession, - type Conversation -} from '@shared/entities' - -import { chatSessionsDB } from '../lowdb/chat-sessions-db' -import { Controller } from '../types' - -export class ChatSessionController extends Controller { - readonly name = 'chatSession' - - private getSessionFilePath(sessionId: string): string { - return aidePaths.getSessionFilePath(sessionId) - } - - async createSession(req: { chatContext: ChatContext }): Promise { - const chatSession = new ChatContextEntity(req.chatContext).toChatSession() - const now = new Date().getTime() - const session = await chatSessionsDB.add({ - ...chatSession, - createdAt: now, - updatedAt: now - }) - - await VsCodeFS.writeJsonFile(this.getSessionFilePath(session.id), { - ...req.chatContext, - createdAt: now, - updatedAt: now - }) - - return session - } - - async getChatContext(req: { - sessionId: string - }): Promise { - const filePath = this.getSessionFilePath(req.sessionId) - try { - return await VsCodeFS.readJsonFile(filePath) - } catch (error) { - logger.error(`Failed to read session file: ${filePath}`, error) - return null - } - } - - async updateSession(req: { chatContext: ChatContext }): Promise { - const now = new Date().getTime() - const session = await chatSessionsDB.update(req.chatContext.id, { - ...new ChatContextEntity(req.chatContext).toChatSession(), - updatedAt: now - }) - - if (session) { - await VsCodeFS.writeJsonFile(this.getSessionFilePath(session.id), { - ...req.chatContext, - updatedAt: now - }) - } - } - - async createOrUpdateSession(req: { - chatContext: ChatContext - }): Promise { - const now = new Date().getTime() - const session = await chatSessionsDB.createOrUpdate({ - ...new ChatContextEntity(req.chatContext).toChatSession(), - updatedAt: now - }) - - await VsCodeFS.writeJsonFile(this.getSessionFilePath(session.id), { - ...req.chatContext, - updatedAt: now - }) - } - - async deleteSession(req: { sessionId: string }): Promise { - await chatSessionsDB.remove(req.sessionId) - await VsCodeFS.unlink(this.getSessionFilePath(req.sessionId)) - } - - async getAllSessions(): Promise { - return await chatSessionsDB.getAll() - } - - async searchSessions(req: { query: string }): Promise { - const sessions = await chatSessionsDB.search(req.query) - const results: ChatSession[] = [] - - for (const session of sessions) { - const chatContext = await this.getChatContext({ sessionId: session.id }) - if ( - chatContext && - this.searchInConversations(chatContext.conversations, req.query) - ) { - results.push(session) - } - } - - return results - } - - private searchInConversations( - conversations: Conversation[], - query: string - ): boolean { - return conversations.some(conv => - conv.contents.some( - content => - content.type === 'text' && - content.text.toLowerCase().includes(query.toLowerCase()) - ) - ) - } -} diff --git a/src/extension/webview-api/controllers/index.ts b/src/extension/webview-api/controllers/index.ts deleted file mode 100644 index fad4133..0000000 --- a/src/extension/webview-api/controllers/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { Controller } from '../types' -import { AIModelController } from './ai-model-controller' -import { AIProviderController } from './ai-provider-controller' -import { ApplyController } from './apply-controller' -import { ChatController } from './chat-controller' -import { ChatSessionController } from './chat-session-controller' -import { CodebaseController } from './codebase-controller' -import { DocController } from './doc-controller' -import { FileController } from './file-controller' -import { GitController } from './git-controller' -import { MentionController } from './mention-controller' -import { SettingsController } from './settings-controller' -import { SystemController } from './system-controller' -import { TerminalController } from './terminal-controller' - -export const controllers = [ - ChatController, - CodebaseController, - FileController, - TerminalController, - GitController, - SystemController, - DocController, - ChatSessionController, - ApplyController, - SettingsController, - AIProviderController, - AIModelController, - MentionController -] as const satisfies (typeof Controller)[] -export type Controllers = typeof controllers diff --git a/src/extension/webview-api/controllers/settings-controller.ts b/src/extension/webview-api/controllers/settings-controller.ts deleted file mode 100644 index fcbc410..0000000 --- a/src/extension/webview-api/controllers/settings-controller.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { settingKeyItemConfigMap } from '@shared/entities' -import type { - SettingKey, - SettingsSaveType, - SettingValue -} from '@shared/entities' - -import { globalSettingsDB, workspaceSettingsDB } from '../lowdb/settings-db' -import { Controller } from '../types' - -export class SettingsController extends Controller { - readonly name = 'settings' - - async getGlobalSetting(req: { - key: K - }): Promise | null> { - return await globalSettingsDB.getSetting(req.key) - } - - async setGlobalSetting(req: { - key: K - value: SettingValue - }): Promise { - await globalSettingsDB.setSetting(req.key, req.value) - } - - async getAllGlobalSettings(): Promise> { - return await globalSettingsDB.getAllSettings() - } - - async getWorkspaceSetting(req: { - key: K - }): Promise | null> { - return await workspaceSettingsDB.getSetting(req.key) - } - - async setWorkspaceSetting(req: { - key: K - value: SettingValue - }): Promise { - await workspaceSettingsDB.setSetting(req.key, req.value) - } - - async getAllWorkspaceSettings(): Promise> { - return await workspaceSettingsDB.getAllSettings() - } - - async setGlobalSettings(req: { - settings: Partial>> - }): Promise { - const { settings } = req - for (const [key, value] of Object.entries(settings)) { - await globalSettingsDB.setSetting(key as SettingKey, value) - } - } - - async setWorkspaceSettings(req: { - settings: Partial>> - }): Promise { - const { settings } = req - for (const [key, value] of Object.entries(settings)) { - await workspaceSettingsDB.setSetting(key as SettingKey, value) - } - } - - private async getSaveType(key: SettingKey): Promise { - return settingKeyItemConfigMap[key].saveType - } - - async getSetting(req: { - key: SettingKey - }): Promise | null> { - const saveType = await this.getSaveType(req.key) - return saveType === 'global' - ? await globalSettingsDB.getSetting(req.key) - : await workspaceSettingsDB.getSetting(req.key) - } - - async setSettings(req: { - settings: Partial>> - }): Promise { - const { settings } = req - for (const [key, value] of Object.entries(settings)) { - const saveType = await this.getSaveType(key as SettingKey) - if (saveType === 'global') { - await globalSettingsDB.setSetting(key as SettingKey, value) - } else { - await workspaceSettingsDB.setSetting(key as SettingKey, value) - } - } - } - - async getMergedSettings(): Promise> { - const globalSettings = await globalSettingsDB.getAllSettings() - const workspaceSettings = await workspaceSettingsDB.getAllSettings() - - return { - ...globalSettings, - ...workspaceSettings // Workspace settings take precedence - } - } -} diff --git a/src/extension/webview-api/controllers/system-controller.ts b/src/extension/webview-api/controllers/system-controller.ts deleted file mode 100644 index 574c893..0000000 --- a/src/extension/webview-api/controllers/system-controller.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as os from 'os' - -import { Controller } from '../types' - -export interface SystemInfo { - os: string - cpu: string - memory: string - platform: string -} - -export class SystemController extends Controller { - readonly name = 'system' - - async getSystemInfo(): Promise { - return { - os: `${os.type()} ${os.release()}`, - cpu: os.cpus()[0]?.model || 'Unknown', - memory: `${Math.round(os.totalmem() / (1024 * 1024 * 1024))} GB`, - platform: os.platform() - } - } - - async isWindows(): Promise { - return os.platform() === 'win32' - } -} diff --git a/src/extension/webview-api/controllers/terminal-controller.ts b/src/extension/webview-api/controllers/terminal-controller.ts deleted file mode 100644 index 39c2fe2..0000000 --- a/src/extension/webview-api/controllers/terminal-controller.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - TerminalWatcherRegister, - type TerminalInfo -} from '@extension/registers/terminal-watcher-register' - -import { Controller } from '../types' - -export class TerminalController extends Controller { - readonly name = 'terminal' - - private get terminalWatcher() { - return this.registerManager.getRegister(TerminalWatcherRegister) - } - - async getTerminalsForMention(): Promise { - return this.terminalWatcher?.getAllTerminalInfos() || [] - } -} diff --git a/src/extension/webview-api/index.ts b/src/extension/webview-api/index.ts deleted file mode 100644 index 8318303..0000000 --- a/src/extension/webview-api/index.ts +++ /dev/null @@ -1,136 +0,0 @@ -import type { CommandManager } from '@extension/commands/command-manager' -import { ControllerRegister } from '@extension/registers/controller-register' -import type { RegisterManager } from '@extension/registers/register-manager' -import { getErrorMsg, isAbortError } from '@shared/utils/common' -import findFreePorts from 'find-free-ports' -import { Server } from 'socket.io' -import * as vscode from 'vscode' - -import type { ControllerMethod, WebviewPanel } from './types' - -class APIManager { - private get controllers() { - const controller = - this.registerManager.getRegister(ControllerRegister)?.controllers - - if (!controller) throw new Error('ControllerRegister not found') - - return controller - } - - private io!: Server - - private port!: number - - private disposes: vscode.Disposable[] = [] - - constructor( - private context: vscode.ExtensionContext, - private registerManager: RegisterManager, - private commandManager: CommandManager - ) {} - - public async initialize(panel: WebviewPanel) { - await this.initializeServer() - - const listenerDispose = panel.webview.onDidReceiveMessage(e => { - if (e.type === 'getVSCodeSocketPort') { - panel.webview.postMessage({ socketPort: this.port }) - } - }) - - this.disposes.push(listenerDispose) - } - - private async initializeServer() { - const freePorts = await findFreePorts.findFreePorts(1, { - startPort: 3001, - endPort: 7999 - }) - - if (!freePorts.length) throw new Error('No free ports found') - - this.port = freePorts[0]! - this.io = new Server(this.port, { - cors: { - origin: '*', - methods: ['GET', 'POST'] - } - }) - this.io.on('connection', socket => { - socket.on('request', this.handleMessage.bind(this, socket)) - }) - } - - private async handleMessage(socket: any, message: any) { - const { id, controller: controllerName, method, data } = message - const controller = this.controllers.get(controllerName) - const abortController = new AbortController() - - socket.once(`abort-${id}`, () => { - abortController.abort() - }) - - if (!controller || !(method in controller)) { - socket.emit('error', { - id, - error: `Method not found: ${controllerName}.${method}` - }) - return - } - - try { - const result = await (controller[method] as ControllerMethod)( - data, - abortController - ) - if (result && typeof result[Symbol.asyncIterator] === 'function') { - try { - for await (const chunk of result as AsyncGenerator< - any, - void, - unknown - >) { - if (abortController.signal.aborted) break - socket.emit('stream', { id, data: chunk }) - } - socket.emit('end', { id }) - } catch (error) { - // skip abort error - if (isAbortError(error)) { - socket.emit('aborted', { id }) - } else { - throw error - } - } - } else { - socket.emit('response', { id, data: result }) - } - } catch (error) { - socket.emit('error', { id, error: getErrorMsg(error) }) - } - } - - dispose() { - this.disposes.forEach(dispose => dispose.dispose()) - this.controllers.clear() - this.io.close() - } -} - -export const setupWebviewAPIManager = async ( - context: vscode.ExtensionContext, - panel: WebviewPanel, - registerManager: RegisterManager, - commandManager: CommandManager -): Promise => { - const apiManager = new APIManager(context, registerManager, commandManager) - - await apiManager.initialize(panel) - - return { - dispose: () => { - apiManager.dispose() - } - } -} diff --git a/src/extension/webview-api/types.ts b/src/extension/webview-api/types.ts deleted file mode 100644 index 4847884..0000000 --- a/src/extension/webview-api/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { CommandManager } from '@extension/commands/command-manager' -import type { RegisterManager } from '@extension/registers/register-manager' -import * as vscode from 'vscode' - -export type WebviewPanel = vscode.WebviewPanel | vscode.WebviewView - -export type ControllerMethodResult = - | Promise - | AsyncGenerator - -export type ControllerMethod = ( - req: TReq, - abortController?: AbortController -) => ControllerMethodResult - -export abstract class Controller { - abstract readonly name: string - - protected registerManager: RegisterManager - - protected commandManager: CommandManager - - constructor( - registerManager: RegisterManager, - commandManager: CommandManager - ) { - this.registerManager = registerManager - this.commandManager = commandManager - } - - [key: string]: ControllerMethod | string | unknown | undefined -} - -export type ControllerClass = new ( - registerManager: RegisterManager, - commandManager: CommandManager -) => Controller diff --git a/src/shared/actions/base-action-manager.ts b/src/shared/actions/base-action-manager.ts new file mode 100644 index 0000000..e4388c6 --- /dev/null +++ b/src/shared/actions/base-action-manager.ts @@ -0,0 +1,287 @@ +import { ServerLogger } from '@extension/logger' +import type { + ActionContext, + ActionDefinition, + ActionType, + ExecuteActionResult, + SocketActionReqMsg, + SocketActionResMsg +} from '@shared/actions/types' +import { AbortError, getErrorMsg, isAbortError } from '@shared/utils/common' +import { ClientLogger } from '@webview/utils/logger' +import type { Server as ServerIO } from 'socket.io' +import type { Socket as ClientIO } from 'socket.io-client' +import type { Disposable } from 'vscode' + +type PendingRequest = { + resolve: (actionResult: ResultData) => void + reject: (error: any) => void + onStream?: (actionResult: ResultData) => void + abortController?: AbortController +} + +export abstract class BaseActionManager< + Type extends ActionType, + Params extends Record, + ResultData +> { + messageId = 0 + + io!: Type extends 'server' ? ServerIO : ClientIO + + socket!: Type extends 'server' ? ServerIO : ClientIO + + pendingRequests: Map> = new Map() + + pendingEmits: Array<{ + eventName: string + eventParams: SocketActionReqMsg + }> = [] + + disposes: Disposable[] = [] + + abstract currentActionEnv: Type + + abstract logger: Type extends 'server' ? ServerLogger : ClientLogger + + protected actions = new Map>() + + registerAction(action: ActionDefinition) { + const key = `${action.category}:${action.name}` + this.actions.set(key, action) + } + + protected findAction(category: string, name: string) { + const key = `${category}:${name}` + return this.actions.get(key) + } + + execute( + context: ActionContext, + onStream?: (result: ResultData) => void + ): ExecuteActionResult { + if (this.currentActionEnv === context.actionType) { + const action = this.findAction(context.actionCategory, context.actionName) + if (!action) { + throw new Error( + `Action ${context.actionCategory}:${context.actionName} not found` + ) + } + + if (onStream) + throw new Error( + "Don't use onStream when execute action in the same environment" + ) + + return action.execute(context) + } + + return this.executeAction(context, onStream) + } + + async initSocketListener() { + if (this.currentActionEnv === 'server') { + this.io.on('connection', async socket => { + this.socket = socket + await this.handleReceiveExecuteAction() + await this.handleReceiveActionResult() + await this.handleReEmit() + }) + } else { + this.socket = this.io + await this.handleReceiveExecuteAction() + await this.handleReceiveActionResult() + await this.handleReEmit() + } + } + + private async handleReceiveExecuteAction() { + this.socket.on( + 'executeAction', + async (message: SocketActionReqMsg) => { + const { id } = message + const abortController = new AbortController() + + const actionContext: ActionContext = { + abortController, + ...message.actionContext + } + + this.socket.once(`abort-${id}`, () => { + abortController.abort() + }) + + if ( + this.currentActionEnv === 'server' && + actionContext.actionType === 'client' + ) { + this.socket.emit('actionError', { + id, + actionResult: "Don't execute client action in server by socket" + } satisfies SocketActionResMsg) + return + } + + if ( + this.currentActionEnv === 'client' && + actionContext.actionType === 'server' + ) { + this.socket.emit('actionError', { + id, + actionResult: "Don't execute server action in client by socket" + } satisfies SocketActionResMsg) + return + } + + try { + // this.logger.verbose('executeAction', { + // currentActionEnv: this.currentActionEnv, + // ...actionContext + // }) + const result = await this.execute(actionContext) + + if ( + result && + typeof (result as any)[Symbol.asyncIterator] === 'function' + ) { + try { + for await (const chunk of result as AsyncGenerator< + ResultData, + void, + unknown + >) { + if (abortController.signal.aborted) break + + const msgRes: SocketActionResMsg = { + id, + actionResult: chunk + } + + this.socket.emit('actionStream', msgRes) + this.socket.emit('actionEnd', { id }) + } + } catch (error) { + // skip abort error + if (isAbortError(error)) { + this.socket.emit('actionAborted', { id }) + } else { + throw error + } + } + } else { + this.socket.emit('actionResult', { + id, + actionResult: result as ResultData + } satisfies SocketActionResMsg) + } + } catch (error) { + this.logger.error('executeAction error', error) + this.socket.emit('actionError', { + id, + actionResult: getErrorMsg(error) + } satisfies SocketActionResMsg) + } + } + ) + } + + private handleReceiveActionResult() { + this.socket.on('actionResult', (message: SocketActionResMsg) => { + const pending = this.pendingRequests.get(message.id) + if (!pending) return + + pending.resolve(message.actionResult) + this.pendingRequests.delete(message.id) + }) + + this.socket.on('actionStream', (message: SocketActionResMsg) => { + const pending = this.pendingRequests.get(message.id) + if (!pending) return + + pending.onStream?.(message.actionResult) + }) + + this.socket.on('actionEnd', (message: SocketActionResMsg) => { + const pending = this.pendingRequests.get(message.id) + if (!pending) return + + pending.resolve(undefined as any) + this.pendingRequests.delete(message.id) + }) + + this.socket.on('actionError', (message: SocketActionResMsg) => { + const pending = this.pendingRequests.get(message.id) + if (!pending) return + + pending.reject(new Error(message.actionResult.error)) + this.pendingRequests.delete(message.id) + }) + } + + private handleReEmit() { + this.pendingEmits.forEach(({ eventName, eventParams }) => { + this.socket.emit(eventName, eventParams) + }) + } + + private emitExecuteAction(eventParams: SocketActionReqMsg) { + const eventName = 'executeAction' + + this.logger.verbose(eventName, eventParams) + + if (!this.socket) { + this.pendingEmits.push({ + eventName, + eventParams + }) + } else { + this.socket.emit(eventName, eventParams) + } + } + + private async executeAction( + actionContext: ActionContext, + onStream?: (result: ResultData) => void + ): Promise { + return new Promise((resolve, reject) => { + const id = this.messageId++ + const abortController = + actionContext.abortController || new AbortController() + + if (abortController) { + abortController.signal.addEventListener( + 'abort', + () => { + this.socket.emit(`abort-${id}`, { id }) + const pending = this.pendingRequests.get(id) + if (pending) { + pending.reject(AbortError) + this.pendingRequests.delete(id) + } + }, + { once: true } + ) + } + + this.pendingRequests.set(id, { + resolve, + reject, + onStream, + abortController + }) + + this.emitExecuteAction({ + id, + actionContext + }) + }) + } + + dispose() { + this.disposes.forEach(dispose => dispose.dispose()) + if (this.currentActionEnv === 'server') { + this.io.close() + } + this.socket.removeAllListeners() + } +} diff --git a/src/shared/actions/client-action-collection.ts b/src/shared/actions/client-action-collection.ts new file mode 100644 index 0000000..68ab418 --- /dev/null +++ b/src/shared/actions/client-action-collection.ts @@ -0,0 +1,15 @@ +import type { ActionExecutor } from './types' + +export abstract class ClientActionCollection { + abstract readonly categoryName: string; + + [actionName: string]: + | ActionExecutor, any> + | string + | unknown + | undefined +} + +export type ClientActionCollectionClass = new ( + ...args: ConstructorParameters +) => ClientActionCollection diff --git a/src/shared/actions/client-action-manager.ts b/src/shared/actions/client-action-manager.ts new file mode 100644 index 0000000..bc7abc6 --- /dev/null +++ b/src/shared/actions/client-action-manager.ts @@ -0,0 +1,129 @@ +import { + clientActionCollections, + type ClientActionCollections +} from '@webview/actions' +import { logger } from '@webview/utils/logger' +import { io } from 'socket.io-client' + +import { BaseActionManager } from './base-action-manager' +import type { + ActionContext, + ActionType, + AllActionsConfigs, + AllActionsProxy +} from './types' + +export class ClientActionManager< + Params extends Record = Record, + ResultData = any +> extends BaseActionManager<'client', Params, ResultData> { + currentActionEnv = 'client' as const + + logger = logger + + constructor(clientActionCollections: ClientActionCollections) { + super() + + for (const ClientActionCollectionClass of clientActionCollections) { + const actionCollection = new ClientActionCollectionClass() + + const instanceMethods = Object.getOwnPropertyNames( + Object.getPrototypeOf(actionCollection) + ) + + for (const name of instanceMethods) { + const action = actionCollection[name] + + if (name !== 'constructor' && typeof action === 'function') { + this.registerAction({ + category: actionCollection.categoryName, + name, + execute: action.bind(actionCollection) + }) + } + } + } + } + + async init() { + const port = window.vscodeWebviewState?.socketPort + + if (!port) throw new Error('Socket port not found in VSCode state') + + this.io = io(`http://localhost:${port}`) + await this.initSocketListener() + } +} + +export const createClientActionManager = () => { + const clientActionManager = new ClientActionManager(clientActionCollections) + return clientActionManager +} + +export const createApi = () => { + const clientActionManager = createClientActionManager() + + const execute = < + T extends AllActionsConfigs, + Context extends T['context'], + Result extends Extract< + AllActionsConfigs, + { + context: { + actionType: Context['actionType'] + actionCategory: Context['actionCategory'] + actionName: Context['actionName'] + } + } + >['result'] + >( + context: Context, + onStream?: Context['actionType'] extends 'server' + ? (result: Result) => void + : never + ): Result => clientActionManager.execute(context, onStream) as Result + + const actions = (): AllActionsProxy => { + const proxy = new Proxy( + {}, + { + get: (target, actionType: ActionType) => + new Proxy( + {}, + { + get: (target, actionCategory: string) => + new Proxy( + {}, + { + get: + (target, actionName: string) => + ( + context: Omit< + ActionContext, + 'actionType' | 'actionCategory' | 'actionName' + > + ) => + clientActionManager.execute({ + ...context, + actionType, + actionCategory, + actionName + }) + } + ) + } + ) + } + ) as AllActionsProxy + + return proxy + } + + return { + api: { + execute, + actions + }, + initApi: clientActionManager.init.bind(clientActionManager) + } +} diff --git a/src/shared/actions/server-action-collection.ts b/src/shared/actions/server-action-collection.ts new file mode 100644 index 0000000..f297557 --- /dev/null +++ b/src/shared/actions/server-action-collection.ts @@ -0,0 +1,30 @@ +import type { CommandManager } from '@extension/commands/command-manager' +import type { RegisterManager } from '@extension/registers/register-manager' + +import type { ActionExecutor } from './types' + +export abstract class ServerActionCollection { + abstract readonly categoryName: string + + protected registerManager: RegisterManager + + protected commandManager: CommandManager + + constructor( + registerManager: RegisterManager, + commandManager: CommandManager + ) { + this.registerManager = registerManager + this.commandManager = commandManager + } + + [actionName: string]: + | ActionExecutor, any> + | string + | unknown + | undefined +} + +export type ServerActionCollectionClass = new ( + ...args: ConstructorParameters +) => ServerActionCollection diff --git a/src/shared/actions/server-action-manager.ts b/src/shared/actions/server-action-manager.ts new file mode 100644 index 0000000..0f5120f --- /dev/null +++ b/src/shared/actions/server-action-manager.ts @@ -0,0 +1,121 @@ +import { + serverActionCollections, + type ServerActionCollections +} from '@extension/actions' +import type { CommandManager } from '@extension/commands/command-manager' +import { logger } from '@extension/logger' +import type { RegisterManager } from '@extension/registers/register-manager' +import { WebviewRegister } from '@extension/registers/webview-register' +import findFreePorts from 'find-free-ports' +import { Server } from 'socket.io' +import * as vscode from 'vscode' + +import { BaseActionManager } from './base-action-manager' +import type { ActionContext, ExecuteActionResult } from './types' + +export type WebviewPanel = vscode.WebviewPanel | vscode.WebviewView + +export class ServerActionManager< + Params extends Record = Record, + ResultData = any +> extends BaseActionManager<'server', Params, ResultData> { + currentActionEnv = 'server' as const + + logger = logger + + private port!: number + + constructor( + private context: vscode.ExtensionContext, + private registerManager: RegisterManager, + private commandManager: CommandManager, + serverActionCollections: ServerActionCollections + ) { + super() + + for (const ServerActionCollectionClass of serverActionCollections) { + const actionCollection = new ServerActionCollectionClass( + this.registerManager, + this.commandManager + ) + + const instanceMethods = Object.getOwnPropertyNames( + Object.getPrototypeOf(actionCollection) + ) + + for (const name of instanceMethods) { + const action = actionCollection[name] + + if (name !== 'constructor' && typeof action === 'function') { + this.registerAction({ + category: actionCollection.categoryName, + name, + execute: action.bind(actionCollection) + }) + } + } + } + } + + async init(panel?: WebviewPanel) { + await this.initServer() + + if (!panel) return + + const listenerDispose = panel.webview.onDidReceiveMessage(e => { + if (e.type === 'getVSCodeSocketPort') { + panel.webview.postMessage({ socketPort: this.port }) + } + }) + + this.disposes.push(listenerDispose) + } + + async initServer() { + if (this.port) return + + const freePorts = await findFreePorts.findFreePorts(1, { + startPort: 3001, + endPort: 7999 + }) + + if (!freePorts.length) throw new Error('No free ports found') + + this.port = freePorts[0]! + this.io = new Server(this.port, { + cors: { + origin: '*', + methods: ['GET', 'POST'] + } + }) + + await this.initSocketListener() + } + + execute( + context: ActionContext, + onStream?: (result: ResultData) => void + ): ExecuteActionResult { + if (context.actionType === 'client') { + // Check if there's an open webview, if not open the sidebar webview + const webviewRegister = this.registerManager.getRegister(WebviewRegister) + webviewRegister?.provider?.revealSidebar() + } + + return super.execute(context, onStream) + } +} + +export const createServerActionManager = ( + context: vscode.ExtensionContext, + registerManager: RegisterManager, + commandManager: CommandManager +) => { + const serverActionManager = new ServerActionManager( + context, + registerManager, + commandManager, + serverActionCollections + ) + return serverActionManager +} diff --git a/src/shared/actions/types.ts b/src/shared/actions/types.ts new file mode 100644 index 0000000..baf43b5 --- /dev/null +++ b/src/shared/actions/types.ts @@ -0,0 +1,132 @@ +import type { ServerActionCollections } from '@extension/actions' +import type { ValueUnion } from '@shared/types/common' +import type { ClientActionCollections } from '@webview/actions' + +import type { ClientActionCollection } from './client-action-collection' +import type { ServerActionCollection } from './server-action-collection' + +// Action type definitions +export type ActionType = 'client' | 'server' + +// Base action context interface +export interface ActionContext> { + actionType: ActionType + actionCategory: string + actionName: string + actionParams: Params + abortController?: AbortController +} + +// Action command params +export interface ActionCommandParams> + extends ActionContext {} + +export type ExecuteActionResult = + | ResultData + | Promise + | AsyncGenerator + +export interface SocketActionReqMsg> { + id: number + actionContext: ActionContext +} + +export interface SocketActionResMsg { + id: number + actionResult: ResultData +} + +export type ActionExecutor, ResultData> = ( + context: ActionContext +) => ExecuteActionResult + +export interface ActionDefinition< + Params extends Record, + ResultData = any +> { + category: string + name: string + execute: ActionExecutor +} + +// for infer type from action executor +export type GetActionConfigFromExecutor< + T extends ActionExecutor, + Type extends ActionType, + CategoryName extends string = string, + ActionName extends string = string +> = { + context: Omit< + Parameters[0], + 'actionType' | 'actionCategory' | 'actionName' + > & { + actionType: Type + actionCategory: CategoryName + actionName: ActionName + } + result: ReturnType +} + +export type GetActionProxyExecutor> = ( + context: Omit< + Parameters[0], + 'actionType' | 'actionCategory' | 'actionName' + >, + onStream?: ( + result: ReturnType extends AsyncGenerator + ? R + : never + ) => void +) => ReturnType + +type GetActionConfigMap< + T extends ServerActionCollection | ClientActionCollection, + Type extends ActionType, + IsProxy extends boolean = false +> = { + [K in keyof T as T[K] extends ActionExecutor + ? K + : never]: IsProxy extends true + ? GetActionProxyExecutor< + T[K] extends ActionExecutor ? T[K] : never + > + : GetActionConfigFromExecutor< + T[K] extends ActionExecutor ? T[K] : never, + Type, + T['categoryName'], + K extends string ? K : never + > +} + +type AllServerActionsConfigs = ValueUnion<{ + [K in ServerActionCollections[number] as InstanceType['categoryName']]: ValueUnion< + GetActionConfigMap, 'server'> + > +}> + +export type AllClientActionsConfigs = ValueUnion<{ + [K in ClientActionCollections[number] as InstanceType['categoryName']]: ValueUnion< + GetActionConfigMap, 'client'> + > +}> + +export type AllActionsConfigs = + | AllServerActionsConfigs + | AllClientActionsConfigs + +export type AllActionsProxy = { + server: { + [K in ServerActionCollections[number] as InstanceType['categoryName']]: GetActionConfigMap< + InstanceType, + 'server', + true + > + } + client: { + [K in ClientActionCollections[number] as InstanceType['categoryName']]: GetActionConfigMap< + InstanceType, + 'client', + true + > + } +} diff --git a/src/shared/plugins/agents/codebase-search-agent.ts b/src/shared/plugins/agents/codebase-search-agent.ts index c9b68a6..80b8f97 100644 --- a/src/shared/plugins/agents/codebase-search-agent.ts +++ b/src/shared/plugins/agents/codebase-search-agent.ts @@ -1,6 +1,6 @@ +import { BaseAgent } from '@extension/chat/strategies/base/base-agent' +import type { BaseGraphState } from '@extension/chat/strategies/base/base-state' import { CodebaseWatcherRegister } from '@extension/registers/codebase-watcher-register' -import { BaseAgent } from '@extension/webview-api/chat-context-processor/strategies/base/base-agent' -import type { BaseGraphState } from '@extension/webview-api/chat-context-processor/strategies/base/base-state' import { settledPromiseResults } from '@shared/utils/common' import { z } from 'zod' diff --git a/src/shared/plugins/agents/doc-retriever-agent.ts b/src/shared/plugins/agents/doc-retriever-agent.ts index e6e420e..9f38471 100644 --- a/src/shared/plugins/agents/doc-retriever-agent.ts +++ b/src/shared/plugins/agents/doc-retriever-agent.ts @@ -1,9 +1,9 @@ +import { BaseAgent } from '@extension/chat/strategies/base/base-agent' +import type { BaseGraphState } from '@extension/chat/strategies/base/base-state' +import { DocCrawler } from '@extension/chat/utils/doc-crawler' +import { DocIndexer } from '@extension/chat/vectordb/doc-indexer' import { aidePaths } from '@extension/file-utils/paths' -import { BaseAgent } from '@extension/webview-api/chat-context-processor/strategies/base/base-agent' -import type { BaseGraphState } from '@extension/webview-api/chat-context-processor/strategies/base/base-state' -import { DocCrawler } from '@extension/webview-api/chat-context-processor/utils/doc-crawler' -import { DocIndexer } from '@extension/webview-api/chat-context-processor/vectordb/doc-indexer' -import { docSitesDB } from '@extension/webview-api/lowdb/doc-sites-db' +import { docSitesDB } from '@extension/lowdb/doc-sites-db' import { removeDuplicates, settledPromiseResults } from '@shared/utils/common' import { z } from 'zod' diff --git a/src/shared/plugins/agents/fs-visit-agent.ts b/src/shared/plugins/agents/fs-visit-agent.ts index b0daeb9..9e0666f 100644 --- a/src/shared/plugins/agents/fs-visit-agent.ts +++ b/src/shared/plugins/agents/fs-visit-agent.ts @@ -1,7 +1,7 @@ +import { BaseAgent } from '@extension/chat/strategies/base/base-agent' +import type { BaseGraphState } from '@extension/chat/strategies/base/base-state' import { getValidFiles } from '@extension/file-utils/get-valid-files' import type { FileInfo } from '@extension/file-utils/traverse-fs' -import { BaseAgent } from '@extension/webview-api/chat-context-processor/strategies/base/base-agent' -import type { BaseGraphState } from '@extension/webview-api/chat-context-processor/strategies/base/base-state' import { z } from 'zod' import { fsVisitAgentName } from './agent-names' diff --git a/src/shared/plugins/agents/web-search-agent.ts b/src/shared/plugins/agents/web-search-agent.ts index eca2959..a0b0298 100644 --- a/src/shared/plugins/agents/web-search-agent.ts +++ b/src/shared/plugins/agents/web-search-agent.ts @@ -1,9 +1,9 @@ import { ModelProviderFactory } from '@extension/ai/model-providers/helpers/factory' +import { BaseAgent } from '@extension/chat/strategies/base/base-agent' +import type { BaseGraphState } from '@extension/chat/strategies/base/base-state' +import { ChatMessagesConstructor } from '@extension/chat/strategies/chat-strategy/messages-constructors/chat-messages-constructor' +import { searxngSearch } from '@extension/chat/utils/searxng-search' import { logger } from '@extension/logger' -import { BaseAgent } from '@extension/webview-api/chat-context-processor/strategies/base/base-agent' -import type { BaseGraphState } from '@extension/webview-api/chat-context-processor/strategies/base/base-state' -import { ChatMessagesConstructor } from '@extension/webview-api/chat-context-processor/strategies/chat-strategy/messages-constructors/chat-messages-constructor' -import { searxngSearch } from '@extension/webview-api/chat-context-processor/utils/searxng-search' import { CheerioWebBaseLoader } from '@langchain/community/document_loaders/web/cheerio' import type { Document } from '@langchain/core/documents' import { HumanMessage } from '@langchain/core/messages' diff --git a/src/shared/plugins/agents/web-visit-agent.ts b/src/shared/plugins/agents/web-visit-agent.ts index 096a868..f6d29ee 100644 --- a/src/shared/plugins/agents/web-visit-agent.ts +++ b/src/shared/plugins/agents/web-visit-agent.ts @@ -1,6 +1,6 @@ -import { BaseAgent } from '@extension/webview-api/chat-context-processor/strategies/base/base-agent' -import type { BaseGraphState } from '@extension/webview-api/chat-context-processor/strategies/base/base-state' -import { DocCrawler } from '@extension/webview-api/chat-context-processor/utils/doc-crawler' +import { BaseAgent } from '@extension/chat/strategies/base/base-agent' +import type { BaseGraphState } from '@extension/chat/strategies/base/base-state' +import { DocCrawler } from '@extension/chat/utils/doc-crawler' import { settledPromiseResults } from '@shared/utils/common' import { z } from 'zod' diff --git a/src/shared/plugins/base/base-to-state.ts b/src/shared/plugins/base/base-to-state.ts index 2d15f1f..b5cb725 100644 --- a/src/shared/plugins/base/base-to-state.ts +++ b/src/shared/plugins/base/base-to-state.ts @@ -1,7 +1,7 @@ import type { BaseAgent, GetAgentOutput -} from '@extension/webview-api/chat-context-processor/strategies/base/base-agent' +} from '@extension/chat/strategies/base/base-agent' import type { Agent, Conversation, diff --git a/src/shared/plugins/base/client/client-plugin-types.ts b/src/shared/plugins/base/client/client-plugin-types.ts index 5b6b1c0..03420f7 100644 --- a/src/shared/plugins/base/client/client-plugin-types.ts +++ b/src/shared/plugins/base/client/client-plugin-types.ts @@ -1,4 +1,4 @@ -import type { FC } from 'react' +import type { SFC } from '@shared/types/common' import type { MentionOption } from '@webview/types/chat' import type { LogWithAgent } from '../base-to-state' @@ -11,5 +11,5 @@ export type CustomRenderLogPreviewProps = { export type ClientPluginProviderMap = { useMentionOptions: () => UseMentionOptionsReturns - CustomRenderLogPreview: FC + CustomRenderLogPreview: SFC } diff --git a/src/shared/plugins/base/server/create-provider-manager.ts b/src/shared/plugins/base/server/create-provider-manager.ts index 2bc733a..773600c 100644 --- a/src/shared/plugins/base/server/create-provider-manager.ts +++ b/src/shared/plugins/base/server/create-provider-manager.ts @@ -1,4 +1,4 @@ -import type { ControllerRegister } from '@extension/registers/controller-register' +import type { ActionRegister } from '@extension/registers/action-register' import type { StructuredTool } from '@langchain/core/tools' import type { ChatContext, Conversation, Mention } from '@shared/entities' import type { @@ -39,7 +39,7 @@ export interface ChatStrategyProvider { export type RefreshMentionFn = (mention: Mention) => Mention export interface MentionUtilsProvider { createRefreshMentionFn: ( - controllerRegister: ControllerRegister + actionRegister: ActionRegister ) => Promise } diff --git a/src/shared/plugins/base/strategies.ts b/src/shared/plugins/base/strategies.ts index 7c0fb4d..2adac03 100644 --- a/src/shared/plugins/base/strategies.ts +++ b/src/shared/plugins/base/strategies.ts @@ -1,2 +1,2 @@ -export * from '@extension/webview-api/chat-context-processor/strategies/base' -export * from '@extension/webview-api/chat-context-processor/strategies/chat-strategy/state' +export * from '@extension/chat/strategies/base' +export * from '@extension/chat/strategies/chat-strategy/state' diff --git a/src/shared/plugins/doc-plugin/client/doc-client-plugin.tsx b/src/shared/plugins/doc-plugin/client/doc-client-plugin.tsx index e489d30..2acd229 100644 --- a/src/shared/plugins/doc-plugin/client/doc-client-plugin.tsx +++ b/src/shared/plugins/doc-plugin/client/doc-client-plugin.tsx @@ -7,7 +7,7 @@ import { import { PluginId } from '@shared/plugins/base/types' import { pkg } from '@shared/utils/pkg' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { type MentionOption } from '@webview/types/chat' import { useNavigate } from 'react-router' @@ -36,7 +36,10 @@ const createUseMentionOptions = const { data: docSites = [] } = useQuery({ queryKey: ['realtime', 'docSites'], - queryFn: () => api.doc.getDocSites({}) + queryFn: () => + api.actions().server.doc.getDocSites({ + actionParams: {} + }) }) const docSiteNamesSettingMentionOption: MentionOption = { diff --git a/src/shared/plugins/doc-plugin/client/doc-log-preview.tsx b/src/shared/plugins/doc-plugin/client/doc-log-preview.tsx index a9328bd..f58e3ce 100644 --- a/src/shared/plugins/doc-plugin/client/doc-log-preview.tsx +++ b/src/shared/plugins/doc-plugin/client/doc-log-preview.tsx @@ -4,15 +4,16 @@ import { docRetrieverAgentName } from '@shared/plugins/agents/agent-names' import type { DocRetrieverAgent } from '@shared/plugins/agents/doc-retriever-agent' import type { CustomRenderLogPreviewProps } from '@shared/plugins/base/client/client-plugin-types' import type { GetAgent } from '@shared/plugins/base/strategies' +import type { SFC } from '@shared/types/common' import { ChatLogPreview } from '@webview/components/chat/messages/roles/chat-log-preview' import type { PreviewContent } from '@webview/components/content-preview' import { ContentPreviewPopover } from '@webview/components/content-preview-popover' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { cn } from '@webview/utils/common' import type { DocInfo } from '../types' -export const DocLogPreview: FC = props => { +export const DocLogPreview: SFC = props => { const { log } = props const { agent } = log @@ -62,8 +63,10 @@ const DocItem: FC = ({ doc, className }) => { window.open(doc.path, '_blank') } else { // if path is a local file, open it in the editor - await api.file.openFileInEditor({ - path: doc.path + await api.actions().server.file.openFileInEditor({ + actionParams: { + path: doc.path + } }) } } diff --git a/src/shared/plugins/doc-plugin/server/doc-mention-utils-provider.ts b/src/shared/plugins/doc-plugin/server/doc-mention-utils-provider.ts index 5eb57ee..763f162 100644 --- a/src/shared/plugins/doc-plugin/server/doc-mention-utils-provider.ts +++ b/src/shared/plugins/doc-plugin/server/doc-mention-utils-provider.ts @@ -1,12 +1,14 @@ -import type { ControllerRegister } from '@extension/registers/controller-register' +import type { ActionRegister } from '@extension/registers/action-register' import type { Mention } from '@shared/entities' import type { MentionUtilsProvider } from '@shared/plugins/base/server/create-provider-manager' import { DocMentionType } from '../types' export class DocMentionUtilsProvider implements MentionUtilsProvider { - async createRefreshMentionFn(controllerRegister: ControllerRegister) { - const docSites = await controllerRegister.api('doc').getDocSites() + async createRefreshMentionFn(actionRegister: ActionRegister) { + const docSites = await actionRegister.actions().server.doc.getDocSites({ + actionParams: {} + }) // Create a map of doc site names for quick lookup const docSiteMap = new Map() diff --git a/src/shared/plugins/fs-plugin/client/fs-client-plugin.tsx b/src/shared/plugins/fs-plugin/client/fs-client-plugin.tsx index 1d9ac26..00c5338 100644 --- a/src/shared/plugins/fs-plugin/client/fs-client-plugin.tsx +++ b/src/shared/plugins/fs-plugin/client/fs-client-plugin.tsx @@ -13,7 +13,7 @@ import { PluginId } from '@shared/plugins/base/types' import { pkg } from '@shared/utils/pkg' import { useQuery } from '@tanstack/react-query' import { FileIcon as FileIcon2 } from '@webview/components/file-icon' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { SearchSortStrategy, type MentionOption } from '@webview/types/chat' import { getFileNameFromPath } from '@webview/utils/path' import { ChevronRightIcon, FileIcon, FolderTreeIcon } from 'lucide-react' @@ -44,22 +44,40 @@ const createUseMentionOptions = (props: SetupProps) => (): UseMentionOptionsReturns => { const { data: files = [] } = useQuery({ queryKey: ['realtime', 'files'], - queryFn: () => api.file.traverseWorkspaceFiles({ filesOrFolders: ['./'] }) + queryFn: () => + api.actions().server.file.traverseWorkspaceFiles({ + actionParams: { + filesOrFolders: ['./'] + } + }) }) const { data: folders = [] } = useQuery({ queryKey: ['realtime', 'folders'], - queryFn: () => api.file.traverseWorkspaceFolders({ folders: ['./'] }) + queryFn: () => + api.actions().server.file.traverseWorkspaceFolders({ + actionParams: { + folders: ['./'] + } + }) }) const { data: editorErrors = [] } = useQuery({ queryKey: ['realtime', 'editorErrors'], - queryFn: () => api.file.getCurrentEditorErrors({}) + queryFn: () => + api.actions().server.file.getCurrentEditorErrors({ + actionParams: {} + }) }) const { data: treesInfo = [] } = useQuery({ queryKey: ['realtime', 'treesInfo'], - queryFn: () => api.file.getWorkspaceTreesInfo({ depth: 5 }) + queryFn: () => + api.actions().server.file.getWorkspaceTreesInfo({ + actionParams: { + depth: 5 + } + }) }) const filesMentionOptions: MentionOption[] = files.map(file => { diff --git a/src/shared/plugins/fs-plugin/client/fs-log-preview.tsx b/src/shared/plugins/fs-plugin/client/fs-log-preview.tsx index f85db32..96f9d4c 100644 --- a/src/shared/plugins/fs-plugin/client/fs-log-preview.tsx +++ b/src/shared/plugins/fs-plugin/client/fs-log-preview.tsx @@ -7,17 +7,18 @@ import type { CodebaseSearchAgent } from '@shared/plugins/agents/codebase-search import type { FsVisitAgent } from '@shared/plugins/agents/fs-visit-agent' import type { CustomRenderLogPreviewProps } from '@shared/plugins/base/client/client-plugin-types' import type { GetAgent } from '@shared/plugins/base/strategies' +import type { SFC } from '@shared/types/common' import { ChatLogPreview } from '@webview/components/chat/messages/roles/chat-log-preview' import { FileIcon } from '@webview/components/file-icon' import { TruncateStart } from '@webview/components/truncate-start' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import type { FileInfo } from '@webview/types/chat' import { cn } from '@webview/utils/common' import { getFileNameFromPath } from '@webview/utils/path' import type { CodeSnippet } from '../types' -export const FsLogPreview: FC = props => { +export const FsLogPreview: SFC = props => { const { log } = props const { agent } = log @@ -60,9 +61,11 @@ const FileSnippetItem: FC = ({ file }) => { const fileFullPath = file.fullPath if (!fileFullPath) return - await api.file.openFileInEditor({ - path: fileFullPath, - startLine: 'startLine' in file ? file.startLine : undefined + await api.actions().server.file.openFileInEditor({ + actionParams: { + path: fileFullPath, + startLine: 'startLine' in file ? file.startLine : undefined + } }) } diff --git a/src/shared/plugins/fs-plugin/server/chat-strategy/fs-chat-strategy-provider.ts b/src/shared/plugins/fs-plugin/server/chat-strategy/fs-chat-strategy-provider.ts index e2c8c49..40e6d92 100644 --- a/src/shared/plugins/fs-plugin/server/chat-strategy/fs-chat-strategy-provider.ts +++ b/src/shared/plugins/fs-plugin/server/chat-strategy/fs-chat-strategy-provider.ts @@ -1,3 +1,5 @@ +import { formatCodeSnippet } from '@extension/chat/utils/code-snippet-formatter' +import { getFileContent } from '@extension/chat/utils/get-file-content' import { AI_SUPPORT_IMG_EXT, IGNORE_FILETYPES_WITHOUT_IMG @@ -10,8 +12,6 @@ import { import { VsCodeFS } from '@extension/file-utils/vscode-fs' import { logger } from '@extension/logger' import { getWorkspaceFolder } from '@extension/utils' -import { formatCodeSnippet } from '@extension/webview-api/chat-context-processor/utils/code-snippet-formatter' -import { getFileContent } from '@extension/webview-api/chat-context-processor/utils/get-file-content' import type { StructuredTool } from '@langchain/core/tools' import type { ChatContext, Conversation } from '@shared/entities' import type { diff --git a/src/shared/plugins/fs-plugin/server/fs-mention-utils-provider.ts b/src/shared/plugins/fs-plugin/server/fs-mention-utils-provider.ts index c0b6f79..6b5870c 100644 --- a/src/shared/plugins/fs-plugin/server/fs-mention-utils-provider.ts +++ b/src/shared/plugins/fs-plugin/server/fs-mention-utils-provider.ts @@ -1,27 +1,41 @@ import type { FileInfo, FolderInfo } from '@extension/file-utils/traverse-fs' -import type { ControllerRegister } from '@extension/registers/controller-register' +import type { ActionRegister } from '@extension/registers/action-register' import type { Mention } from '@shared/entities' import type { MentionUtilsProvider } from '@shared/plugins/base/server/create-provider-manager' import { FsMentionType, type TreeInfo } from '../types' export class FsMentionUtilsProvider implements MentionUtilsProvider { - async createRefreshMentionFn(controllerRegister: ControllerRegister) { - const files = await controllerRegister - .api('file') - .traverseWorkspaceFiles({ filesOrFolders: ['./'] }) - - const folders = await controllerRegister - .api('file') - .traverseWorkspaceFolders({ folders: ['./'] }) - - const editorErrors = await controllerRegister - .api('file') - .getCurrentEditorErrors() - - const treesInfo = await controllerRegister - .api('file') - .getWorkspaceTreesInfo({ depth: 5 }) + async createRefreshMentionFn(actionRegister: ActionRegister) { + const files = await actionRegister + .actions() + .server.file.traverseWorkspaceFiles({ + actionParams: { + filesOrFolders: ['./'] + } + }) + + const folders = await actionRegister + .actions() + .server.file.traverseWorkspaceFolders({ + actionParams: { + folders: ['./'] + } + }) + + const editorErrors = await actionRegister + .actions() + .server.file.getCurrentEditorErrors({ + actionParams: {} + }) + + const treesInfo = await actionRegister + .actions() + .server.file.getWorkspaceTreesInfo({ + actionParams: { + depth: 5 + } + }) const filePathMapFile = new Map() diff --git a/src/shared/plugins/git-plugin/client/git-client-plugin.tsx b/src/shared/plugins/git-plugin/client/git-client-plugin.tsx index 8188d02..04c3b8e 100644 --- a/src/shared/plugins/git-plugin/client/git-client-plugin.tsx +++ b/src/shared/plugins/git-plugin/client/git-client-plugin.tsx @@ -7,7 +7,7 @@ import { import { PluginId } from '@shared/plugins/base/types' import { pkg } from '@shared/utils/pkg' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { type MentionOption } from '@webview/types/chat' import { GitCommit, GitMentionType, GitPluginState } from '../types' @@ -32,8 +32,10 @@ const createUseMentionOptions = const { data: gitCommits = [] } = useQuery({ queryKey: ['realtime', 'git-commits'], queryFn: () => - api.git.getHistoryCommits({ - maxCount: 50 + api.actions().server.git.getHistoryCommits({ + actionParams: { + maxCount: 50 + } }) }) diff --git a/src/shared/plugins/git-plugin/server/git-mention-utils-provider.ts b/src/shared/plugins/git-plugin/server/git-mention-utils-provider.ts index 7731763..1d1e134 100644 --- a/src/shared/plugins/git-plugin/server/git-mention-utils-provider.ts +++ b/src/shared/plugins/git-plugin/server/git-mention-utils-provider.ts @@ -1,14 +1,18 @@ -import type { ControllerRegister } from '@extension/registers/controller-register' +import type { ActionRegister } from '@extension/registers/action-register' import type { Mention } from '@shared/entities' import type { MentionUtilsProvider } from '@shared/plugins/base/server/create-provider-manager' import { GitMentionType } from '../types' export class GitMentionUtilsProvider implements MentionUtilsProvider { - async createRefreshMentionFn(controllerRegister: ControllerRegister) { - const commits = await controllerRegister.api('git').getHistoryCommits({ - maxCount: 50 - }) + async createRefreshMentionFn(actionRegister: ActionRegister) { + const commits = await actionRegister + .actions() + .server.git.getHistoryCommits({ + actionParams: { + maxCount: 50 + } + }) // Create a map of commit SHAs for quick lookup const commitMap = new Map(commits.map(commit => [commit.sha, commit])) diff --git a/src/shared/plugins/terminal-plugin/client/terminal-client-plugin.tsx b/src/shared/plugins/terminal-plugin/client/terminal-client-plugin.tsx index 97c5306..a48cc49 100644 --- a/src/shared/plugins/terminal-plugin/client/terminal-client-plugin.tsx +++ b/src/shared/plugins/terminal-plugin/client/terminal-client-plugin.tsx @@ -6,7 +6,7 @@ import { import { PluginId } from '@shared/plugins/base/types' import { pkg } from '@shared/utils/pkg' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { type MentionOption } from '@webview/types/chat' import { SquareTerminalIcon } from 'lucide-react' @@ -36,7 +36,10 @@ const createUseMentionOptions = (props: SetupProps) => (): UseMentionOptionsReturns => { const { data: terminals = [] } = useQuery({ queryKey: ['realtime', 'terminals'], - queryFn: () => api.terminal.getTerminalsForMention({}) + queryFn: () => + api.actions().server.terminal.getTerminalsForMention({ + actionParams: {} + }) }) const terminalMentionOptions: MentionOption[] = terminals.map(terminal => ({ diff --git a/src/shared/plugins/terminal-plugin/server/terminal-mention-utils-provider.ts b/src/shared/plugins/terminal-plugin/server/terminal-mention-utils-provider.ts index f9b3d07..bc96bf3 100644 --- a/src/shared/plugins/terminal-plugin/server/terminal-mention-utils-provider.ts +++ b/src/shared/plugins/terminal-plugin/server/terminal-mention-utils-provider.ts @@ -1,14 +1,16 @@ -import type { ControllerRegister } from '@extension/registers/controller-register' +import type { ActionRegister } from '@extension/registers/action-register' import type { Mention } from '@shared/entities' import type { MentionUtilsProvider } from '@shared/plugins/base/server/create-provider-manager' import { TerminalMentionType } from '../types' export class TerminalMentionUtilsProvider implements MentionUtilsProvider { - async createRefreshMentionFn(controllerRegister: ControllerRegister) { - const terminals = await controllerRegister - .api('terminal') - .getTerminalsForMention() + async createRefreshMentionFn(actionRegister: ActionRegister) { + const terminals = await actionRegister + .actions() + .server.terminal.getTerminalsForMention({ + actionParams: {} + }) // Create a map of terminal processIds for quick lookup const terminalMap = new Map( diff --git a/src/shared/plugins/web-plugin/client/web-log-preview.tsx b/src/shared/plugins/web-plugin/client/web-log-preview.tsx index 5944ebc..1b782bb 100644 --- a/src/shared/plugins/web-plugin/client/web-log-preview.tsx +++ b/src/shared/plugins/web-plugin/client/web-log-preview.tsx @@ -8,6 +8,7 @@ import type { WebSearchAgent } from '@shared/plugins/agents/web-search-agent' import type { WebVisitAgent } from '@shared/plugins/agents/web-visit-agent' import type { CustomRenderLogPreviewProps } from '@shared/plugins/base/client/client-plugin-types' import type { GetAgent } from '@shared/plugins/base/strategies' +import type { SFC } from '@shared/types/common' import { ChatLogPreview } from '@webview/components/chat/messages/roles/chat-log-preview' import type { PreviewContent } from '@webview/components/content-preview' import { ContentPreviewPopover } from '@webview/components/content-preview-popover' @@ -15,7 +16,7 @@ import { cn } from '@webview/utils/common' import type { WebDocInfo } from '../types' -export const WebLogPreview: FC = props => { +export const WebLogPreview: SFC = props => { const { log } = props const { agent } = log diff --git a/src/shared/plugins/web-plugin/server/web-mention-utils-provider.ts b/src/shared/plugins/web-plugin/server/web-mention-utils-provider.ts index 1d4afc5..1c0826f 100644 --- a/src/shared/plugins/web-plugin/server/web-mention-utils-provider.ts +++ b/src/shared/plugins/web-plugin/server/web-mention-utils-provider.ts @@ -1,4 +1,4 @@ -import type { ControllerRegister } from '@extension/registers/controller-register' +import type { ActionRegister } from '@extension/registers/action-register' import type { Mention } from '@shared/entities' import type { MentionUtilsProvider } from '@shared/plugins/base/server/create-provider-manager' @@ -6,7 +6,7 @@ import { WebMentionType } from '../types' export class WebMentionUtilsProvider implements MentionUtilsProvider { // eslint-disable-next-line unused-imports/no-unused-vars - async createRefreshMentionFn(controllerRegister: ControllerRegister) { + async createRefreshMentionFn(actionRegister: ActionRegister) { return (_mention: Mention) => { const mention = { ..._mention } as Mention switch (mention.type) { diff --git a/src/shared/types/common.ts b/src/shared/types/common.ts index 784b8b0..0ad4893 100644 --- a/src/shared/types/common.ts +++ b/src/shared/types/common.ts @@ -1,3 +1,12 @@ +import type { ReactNode } from 'react' +import type { ZodObject } from 'zod' + export type UnPromise = T extends Promise ? U : T export type MaybePromise = T | Promise export type ValueUnion = T[keyof T] +export type ZodObjectAny = ZodObject + +export interface SFC

{ + (props: P): ReactNode + displayName?: string | undefined +} diff --git a/src/shared/utils/common.ts b/src/shared/utils/common.ts index 1f260bf..1ce66c8 100644 --- a/src/shared/utils/common.ts +++ b/src/shared/utils/common.ts @@ -88,3 +88,21 @@ export const AbortError = new Error('AbortError') export const isAbortError = (error: any) => ['AbortError', 'Aborted'].includes(getErrorMsg(error)) + +export const signalToController = (signal: AbortSignal) => { + const controller = new AbortController() + + if (signal.aborted) { + controller.abort(signal.reason) + } else { + signal.addEventListener( + 'abort', + () => { + controller.abort(signal.reason) + }, + { once: true } + ) + } + + return controller +} diff --git a/src/webview/actions/chat-actions.ts b/src/webview/actions/chat-actions.ts new file mode 100644 index 0000000..1a3a0b7 --- /dev/null +++ b/src/webview/actions/chat-actions.ts @@ -0,0 +1,41 @@ +import { ClientActionCollection } from '@shared/actions/client-action-collection' +import type { ActionContext } from '@shared/actions/types' +import { useChatContext } from '@webview/contexts/chat-context' +import { useNavigate } from 'react-router' +import { toast } from 'sonner' + +import { emitter } from './utils/emitter' +import { useOn } from './utils/use-on' + +export class ChatActionsCollection extends ClientActionCollection { + readonly categoryName = 'chat' + + openChatPage( + context: ActionContext<{ + sessionId?: string + refreshSessions?: boolean + toastMessage?: string + }> + ) { + emitter.emit('chat.openChatPage', context) + } +} + +export const useChatActions = () => { + const navigate = useNavigate() + const { refreshChatSessions } = useChatContext() + + useOn('chat.openChatPage', async context => { + const { toastMessage, sessionId, refreshSessions } = context.actionParams + + if (refreshSessions) { + await refreshChatSessions() + } + + if (toastMessage) { + toast.info(toastMessage) + } + + navigate(`/?sessionId=${sessionId}`) + }) +} diff --git a/src/webview/actions/common-actions.ts b/src/webview/actions/common-actions.ts new file mode 100644 index 0000000..f7af17e --- /dev/null +++ b/src/webview/actions/common-actions.ts @@ -0,0 +1,29 @@ +import { ClientActionCollection } from '@shared/actions/client-action-collection' +import type { ActionContext } from '@shared/actions/types' +import { toast } from 'sonner' + +import { emitter } from './utils/emitter' +import { useOn } from './utils/use-on' + +export class CommonActionsCollection extends ClientActionCollection { + readonly categoryName = 'common' + + toast( + context: ActionContext<{ + type?: 'success' | 'info' | 'warning' | 'error' | 'message' + message?: string + }> + ) { + emitter.emit('common.toast', context) + } +} + +export const useCommonActions = () => { + useOn('common.toast', context => { + const { type, message } = context.actionParams + + if (message) { + toast[type ?? 'info'](message) + } + }) +} diff --git a/src/webview/actions/index.ts b/src/webview/actions/index.ts new file mode 100644 index 0000000..08231a8 --- /dev/null +++ b/src/webview/actions/index.ts @@ -0,0 +1,17 @@ +import { ChatActionsCollection, useChatActions } from './chat-actions' +import { CommonActionsCollection, useCommonActions } from './common-actions' +import { SettingActionsCollection, useSettingActions } from './setting-actions' + +export const clientActionCollections = [ + CommonActionsCollection, + ChatActionsCollection, + SettingActionsCollection +] as const + +export type ClientActionCollections = typeof clientActionCollections + +export const useGlobalActions = () => { + useCommonActions() + useSettingActions() + useChatActions() +} diff --git a/src/webview/actions/setting-actions.ts b/src/webview/actions/setting-actions.ts new file mode 100644 index 0000000..142259c --- /dev/null +++ b/src/webview/actions/setting-actions.ts @@ -0,0 +1,34 @@ +import { ClientActionCollection } from '@shared/actions/client-action-collection' +import type { ActionContext } from '@shared/actions/types' +import { useNavigate } from 'react-router' +import { toast } from 'sonner' + +import { emitter } from './utils/emitter' +import { useOn } from './utils/use-on' + +export class SettingActionsCollection extends ClientActionCollection { + readonly categoryName = 'setting' + + openSettingPage( + context: ActionContext<{ + settingPageId: string + toastMessage?: string + }> + ) { + emitter.emit('setting.openSettingPage', context) + } +} + +export const useSettingActions = () => { + const navigate = useNavigate() + + useOn('setting.openSettingPage', context => { + const { toastMessage, settingPageId } = context.actionParams + + if (toastMessage) { + toast.info(toastMessage) + } + + navigate(`/settings?pageId=${settingPageId}`) + }) +} diff --git a/src/webview/actions/utils/emitter.ts b/src/webview/actions/utils/emitter.ts new file mode 100644 index 0000000..39f61ee --- /dev/null +++ b/src/webview/actions/utils/emitter.ts @@ -0,0 +1,32 @@ +import EventEmitter3 from 'eventemitter3' + +export class EventEmitter< + EventTypes extends EventEmitter3.ValidEventTypes = string | symbol, + Context = any +> extends EventEmitter3 { + async emitWaitForDone>( + event: T, + ...args: EventEmitter3.EventArgs + ): Promise { + // Get all listeners for this event + const listeners = this.listeners(event) + // Wrap all listeners in Promises so we can wait for them all to complete + const promises = listeners.map( + listener => + // We need to wrap it in a new Promise to be able to wait for it to complete + new Promise((resolve, reject) => { + try { + const result = listener(...(args as any)) + resolve(result) + } catch (error) { + reject(error) + } + }) + ) + // Wait for all Promises to complete + await Promise.all(promises) + // Return a boolean indicating whether any listeners handled this event + return promises.length > 0 + } +} +export const emitter = new EventEmitter() diff --git a/src/webview/actions/utils/use-on.ts b/src/webview/actions/utils/use-on.ts new file mode 100644 index 0000000..20916ad --- /dev/null +++ b/src/webview/actions/utils/use-on.ts @@ -0,0 +1,25 @@ +import { useEffect } from 'react' +import type { AllClientActionsConfigs } from '@shared/actions/types' + +import { emitter } from './emitter' + +type ValidActionEvent = { + [T in AllClientActionsConfigs as `${T['context']['actionCategory']}.${T['context']['actionName']}`]: T['context'] +} + +/** + * Hook for subscribing to action events with type safety + * @param event - The event name to subscribe to + * @param callback - The callback function to be called when the event is emitted + */ +export const useOn = ( + event: E, + callback: (context: ValidActionEvent[E]) => void +) => { + useEffect(() => { + emitter.on(event, callback) + return () => { + emitter.off(event, callback) + } + }, [event, callback]) +} diff --git a/src/webview/components/chat/editor/chat-input.tsx b/src/webview/components/chat/editor/chat-input.tsx index d2259d6..ce69641 100644 --- a/src/webview/components/chat/editor/chat-input.tsx +++ b/src/webview/components/chat/editor/chat-input.tsx @@ -19,7 +19,7 @@ import { FileIcon } from '@webview/components/file-icon' import { BorderBeam } from '@webview/components/ui/border-beam' import { usePlugin, WithPluginProvider } from '@webview/contexts/plugin-context' import { useCallbackRef } from '@webview/hooks/use-callback-ref' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { type FileInfo } from '@webview/types/chat' import { cn } from '@webview/utils/common' import { logger } from '@webview/utils/logger' @@ -148,8 +148,11 @@ const _ChatInput: FC = ({ } // refresh mentions - const newConversation = - await api.mention.refreshConversationMentions(getConversation()) + const newConversation = await api + .actions() + .server.mention.refreshConversationMentions({ + actionParams: { conversation: getConversation() } + }) logger.verbose('send conversation', newConversation) onSend(newConversation) diff --git a/src/webview/components/chat/messages/markdown/code-block.tsx b/src/webview/components/chat/messages/markdown/code-block.tsx index 4c2b540..c74b05c 100644 --- a/src/webview/components/chat/messages/markdown/code-block.tsx +++ b/src/webview/components/chat/messages/markdown/code-block.tsx @@ -1,6 +1,6 @@ import { FC } from 'react' import { useGetFullPath } from '@webview/hooks/api/use-get-full-path' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { type HighlighterProps } from './highlighter/highlighter' import { type MermaidProps } from './mermaid/mermaid' @@ -68,8 +68,10 @@ export const SingleCodeBlock: FC = props => { const openFileInEditor = async () => { if (!fileFullPath) return - await api.file.openFileInEditor({ - path: fileFullPath + await api.actions().server.file.openFileInEditor({ + actionParams: { + path: fileFullPath + } }) } diff --git a/src/webview/components/chat/messages/markdown/highlighter/highlighter.tsx b/src/webview/components/chat/messages/markdown/highlighter/highlighter.tsx index 6fcfb2a..10526cc 100644 --- a/src/webview/components/chat/messages/markdown/highlighter/highlighter.tsx +++ b/src/webview/components/chat/messages/markdown/highlighter/highlighter.tsx @@ -14,7 +14,7 @@ import { Button } from '@webview/components/ui/button' import { useFileInfoForMessage } from '@webview/hooks/api/use-file-info-for-message' import { useApplyCode } from '@webview/hooks/chat/use-apply-code' import { useShikiHighlighter } from '@webview/hooks/use-shiki-highlighter' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { getFileNameFromPath } from '@webview/utils/path' import parse from 'html-react-parser' import { toast } from 'sonner' @@ -85,9 +85,11 @@ export const Highlighter: React.FC = ({ const openFileInEditor = async () => { if (!fileFullPath) return - await api.file.openFileInEditor({ - path: fileFullPath, - startLine + await api.actions().server.file.openFileInEditor({ + actionParams: { + path: fileFullPath, + startLine + } }) } diff --git a/src/webview/components/chat/selectors/model-selector.tsx b/src/webview/components/chat/selectors/model-selector.tsx index b114e5b..2f01b95 100644 --- a/src/webview/components/chat/selectors/model-selector.tsx +++ b/src/webview/components/chat/selectors/model-selector.tsx @@ -8,7 +8,7 @@ import { type AIProvider, type FeatureModelSettingValue } from '@shared/entities' -import { removeDuplicates } from '@shared/utils/common' +import { removeDuplicates, signalToController } from '@shared/utils/common' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { ButtonWithTooltip } from '@webview/components/button-with-tooltip' import { @@ -27,9 +27,8 @@ import { PopoverTrigger } from '@webview/components/ui/popover' import { useControllableState } from '@webview/hooks/use-controllable-state' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { cn } from '@webview/utils/common' -import { noop } from 'es-toolkit' import { useNavigate } from 'react-router-dom' interface ModelSelectorProps { @@ -66,8 +65,10 @@ export const ModelSelector: React.FC = ({ useQuery({ queryKey: ['featureModelSetting', featureModelSettingKey], queryFn: () => - api.aiModel.getProviderAndModelForFeature({ - key: featureModelSettingKey + api.actions().server.aiModel.getProviderAndModelForFeature({ + actionParams: { + key: featureModelSettingKey + } }), refetchOnMount: true }) @@ -76,7 +77,10 @@ export const ModelSelector: React.FC = ({ mutationFn: (req: { key: FeatureModelSettingKey value: FeatureModelSettingValue - }) => api.aiModel.setModelSettingForFeature(req), + }) => + api.actions().server.aiModel.setModelSettingForFeature({ + actionParams: req + }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['featureModelSetting', featureModelSettingKey] @@ -86,13 +90,21 @@ export const ModelSelector: React.FC = ({ const { data: providers = [], isLoading: isLoadingProviders } = useQuery({ queryKey: ['aiProviders'], - queryFn: ({ signal }) => api.aiProvider.getProviders({}, noop, signal), + queryFn: ({ signal }) => + api.actions().server.aiProvider.getProviders({ + actionParams: {}, + abortController: signalToController(signal) + }), refetchOnMount: true }) const { data: models = [], isLoading: isLoadingModels } = useQuery({ queryKey: ['aiModels'], - queryFn: ({ signal }) => api.aiModel.getModels({}, noop, signal), + queryFn: ({ signal }) => + api.actions().server.aiModel.getModels({ + actionParams: {}, + abortController: signalToController(signal) + }), refetchOnMount: true }) @@ -210,10 +222,9 @@ export const ModelSelector: React.FC = ({ const handleAddProvider = async (data: Partial) => { const order = providers.length + 1 - await api.aiProvider.addProvider({ ...data, order } as Omit< - AIProvider, - 'id' - >) + await api.actions().server.aiProvider.addProvider({ + actionParams: { ...data, order } as Omit + }) setIsAddingProvider(false) queryClient.invalidateQueries({ queryKey: providerQueryKey }) } @@ -316,7 +327,9 @@ export const ModelSelector: React.FC = ({ onOpenChange={open => !open && setEditingProvider(undefined)} provider={editingProvider} onSubmit={async data => { - await api.aiProvider.updateProvider(data as AIProvider) + await api.actions().server.aiProvider.updateProvider({ + actionParams: data as AIProvider + }) setEditingProvider(undefined) queryClient.invalidateQueries({ queryKey: providerQueryKey }) }} diff --git a/src/webview/components/chat/sidebar/chat-sidebar.tsx b/src/webview/components/chat/sidebar/chat-sidebar.tsx index bab64b4..30bd4d5 100644 --- a/src/webview/components/chat/sidebar/chat-sidebar.tsx +++ b/src/webview/components/chat/sidebar/chat-sidebar.tsx @@ -2,14 +2,20 @@ import React from 'react' import { PlusIcon, TrashIcon } from '@radix-ui/react-icons' import { Button } from '@webview/components/ui/button' import { useChatContext } from '@webview/contexts/chat-context' -import { useChatSessionsUI } from '@webview/hooks/chat/use-chat-sessions-ui' import { cn } from '@webview/utils/common' export const ChatSidebar: React.FC = () => { - const { context, createAndSwitchToNewSession, deleteSession, switchSession } = - useChatContext() + const { + context, + chatSessions, + createAndSwitchToNewSession, + deleteSession, + switchSession + } = useChatContext() - const { chatSessionForRender } = useChatSessionsUI() + const chatSessionForRender = [...chatSessions].sort( + (a, b) => b.updatedAt - a.updatedAt + ) return (

diff --git a/src/webview/components/global-search/global-search.tsx b/src/webview/components/global-search/global-search.tsx index 24970c0..324361e 100644 --- a/src/webview/components/global-search/global-search.tsx +++ b/src/webview/components/global-search/global-search.tsx @@ -147,6 +147,8 @@ export const GlobalSearch: React.FC = ({ onTab: (_, index) => setActiveCategory(finalCategories[index]?.id ?? 'all') }) + const showPreview = isOpen && focusedItem?.renderPreview + return ( = ({ -
+
{ + if (!showPreview) { + setIsOpen(false) + } + }} + > - {isOpen && focusedItem?.renderPreview ? ( + {showPreview ? (
- {focusedItem.renderPreview()} + {focusedItem?.renderPreview?.()}
) : null}
+
{ + setIsOpen(false) + }} + />
diff --git a/src/webview/components/settings/custom-renders/ai-provider-management/ai-model-management/index.tsx b/src/webview/components/settings/custom-renders/ai-provider-management/ai-model-management/index.tsx index 6a2ecfa..9d6b9e0 100644 --- a/src/webview/components/settings/custom-renders/ai-provider-management/ai-model-management/index.tsx +++ b/src/webview/components/settings/custom-renders/ai-provider-management/ai-model-management/index.tsx @@ -6,11 +6,10 @@ import { type AIModelFeature, type AIProvider } from '@shared/entities' -import { removeDuplicates } from '@shared/utils/common' +import { removeDuplicates, signalToController } from '@shared/utils/common' import { useMutation, useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { cn, logAndToastError } from '@webview/utils/common' -import { noop } from 'es-toolkit' import { toast } from 'sonner' import { CreateModelDialog } from './create-model-dialog' @@ -52,21 +51,24 @@ export const AIModelManagement = ({ const { data: models = [], refetch: refetchModels } = useQuery({ queryKey: ['aiModels', providerOrBaseUrl], queryFn: ({ signal }) => - api.aiModel.getModelsByProviderOrBaseUrl( - { + api.actions().server.aiModel.getModelsByProviderOrBaseUrl({ + actionParams: { providerOrBaseUrl: providerOrBaseUrl! }, - noop, - signal - ), + abortController: signalToController(signal) + }), enabled: !!providerOrBaseUrl }) const updateProviderRemoteModelsMutation = useMutation({ mutationFn: async () => { - const remoteModelNames = await api.aiModel.fetchRemoteModelNames({ - provider - }) + const remoteModelNames = await api + .actions() + .server.aiModel.fetchRemoteModelNames({ + actionParams: { + provider + } + }) setProvider({ ...provider, realTimeModels: remoteModelNames @@ -95,7 +97,10 @@ export const AIModelManagement = ({ .sort((a, b) => a.name.localeCompare(b.name)) const updateModelMutation = useMutation({ - mutationFn: (model: AIModel) => api.aiModel.createOrUpdateModel(model), + mutationFn: (model: AIModel) => + api.actions().server.aiModel.createOrUpdateModel({ + actionParams: model + }), onSuccess: () => { refetchModels() } @@ -128,10 +133,12 @@ export const AIModelManagement = ({ model: AIModel, features: AIModelFeature[] ) => { - const result = await api.aiModel.testModelFeatures({ - provider, - model, - features + const result = await api.actions().server.aiModel.testModelFeatures({ + actionParams: { + provider, + model, + features + } }) updateModelMutation.mutate({ diff --git a/src/webview/components/settings/custom-renders/ai-provider-management/index.tsx b/src/webview/components/settings/custom-renders/ai-provider-management/index.tsx index e77b530..712b92c 100644 --- a/src/webview/components/settings/custom-renders/ai-provider-management/index.tsx +++ b/src/webview/components/settings/custom-renders/ai-provider-management/index.tsx @@ -1,10 +1,10 @@ import { useState } from 'react' import { FeatureModelSettingKey, type AIProvider } from '@shared/entities' +import { signalToController } from '@shared/utils/common' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { CardList } from '@webview/components/ui/card-list' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { logAndToastError } from '@webview/utils/common' -import { noop } from 'es-toolkit' import { toast } from 'sonner' import { ModelSettings } from './model-settings' @@ -21,12 +21,18 @@ export const AIProviderManagement = () => { const { data: providers = [] } = useQuery({ queryKey: providerQueryKey, - queryFn: ({ signal }) => api.aiProvider.getProviders({}, noop, signal) + queryFn: ({ signal }) => + api.actions().server.aiProvider.getProviders({ + actionParams: {}, + abortController: signalToController(signal) + }) }) const addProviderMutation = useMutation({ mutationFn: (data: Omit) => - api.aiProvider.addProvider(data), + api.actions().server.aiProvider.addProvider({ + actionParams: data + }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: providerQueryKey }) toast.success('New provider added successfully') @@ -38,7 +44,10 @@ export const AIProviderManagement = () => { }) const updateProviderMutation = useMutation({ - mutationFn: (data: AIProvider) => api.aiProvider.updateProvider(data), + mutationFn: (data: AIProvider) => + api.actions().server.aiProvider.updateProvider({ + actionParams: data + }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: providerQueryKey }) toast.success('Provider updated successfully') @@ -51,7 +60,11 @@ export const AIProviderManagement = () => { const removeProviderMutation = useMutation({ mutationFn: (providers: AIProvider[]) => Promise.all( - providers.map(p => api.aiProvider.removeProvider({ id: p.id })) + providers.map(p => + api.actions().server.aiProvider.removeProvider({ + actionParams: { id: p.id } + }) + ) ), onSuccess: () => { queryClient.invalidateQueries({ queryKey: providerQueryKey }) @@ -69,7 +82,9 @@ export const AIProviderManagement = () => { order: item.order })) - return await api.aiProvider.updateProviders(updates) + return await api.actions().server.aiProvider.updateProviders({ + actionParams: updates + }) }, onSettled: () => { queryClient.invalidateQueries({ queryKey: providerQueryKey }) diff --git a/src/webview/components/settings/custom-renders/codebase.tsx b/src/webview/components/settings/custom-renders/codebase.tsx index ad30185..e694b86 100644 --- a/src/webview/components/settings/custom-renders/codebase.tsx +++ b/src/webview/components/settings/custom-renders/codebase.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { Button } from '@webview/components/ui/button' import { Progress } from '@webview/components/ui/progress' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import type { ProgressInfo } from '@webview/types/chat' import { logger } from '@webview/utils/logger' @@ -14,9 +14,11 @@ export const CodebaseIndexing = () => { setProgress(0) try { - api.codebase.reindexCodebase( + api.actions().server.codebase.reindexCodebase( { - type: 'full' + actionParams: { + type: 'full' + } }, (progress: ProgressInfo) => { logger.dev.verbose('progress', progress) diff --git a/src/webview/components/settings/custom-renders/doc-management/index.tsx b/src/webview/components/settings/custom-renders/doc-management/index.tsx index d68319f..1c8a6e5 100644 --- a/src/webview/components/settings/custom-renders/doc-management/index.tsx +++ b/src/webview/components/settings/custom-renders/doc-management/index.tsx @@ -1,12 +1,12 @@ import { useState } from 'react' import type { DocSite } from '@shared/entities' +import { signalToController } from '@shared/utils/common' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { CardList } from '@webview/components/ui/card-list' import { Input } from '@webview/components/ui/input' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import type { ProgressInfo } from '@webview/types/chat' import { logAndToastError } from '@webview/utils/common' -import { noop } from 'es-toolkit' import { toast } from 'sonner' import { DocSiteCard } from './doc-site-card' @@ -34,14 +34,22 @@ export const DocManagement = () => { queryKey: [...docSitesQueryKey, searchQuery], queryFn: ({ signal }) => searchQuery - ? api.doc.searchDocSites(searchQuery, noop, signal) - : api.doc.getDocSites({}, noop, signal) + ? api.actions().server.doc.searchDocSites({ + actionParams: { query: searchQuery }, + abortController: signalToController(signal) + }) + : api.actions().server.doc.getDocSites({ + actionParams: {}, + abortController: signalToController(signal) + }) }) // Mutations const addSiteMutation = useMutation({ mutationFn: (data: { name: string; url: string }) => - api.doc.addDocSite(data), + api.actions().server.doc.addDocSite({ + actionParams: data + }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: docSitesQueryKey }) toast.success('New doc site added successfully') @@ -54,7 +62,9 @@ export const DocManagement = () => { const updateSiteMutation = useMutation({ mutationFn: (data: { id: string; name: string; url: string }) => - api.doc.updateDocSite(data), + api.actions().server.doc.updateDocSite({ + actionParams: data + }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: docSitesQueryKey }) toast.success('Doc site updated successfully') @@ -66,7 +76,10 @@ export const DocManagement = () => { }) const removeSitesMutation = useMutation({ - mutationFn: (ids: string[]) => api.doc.removeDocSites({ ids }), + mutationFn: (ids: string[]) => + api.actions().server.doc.removeDocSites({ + actionParams: { ids } + }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: docSitesQueryKey }) toast.success('Doc site removed successfully') @@ -79,8 +92,12 @@ export const DocManagement = () => { const crawlSiteMutation = useMutation({ mutationFn: async ({ id }: { id: string }) => { setCrawlingProgress(prev => ({ ...prev, [id]: 0 })) - await api.doc.crawlDocs({ id }, (progress: ProgressInfo) => - updateProgress(progress, id, setCrawlingProgress) + await api.actions().server.doc.crawlDocs( + { + actionParams: { id } + }, + (progress: ProgressInfo) => + updateProgress(progress, id, setCrawlingProgress) ) }, onSuccess: () => { @@ -95,8 +112,12 @@ export const DocManagement = () => { const reindexSiteMutation = useMutation({ mutationFn: async ({ id }: { id: string }) => { setIndexingProgress(prev => ({ ...prev, [id]: 0 })) - await api.doc.reindexDocs({ id }, (progress: ProgressInfo) => - updateProgress(progress, id, setIndexingProgress) + await api.actions().server.doc.reindexDocs( + { + actionParams: { id, type: 'full' } + }, + (progress: ProgressInfo) => + updateProgress(progress, id, setIndexingProgress) ) }, onSuccess: () => { diff --git a/src/webview/components/settings/settings.tsx b/src/webview/components/settings/settings.tsx index a54173d..3fff9b0 100644 --- a/src/webview/components/settings/settings.tsx +++ b/src/webview/components/settings/settings.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react' +import { useEffect, useState, type FC } from 'react' import { ChevronDownIcon, ChevronRightIcon } from '@radix-ui/react-icons' import { settingsConfig, type SettingsSaveType } from '@shared/entities' import { Button } from '@webview/components/ui/button' @@ -24,11 +24,11 @@ export interface SettingsProps { initialPageId?: string | null } -export const Settings = ({ +export const Settings: FC = ({ onChange, className, initialPageId -}: SettingsProps) => { +}) => { const [searchTerm, setSearchTerm] = useState('') const [selectedPage, setSelectedPage] = useState( initialPageId || settingsConfig.pages?.[0]?.id || '' diff --git a/src/webview/contexts/action-context.tsx b/src/webview/contexts/action-context.tsx new file mode 100644 index 0000000..577583b --- /dev/null +++ b/src/webview/contexts/action-context.tsx @@ -0,0 +1,24 @@ +import React, { createContext, FC, useContext } from 'react' +import { useGlobalActions } from '@webview/actions' + +type ActionContextValue = {} + +const ActionContext = createContext(null) + +export const useActionContext = () => { + const context = useContext(ActionContext) + if (!context) { + throw new Error( + 'useActionContext must be used within a ActionContextProvider' + ) + } + return context +} + +export const ActionContextProvider: FC< + ActionContextValue & { children: React.ReactNode } +> = ({ children }) => { + useGlobalActions() + + return {children} +} diff --git a/src/webview/contexts/chat-context.tsx b/src/webview/contexts/chat-context.tsx index f75c466..f360b1a 100644 --- a/src/webview/contexts/chat-context.tsx +++ b/src/webview/contexts/chat-context.tsx @@ -7,6 +7,7 @@ import { useConversation } from '@webview/hooks/chat/use-conversation' import { useCallbackRef } from '@webview/hooks/use-callback-ref' import type { ChatStore } from '@webview/stores/chat-store' import type { ChatUIStore } from '@webview/stores/chat-ui-store' +import { useNavigate, useSearchParams } from 'react-router' import type { Updater } from 'use-immer' import { useChatStore } from '../stores/chat-store-context' @@ -36,6 +37,7 @@ export const ChatContextProvider: FC = ({ const chatStore = useChatStore(state => state) const chatUIStore = useChatUIStore(state => state) const { refreshChatSessions } = chatStore + const { switchSession } = useChatRouter() const { conversation: newConversation, @@ -54,6 +56,7 @@ export const ChatContextProvider: FC = ({ value={{ ...chatStore, ...chatUIStore, + switchSession, getContext, newConversation, setNewConversation, @@ -64,3 +67,46 @@ export const ChatContextProvider: FC = ({ ) } + +const useChatRouter = () => { + const navigate = useNavigate() + const [searchParams] = useSearchParams() + const sessionId = searchParams.get('sessionId') + const { + context, + chatSessions, + switchSession: switchSessionFromStore + } = useChatStore(state => state) + + const switchSession = async (sessionId: string) => { + navigate(`/?sessionId=${sessionId}`) + } + + const isSameSessionId = context.id === sessionId + + useEffect(() => { + if (isSameSessionId) return + + const isValidSession = chatSessions.some( + session => session.id === sessionId + ) + + const lastSession = [...chatSessions].sort( + (a, b) => b.updatedAt - a.updatedAt + )[0] + + if (sessionId && isValidSession) { + switchSessionFromStore(sessionId) + } else if (!sessionId && lastSession) { + navigate(`/?sessionId=${lastSession.id}`) + } + }, [ + sessionId, + switchSessionFromStore, + navigate, + chatSessions, + isSameSessionId + ]) + + return { switchSession } +} diff --git a/src/webview/contexts/global-search-context/index.tsx b/src/webview/contexts/global-search-context/index.tsx index 126e673..6d6979a 100644 --- a/src/webview/contexts/global-search-context/index.tsx +++ b/src/webview/contexts/global-search-context/index.tsx @@ -1,9 +1,9 @@ import React, { createContext, useContext, useState } from 'react' +import { signalToController } from '@shared/utils/common' import { useQuery } from '@tanstack/react-query' import { GlobalSearch } from '@webview/components/global-search/global-search' import { useCallbackRef } from '@webview/hooks/use-callback-ref' -import { api } from '@webview/services/api-client' -import { noop } from 'es-toolkit' +import { api } from '@webview/network/actions-api' import { useDebounce, useKey } from 'react-use' import { searchSettings } from './search-settings' @@ -68,13 +68,14 @@ export const GlobalSearchProvider: React.FC = ({ queryFn: async ({ signal }) => { if (!debouncedSearchQuery) return [] - const chatSessions = await api.chatSession.searchSessions( - { - query: debouncedSearchQuery - }, - noop, - signal - ) + const chatSessions = await api + .actions() + .server.chatSession.searchSessions({ + actionParams: { + query: debouncedSearchQuery + }, + abortController: signalToController(signal) + }) const settingsResults = searchSettings(debouncedSearchQuery) return [ diff --git a/src/webview/contexts/providers.tsx b/src/webview/contexts/providers.tsx index b26adb3..5eb2fbc 100644 --- a/src/webview/contexts/providers.tsx +++ b/src/webview/contexts/providers.tsx @@ -3,11 +3,12 @@ import { useRef } from 'react' import { TooltipProvider } from '@radix-ui/react-tooltip' import { QueryClientProvider, type QueryClient } from '@tanstack/react-query' import { Toaster } from '@webview/components/ui/sonner' -import { createQueryClient } from '@webview/services/react-query/query-client' +import { createQueryClient } from '@webview/network/react-query/query-client' import { ThemeProvider as NextThemesProvider } from 'next-themes' import { ChatStoreProvider } from '../stores/chat-store-context' import { ChatUIStoreProvider } from '../stores/chat-ui-store-context' +import { ActionContextProvider } from './action-context' import { ChatContextProvider } from './chat-context' import { GlobalSearchProvider } from './global-search-context' @@ -40,7 +41,9 @@ export const Providers = ({ children }: React.PropsWithChildren) => { - {children} + + {children} + diff --git a/src/webview/hooks/api/use-doc-sites.ts b/src/webview/hooks/api/use-doc-sites.ts index b412c57..aeb8510 100644 --- a/src/webview/hooks/api/use-doc-sites.ts +++ b/src/webview/hooks/api/use-doc-sites.ts @@ -1,9 +1,13 @@ +import { signalToController } from '@shared/utils/common' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' -import { noop } from 'es-toolkit' +import { api } from '@webview/network/actions-api' export const useDocSites = () => useQuery({ queryKey: ['realtime', 'docSites'], - queryFn: ({ signal }) => api.doc.getDocSites({}, noop, signal) + queryFn: ({ signal }) => + api.actions().server.doc.getDocSites({ + actionParams: {}, + abortController: signalToController(signal) + }) }) diff --git a/src/webview/hooks/api/use-file-info-for-message.ts b/src/webview/hooks/api/use-file-info-for-message.ts index 37dca50..02b9043 100644 --- a/src/webview/hooks/api/use-file-info-for-message.ts +++ b/src/webview/hooks/api/use-file-info-for-message.ts @@ -1,6 +1,6 @@ +import { signalToController } from '@shared/utils/common' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' -import { noop } from 'es-toolkit' +import { api } from '@webview/network/actions-api' export const useFileInfoForMessage = (params: { relativePath: string | undefined @@ -10,13 +10,12 @@ export const useFileInfoForMessage = (params: { useQuery({ queryKey: ['fileInfoForMessage', JSON.stringify(params)], queryFn: ({ signal }) => - api.file.getFileInfoForMessage( - { + api.actions().server.file.getFileInfoForMessage({ + actionParams: { ...params, relativePath: params.relativePath! }, - noop, - signal - ), + abortController: signalToController(signal) + }), enabled: !!params.relativePath }) diff --git a/src/webview/hooks/api/use-files.ts b/src/webview/hooks/api/use-files.ts index 05c3300..e08243a 100644 --- a/src/webview/hooks/api/use-files.ts +++ b/src/webview/hooks/api/use-files.ts @@ -1,10 +1,13 @@ +import { signalToController } from '@shared/utils/common' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' -import { noop } from 'es-toolkit' +import { api } from '@webview/network/actions-api' export const useFiles = () => useQuery({ queryKey: ['realtime', 'files'], queryFn: ({ signal }) => - api.file.traverseWorkspaceFiles({ filesOrFolders: ['./'] }, noop, signal) + api.actions().server.file.traverseWorkspaceFiles({ + actionParams: { filesOrFolders: ['./'] }, + abortController: signalToController(signal) + }) }) diff --git a/src/webview/hooks/api/use-get-full-path.ts b/src/webview/hooks/api/use-get-full-path.ts index bc026ba..8c615f3 100644 --- a/src/webview/hooks/api/use-get-full-path.ts +++ b/src/webview/hooks/api/use-get-full-path.ts @@ -1,6 +1,6 @@ +import { signalToController } from '@shared/utils/common' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' -import { noop } from 'es-toolkit' +import { api } from '@webview/network/actions-api' export const useGetFullPath = ({ path, @@ -12,6 +12,9 @@ export const useGetFullPath = ({ useQuery({ queryKey: ['realtime', 'get-full-path', path], queryFn: ({ signal }) => - api.file.getFullPath({ path, returnNullIfNotExists }, noop, signal), + api.actions().server.file.getFullPath({ + actionParams: { path, returnNullIfNotExists }, + abortController: signalToController(signal) + }), enabled: !!path }) diff --git a/src/webview/hooks/api/use-read-file.ts b/src/webview/hooks/api/use-read-file.ts index b0d5232..4101eb5 100644 --- a/src/webview/hooks/api/use-read-file.ts +++ b/src/webview/hooks/api/use-read-file.ts @@ -1,7 +1,7 @@ +import { signalToController } from '@shared/utils/common' import { useQuery } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { logger } from '@webview/utils/logger' -import { noop } from 'es-toolkit' const convertEncoding = ( input: string, @@ -49,7 +49,10 @@ export const useReadFile = (props: { return useQuery({ queryKey: ['realtime', 'read-file', filePath, encoding], queryFn: ({ signal }) => - api.file.readFile({ path: filePath, encoding }, noop, signal), + api.actions().server.file.readFile({ + actionParams: { path: filePath, encoding }, + abortController: signalToController(signal) + }), enabled: Boolean(filePath && !content), initialData: content ? convertEncoding(content, 'utf-8', encoding || 'utf-8') diff --git a/src/webview/hooks/api/use-settings.ts b/src/webview/hooks/api/use-settings.ts index 83407ce..2296675 100644 --- a/src/webview/hooks/api/use-settings.ts +++ b/src/webview/hooks/api/use-settings.ts @@ -1,7 +1,7 @@ import { useState } from 'react' import type { SettingKey, SettingValue } from '@shared/entities' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { logAndToastError } from '@webview/utils/common' import { toast } from 'sonner' @@ -18,12 +18,17 @@ export const useSettings = (options?: UseSettingsOptions) => { const { data: settings = {} } = useQuery({ queryKey: ['settings'], - queryFn: () => api.settings.getMergedSettings({}) + queryFn: () => + api.actions().server.settings.getMergedSettings({ + actionParams: {} + }) }) const updateSettingMutation = useMutation({ mutationFn: ({ key, value }: { key: string; value: any }) => - api.settings.setSettings({ settings: { [key]: value } }), + api.actions().server.settings.setSettings({ + actionParams: { settings: { [key]: value } } + }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['settings'] }) } diff --git a/src/webview/hooks/chat/use-apply-code.ts b/src/webview/hooks/chat/use-apply-code.ts index e80e2fe..cd424dd 100644 --- a/src/webview/hooks/chat/use-apply-code.ts +++ b/src/webview/hooks/chat/use-apply-code.ts @@ -3,7 +3,7 @@ import { InlineDiffTask, InlineDiffTaskState } from '@extension/registers/inline-diff-register/types' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { logAndToastError } from '@webview/utils/common' import { toast } from 'sonner' @@ -31,11 +31,13 @@ export const useApplyCode = ( setIsApplying(true) setApplyStatus(InlineDiffTaskState.Applying) try { - await api.apply.applyCode( + await api.actions().server.apply.applyCode( { - path: fileFullPath, - code, - cleanLast: isReapply + actionParams: { + path: fileFullPath, + code, + cleanLast: isReapply + } }, handleStream ) @@ -49,7 +51,9 @@ export const useApplyCode = ( const cancelApply = () => { if (fileFullPath) { - api.apply.interruptApplyCode({ path: fileFullPath }) + api.actions().server.apply.interruptApplyCode({ + actionParams: { path: fileFullPath } + }) setIsApplying(false) setApplyStatus(InlineDiffTaskState.Idle) toast.info('Code application cancelled') diff --git a/src/webview/hooks/chat/use-chat-sessions-ui.ts b/src/webview/hooks/chat/use-chat-sessions-ui.ts deleted file mode 100644 index a947617..0000000 --- a/src/webview/hooks/chat/use-chat-sessions-ui.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { useEffect } from 'react' -import { ChatContextEntity } from '@shared/entities' -import { useChatContext } from '@webview/contexts/chat-context' - -export const useChatSessionsUI = () => { - const { context, chatSessions, switchSession } = useChatContext() - - const isCurrentSessionInChatSessions = - chatSessions?.some(session => session.id === context.id) ?? false - - const currentSession = new ChatContextEntity(context).toChatSession() - - const chatSessionForRender = ( - isCurrentSessionInChatSessions ? [...chatSessions]! : [currentSession] - ).sort((a, b) => b.updatedAt - a.updatedAt) - - useEffect(() => { - if (chatSessions?.length && !isCurrentSessionInChatSessions) { - const lastSession = [...chatSessions].sort( - (a, b) => b.updatedAt - a.updatedAt - )[0]! - switchSession(lastSession.id) - } - }, [chatSessions, isCurrentSessionInChatSessions, switchSession]) - - return { - chatSessionForRender - } -} diff --git a/src/webview/hooks/chat/use-plugin-providers.tsx b/src/webview/hooks/chat/use-plugin-providers.tsx index 2ff6714..9be6c3f 100644 --- a/src/webview/hooks/chat/use-plugin-providers.tsx +++ b/src/webview/hooks/chat/use-plugin-providers.tsx @@ -1,15 +1,16 @@ -import { Fragment, type FC } from 'react' +import { Fragment } from 'react' import type { CustomRenderLogPreviewProps, UseMentionOptionsReturns } from '@shared/plugins/base/client/client-plugin-types' +import type { SFC } from '@shared/types/common' import { usePlugin } from '@webview/contexts/plugin-context' export const usePluginCustomRenderLogPreview = () => { const { getProviders } = usePlugin() const renders = getProviders('CustomRenderLogPreview') - const CustomRenderLogPreview: FC = ({ log }) => + const CustomRenderLogPreview: SFC = ({ log }) => renders?.map((render, i) => {render({ log })}) return CustomRenderLogPreview diff --git a/src/webview/hooks/chat/use-send-message.ts b/src/webview/hooks/chat/use-send-message.ts index 9b18c7b..02d9efb 100644 --- a/src/webview/hooks/chat/use-send-message.ts +++ b/src/webview/hooks/chat/use-send-message.ts @@ -1,7 +1,7 @@ import { useRef, useState } from 'react' import type { Conversation } from '@shared/entities' import { useChatContext } from '@webview/contexts/chat-context' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { logger } from '@webview/utils/logger' import { useChatState } from './use-chat-state' @@ -27,9 +27,12 @@ export const useSendMessage = () => { await handleConversationUpdate(conversation) let conversations: Conversation[] = [] - await api.chat.streamChat( + await api.actions().server.chat.streamChat( { - chatContext: getContext() + actionParams: { + chatContext: getContext() + }, + abortController: abortControllerRef.current }, (newConversations: Conversation[]) => { conversations = newConversations @@ -38,8 +41,7 @@ export const useSendMessage = () => { }) handleUIStateBeforeSend(conversations.at(-1)!.id) - }, - abortControllerRef.current.signal + } ) logger.verbose('Received conversations:', conversations) diff --git a/src/webview/lexical/hooks/use-drop-handler.ts b/src/webview/lexical/hooks/use-drop-handler.ts index a4badc6..f3dc7e8 100644 --- a/src/webview/lexical/hooks/use-drop-handler.ts +++ b/src/webview/lexical/hooks/use-drop-handler.ts @@ -1,8 +1,7 @@ import { useEffect, useRef } from 'react' import { settledPromiseResults } from '@shared/utils/common' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import type { FileInfo } from '@webview/types/chat' -import { noop } from 'es-toolkit' import { type LexicalEditor } from 'lexical' interface UseDropHandlerOptions { @@ -67,10 +66,11 @@ export const useDropHandler = ({ ) ) - const droppedFiles = await api.file.traverseWorkspaceFiles( - { filesOrFolders: fileFullPaths }, - noop - ) + const droppedFiles = await api + .actions() + .server.file.traverseWorkspaceFiles({ + actionParams: { filesOrFolders: fileFullPaths } + }) if (droppedFiles.length > 0) { onDropFiles?.(droppedFiles) diff --git a/src/webview/main.tsx b/src/webview/main.tsx index f162f57..8b5abdd 100644 --- a/src/webview/main.tsx +++ b/src/webview/main.tsx @@ -7,7 +7,7 @@ import './styles/global.css' import { ThemeSync } from './components/theme-sync' import { SparklesText } from './components/ui/sparkles-text' import { GlobalContextProvider } from './contexts/global-context' -import { getSocketPort } from './services/api-client/get-socket-port' +import { getSocketPort } from './network/actions-api/get-socket-port' const root = ReactDOM.createRoot(document.getElementById('app')!) @@ -25,10 +25,18 @@ const AppWrapper = () => { } const { default: AppComponent } = await import('./App') - const { api, initApi } = await import('./services/api-client') - initApi() + const { api, initApi } = await import('./network/actions-api') + + await initApi() setIsApiInit(true) - window.isWin = await api.system.isWindows({}) + + window.isWin = await api.actions().server.system.isWindows({ + actionParams: {} + }) + + await api.actions().server.chatSession.ensureASessionExists({ + actionParams: {} + }) setApp(() => AppComponent) setIsLoading(false) diff --git a/src/webview/services/api-client/get-socket-port.ts b/src/webview/network/actions-api/get-socket-port.ts similarity index 100% rename from src/webview/services/api-client/get-socket-port.ts rename to src/webview/network/actions-api/get-socket-port.ts diff --git a/src/webview/network/actions-api/index.ts b/src/webview/network/actions-api/index.ts new file mode 100644 index 0000000..c4f433a --- /dev/null +++ b/src/webview/network/actions-api/index.ts @@ -0,0 +1,3 @@ +import { createApi } from '@shared/actions/client-action-manager' + +export const { api, initApi } = createApi() diff --git a/src/webview/services/react-query/query-client.ts b/src/webview/network/react-query/query-client.ts similarity index 100% rename from src/webview/services/react-query/query-client.ts rename to src/webview/network/react-query/query-client.ts diff --git a/src/webview/pages/index.tsx b/src/webview/pages/index.tsx index aed6aac..b84451c 100644 --- a/src/webview/pages/index.tsx +++ b/src/webview/pages/index.tsx @@ -1 +1,5 @@ -export { ChatUI as default } from '@webview/components/chat/chat-ui' +import { ChatUI } from '@webview/components/chat/chat-ui' + +export default function ChatPage() { + return +} diff --git a/src/webview/services/api-client/index.ts b/src/webview/services/api-client/index.ts deleted file mode 100644 index 21f9cd6..0000000 --- a/src/webview/services/api-client/index.ts +++ /dev/null @@ -1,127 +0,0 @@ -import type { Controllers } from '@extension/webview-api/controllers' -import type { ControllerClass } from '@extension/webview-api/types' -import { AbortError } from '@shared/utils/common' -import { io, Socket } from 'socket.io-client' - -import type { APIType } from './types' - -type PendingRequest = { - resolve: (value: any) => void - reject: (reason: any) => void - onStream?: (chunk: string) => void - abortController?: AbortController -} - -export class APIClient { - private messageId = 0 - - private socket!: Socket - - private pendingRequests: Map = new Map() - - init() { - const port = window.vscodeWebviewState?.socketPort - - if (!port) throw new Error('Socket port not found in VSCode state') - - this.socket = io(`http://localhost:${port}`) - this.socket.on('response', this.handleResponse.bind(this)) - this.socket.on('stream', this.handleStream.bind(this)) - this.socket.on('end', this.handleEnd.bind(this)) - this.socket.on('error', this.handleError.bind(this)) - } - - private handleResponse(message: { id: number; data: any }) { - const pending = this.pendingRequests.get(message.id) - if (pending) { - pending.resolve(message.data) - this.pendingRequests.delete(message.id) - } - } - - private handleStream(message: { id: number; data: string }) { - const pending = this.pendingRequests.get(message.id) - if (pending && pending.onStream) { - pending.onStream(message.data) - } - } - - private handleEnd(message: { id: number }) { - const pending = this.pendingRequests.get(message.id) - if (pending) { - pending.resolve(undefined) - this.pendingRequests.delete(message.id) - } - } - - private handleError(message: { id: number; error: string }) { - const pending = this.pendingRequests.get(message.id) - if (pending) { - pending.reject(new Error(message.error)) - this.pendingRequests.delete(message.id) - } - } - - async request( - controller: string, - method: string, - data: TReq, - onStream?: (chunk: string) => void, - signal?: AbortSignal - ): Promise { - return new Promise((resolve, reject) => { - const id = this.messageId++ - const abortController = signal ? new AbortController() : undefined - - if (signal) { - signal.addEventListener( - 'abort', - () => { - this.socket.emit(`abort-${id}`, { id }) - const pending = this.pendingRequests.get(id) - if (pending) { - pending.reject(AbortError) - this.pendingRequests.delete(id) - } - }, - { once: true } - ) - } - - this.pendingRequests.set(id, { - resolve, - reject, - onStream, - abortController - }) - - this.socket.emit('request', { id, controller, method, data }) - }) - } -} - -export const createWebviewApi = () => { - const apiClient = new APIClient() - const api = new Proxy({} as APIType, { - get: (target, controllerName: string) => - new Proxy( - {}, - { - get: - (_, method: string) => - ( - req: any, - onStream?: (chunk: string) => void, - signal?: AbortSignal - ) => - apiClient.request(controllerName, method, req, onStream, signal) - } - ) - }) as APIType - - const initApi = apiClient.init.bind(apiClient) - - return { api, initApi } -} - -export const { api, initApi } = createWebviewApi() diff --git a/src/webview/services/api-client/types.ts b/src/webview/services/api-client/types.ts deleted file mode 100644 index a8acf9b..0000000 --- a/src/webview/services/api-client/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { ControllerClass } from '@extension/webview-api/types' - -export type InferControllerMethods = T extends new (...args: any) => infer R - ? { - [K in keyof R as R[K] extends Function ? K : never]: R[K] - } - : never - -export type InferMethodParams = T[M] extends ( - req: infer P -) => any - ? P - : never -export type InferMethodReturn = T[M] extends ( - req: any -) => Promise - ? R - : T[M] extends (req: any) => AsyncGenerator - ? void - : never -export type InferStreamChunk = T[M] extends ( - req: any -) => AsyncGenerator - ? R - : never - -export type APIType = { - [K in T[number] as InstanceType['name']]: { - [M in keyof InferControllerMethods]: ( - req: InferMethodParams, M>, - onStream?: ( - chunk: InferStreamChunk, M> - ) => void, - signal?: AbortSignal - ) => Promise, M>> - } -} diff --git a/src/webview/stores/chat-store.ts b/src/webview/stores/chat-store.ts index bc40c99..20aaae0 100644 --- a/src/webview/stores/chat-store.ts +++ b/src/webview/stores/chat-store.ts @@ -1,6 +1,6 @@ import type { ChatContext, ChatSession, Conversation } from '@shared/entities' import { ChatContextEntity } from '@shared/entities' -import { api } from '@webview/services/api-client' +import { api } from '@webview/network/actions-api' import { logAndToastError } from '@webview/utils/common' import { logger } from '@webview/utils/logger' import { produce } from 'immer' @@ -65,8 +65,10 @@ export const createChatStore = () => resetContext: () => set({ context: new ChatContextEntity().entity }), saveSession: async () => { try { - await api.chatSession.createOrUpdateSession({ - chatContext: get().context + await api.actions().server.chatSession.createOrUpdateSession({ + actionParams: { + chatContext: get().context + } }) await get().refreshChatSessions() } catch (error) { @@ -75,7 +77,11 @@ export const createChatStore = () => }, refreshChatSessions: async () => { try { - const sessions = await api.chatSession.getAllSessions({}) + const sessions = await api + .actions() + .server.chatSession.getAllSessions({ + actionParams: {} + }) set(state => { state.chatSessions = sessions.sort( (a, b) => b.updatedAt - a.updatedAt @@ -88,9 +94,13 @@ export const createChatStore = () => createAndSwitchToNewSession: async () => { try { const newContext = new ChatContextEntity().entity - const newSession = await api.chatSession.createSession({ - chatContext: newContext - }) + const newSession = await api + .actions() + .server.chatSession.createSession({ + actionParams: { + chatContext: newContext + } + }) await get().refreshChatSessions() await get().switchSession(newSession.id) logger.log('New chat created') @@ -100,7 +110,9 @@ export const createChatStore = () => }, deleteSession: async id => { try { - await api.chatSession.deleteSession({ sessionId: id }) + await api.actions().server.chatSession.deleteSession({ + actionParams: { sessionId: id } + }) await get().refreshChatSessions() if (get().context.id === id && get().chatSessions.length) { get().switchSession(get().chatSessions[0]!.id) @@ -114,9 +126,11 @@ export const createChatStore = () => switchSession: async sessionId => { try { if (get().context.id === sessionId) return - const fullChatContext = await api.chatSession.getChatContext({ - sessionId - }) + const fullChatContext = await api + .actions() + .server.chatSession.getChatContext({ + actionParams: { sessionId } + }) if (!fullChatContext) throw new Error('Chat context not found') set({ context: fullChatContext }) } catch (error) { diff --git a/src/webview/types/chat.ts b/src/webview/types/chat.ts index 7959a9b..18e82b8 100644 --- a/src/webview/types/chat.ts +++ b/src/webview/types/chat.ts @@ -2,7 +2,7 @@ import type { FC } from 'react' import type { Conversation } from '@shared/entities' import type { MentionItemLayoutProps } from '@webview/components/chat/selectors/mention-selector/mention-item-layout' -export type { ProgressInfo } from '@extension/webview-api/chat-context-processor/utils/progress-reporter' +export type { ProgressInfo } from '@extension/chat/utils/progress-reporter' export type { FileInfo, FolderInfo } from '@extension/file-utils/traverse-fs' export interface ModelOption { diff --git a/src/webview/utils/logger.ts b/src/webview/utils/logger.ts index 876274f..f4d64ec 100644 --- a/src/webview/utils/logger.ts +++ b/src/webview/utils/logger.ts @@ -21,3 +21,5 @@ export class WebviewLogger extends BaseLogger { } export const logger = new WebviewLogger({ name: 'Aide.webview', level: 'info' }) + +export type ClientLogger = typeof logger diff --git a/vite.config.mts b/vite.config.mts index 10b4028..3e928a2 100644 --- a/vite.config.mts +++ b/vite.config.mts @@ -118,9 +118,7 @@ const tsupCopyFiles = async () => { dest: resolveExtensionDistPath('node_modules/@lancedb/') }, { - src: resolvePath( - 'src/extension/webview-api/chat-context-processor/models/**' - ), + src: resolvePath('src/extension/chat/models/**'), dest: resolveExtensionDistPath('models/') },