From 39623ab856f79030a2e8664e884543a32de8a6cd Mon Sep 17 00:00:00 2001 From: Dubberman <48425266+whipser030@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:29:40 +0800 Subject: [PATCH 01/18] fix: The feedback function fails when calling the search interface due to the failure in passing the 'user_name' parameter. (#1174) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add log * add log * add log * hot fix --------- Co-authored-by: 黑布林 <11641432+heiheiyouyou@user.noreply.gitee.com> --- README.md | 34 +++++++++---------- docker/Dockerfile.krolik | 2 +- .../data/mem_cube_tree/textual_memory.json | 2 +- src/memos/graph_dbs/polardb.py | 2 +- src/memos/mem_feedback/feedback.py | 9 ++--- src/memos/mem_os/utils/default_config.py | 2 ++ .../tree_text_memory/retrieve/searcher.py | 3 +- 7 files changed, 29 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 45a372ed1..834e53021 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Awesome AI Memory - +

@@ -55,7 +55,7 @@

- + Get Free API: [Try API](https://memos-dashboard.openmem.net/quickstart/?source=github) @@ -68,11 +68,11 @@ Get Free API: [Try API](https://memos-dashboard.openmem.net/quickstart/?source=g ![](https://cdn.memtensor.com.cn/img/1770612303123_mnaisk_compressed.png) - [**72% lower token usage**](https://x.com/MemOS_dev/status/2020854044583924111) – intelligent memory retrieval instead of loading full chat history -- [**Multi-agent memory sharing**](https://x.com/MemOS_dev/status/2020538135487062094) – multi-instance agents share memory via same user_id. Automatic context handoff. +- [**Multi-agent memory sharing**](https://x.com/MemOS_dev/status/2020538135487062094) – multi-instance agents share memory via same user_id. Automatic context handoff. 🦞 Your lobster now has a working memory system. -Get your API key: [MemOS Dashboard](https://memos-dashboard.openmem.net/cn/login/) +Get your API key: [MemOS Dashboard](https://memos-dashboard.openmem.net/cn/login/) Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin) ## 📌 MemOS: Memory Operating System for AI Agents @@ -92,7 +92,7 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe ### News -- **2025-12-24** · 🎉 **MemOS v2.0: Stardust (星尘) Release** +- **2025-12-24** · 🎉 **MemOS v2.0: Stardust (星尘) Release** Comprehensive KB (doc/URL parsing + cross-project sharing), memory feedback & precise deletion, multi-modal memory (images/charts), tool memory for agent planning, Redis Streams scheduling + DB optimizations, streaming/non-streaming chat, MCP upgrade, and lightweight quick/full deployment.
New Features @@ -139,7 +139,7 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe
-- **2025-08-07** · 🎉 **MemOS v1.0.0 (MemCube) Release** +- **2025-08-07** · 🎉 **MemOS v1.0.0 (MemCube) Release** First MemCube release with a word-game demo, LongMemEval evaluation, BochaAISearchRetriever integration, NebulaGraph support, improved search capabilities, and the official Playground launch.
@@ -177,11 +177,11 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe
-- **2025-07-07** · 🎉 **MemOS v1.0: Stellar (星河) Preview Release** +- **2025-07-07** · 🎉 **MemOS v1.0: Stellar (星河) Preview Release** A SOTA Memory OS for LLMs is now open-sourced. -- **2025-07-04** · 🎉 **MemOS Paper Release** +- **2025-07-04** · 🎉 **MemOS Paper Release** [MemOS: A Memory OS for AI System](https://arxiv.org/abs/2507.03724) is available on arXiv. -- **2024-07-04** · 🎉 **Memory3 Model Release at WAIC 2024** +- **2024-07-04** · 🎉 **Memory3 Model Release at WAIC 2024** The Memory3 model, featuring a memory-layered architecture, was unveiled at the 2024 World Artificial Intelligence Conference.
@@ -194,9 +194,9 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe - Go to **API Keys** and copy your key #### Next Steps -- [MemOS Cloud Getting Started](https://memos-docs.openmem.net/memos_cloud/quick_start/) +- [MemOS Cloud Getting Started](https://memos-docs.openmem.net/memos_cloud/quick_start/) Connect to MemOS Cloud and enable memory in minutes. -- [MemOS Cloud Platform](https://memos.openmem.net/?from=/quickstart/) +- [MemOS Cloud Platform](https://memos.openmem.net/?from=/quickstart/) Explore the Cloud dashboard, features, and workflows. ### 🖥️ 2、Self-Hosted (Local/Private) @@ -234,7 +234,7 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe ```python import requests import json - + data = { "user_id": "8736b16e-1d20-4163-980b-a5063c3facdc", "mem_cube_id": "b32d0977-435d-4828-a86f-4f47f8b55bca", @@ -250,7 +250,7 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe "Content-Type": "application/json" } url = "http://localhost:8000/product/add" - + res = requests.post(url=url, headers=headers, data=json.dumps(data)) print(f"result: {res.json()}") ``` @@ -258,7 +258,7 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe ```python import requests import json - + data = { "query": "What do I like", "user_id": "8736b16e-1d20-4163-980b-a5063c3facdc", @@ -268,7 +268,7 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe "Content-Type": "application/json" } url = "http://localhost:8000/product/search" - + res = requests.post(url=url, headers=headers, data=json.dumps(data)) print(f"result: {res.json()}") ``` @@ -277,8 +277,8 @@ Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTe ## 📚 Resources -- **Awesome-AI-Memory** - This is a curated repository dedicated to resources on memory and memory systems for large language models. It systematically collects relevant research papers, frameworks, tools, and practical insights. The repository aims to organize and present the rapidly evolving research landscape of LLM memory, bridging multiple research directions including natural language processing, information retrieval, agentic systems, and cognitive science. +- **Awesome-AI-Memory** + This is a curated repository dedicated to resources on memory and memory systems for large language models. It systematically collects relevant research papers, frameworks, tools, and practical insights. The repository aims to organize and present the rapidly evolving research landscape of LLM memory, bridging multiple research directions including natural language processing, information retrieval, agentic systems, and cognitive science. - **Get started** 👉 [IAAR-Shanghai/Awesome-AI-Memory](https://github.com/IAAR-Shanghai/Awesome-AI-Memory) - **MemOS Cloud OpenClaw Plugin** Official OpenClaw lifecycle plugin for MemOS Cloud. It automatically recalls context from MemOS before the agent starts and saves the conversation back to MemOS after the agent finishes. diff --git a/docker/Dockerfile.krolik b/docker/Dockerfile.krolik index c475a6d30..dcae7e0d9 100644 --- a/docker/Dockerfile.krolik +++ b/docker/Dockerfile.krolik @@ -1,5 +1,5 @@ # MemOS with Krolik Security Extensions -# +# # This Dockerfile builds MemOS with authentication, rate limiting, and admin API. # It uses the overlay pattern to keep customizations separate from base code. diff --git a/examples/data/mem_cube_tree/textual_memory.json b/examples/data/mem_cube_tree/textual_memory.json index 91f426ca2..97a2b1dd0 100644 --- a/examples/data/mem_cube_tree/textual_memory.json +++ b/examples/data/mem_cube_tree/textual_memory.json @@ -4216,4 +4216,4 @@ "edges": [], "total_nodes": 4, "total_edges": 0 -} \ No newline at end of file +} diff --git a/src/memos/graph_dbs/polardb.py b/src/memos/graph_dbs/polardb.py index 8332efbc1..c8ed0a97f 100644 --- a/src/memos/graph_dbs/polardb.py +++ b/src/memos/graph_dbs/polardb.py @@ -1919,7 +1919,7 @@ def search_by_embedding( else: pass - logger.info(" search_by_embedding query: %s", query) + logger.info(" search_by_embedding query: %s user_name: %s", query, user_name) with self._get_connection() as conn, conn.cursor() as cursor: if params: diff --git a/src/memos/mem_feedback/feedback.py b/src/memos/mem_feedback/feedback.py index 18045af2c..b8019004d 100644 --- a/src/memos/mem_feedback/feedback.py +++ b/src/memos/mem_feedback/feedback.py @@ -559,23 +559,24 @@ def check_has_edges(mem_item: TextualMemoryItem) -> tuple[TextualMemoryItem, boo edges = self.searcher.graph_store.get_edges(mem_item.id, user_name=user_name) return (mem_item, len(edges) == 0) + logger.info(f"[feedback _retrieve] query: {query}, user_name: {user_name}") text_mems = self.searcher.search( - query, + query=query, + top_k=top_k, info=info, memory_type="AllSummaryMemory", user_name=user_name, - top_k=top_k, full_recall=True, ) text_mems = [item[0] for item in text_mems if float(item[1]) > 0.01] if self.pref_feedback: pref_mems = self.searcher.search( - query, + query=query, + top_k=top_k, info=info, memory_type="PreferenceMemory", user_name=user_name, - top_k=top_k, include_preference_memory=True, full_recall=True, ) diff --git a/src/memos/mem_os/utils/default_config.py b/src/memos/mem_os/utils/default_config.py index 9898cbe8c..de79d535d 100644 --- a/src/memos/mem_os/utils/default_config.py +++ b/src/memos/mem_os/utils/default_config.py @@ -4,12 +4,14 @@ """ import logging + from typing import Literal from memos.configs.mem_cube import GeneralMemCubeConfig from memos.configs.mem_os import MOSConfig from memos.mem_cube.general import GeneralMemCube + logger = logging.getLogger(__name__) diff --git a/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py b/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py index b4994671f..eb15b48ed 100644 --- a/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +++ b/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py @@ -92,7 +92,7 @@ def retrieve( **kwargs, ) -> list[tuple[TextualMemoryItem, float]]: logger.info( - f"[RECALL] Start query='{query}', top_k={top_k}, mode={mode}, memory_type={memory_type}" + f"[RECALL] Start query='{query}', top_k={top_k}, mode={mode}, memory_type={memory_type}, user_name={user_name}" ) parsed_goal, query_embedding, _context, query = self._parse_task( query, @@ -859,6 +859,7 @@ def _retrieve_from_skill_memory( mode: str = "fast", ): """Retrieve and rerank from SkillMemory""" + if memory_type not in ["All", "SkillMemory"]: logger.info(f"[PATH-E] '{query}' Skipped (memory_type does not match)") return [] From 0a69ec21c033d5fb7907acbfee75880a13bf2c35 Mon Sep 17 00:00:00 2001 From: Hustzdy <67457465+wustzdy@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:59:38 +0800 Subject: [PATCH 02/18] feat:optimize config (#1176) feat:optimize search_by_fulltext --- src/memos/graph_dbs/polardb.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/memos/graph_dbs/polardb.py b/src/memos/graph_dbs/polardb.py index c8ed0a97f..ad75f4b65 100644 --- a/src/memos/graph_dbs/polardb.py +++ b/src/memos/graph_dbs/polardb.py @@ -173,7 +173,7 @@ def __init__(self, config: PolarDBGraphDBConfig): user=user, password=password, dbname=self.db_name, - connect_timeout=60, # Connection timeout in seconds + connect_timeout=10, # Connection timeout in seconds keepalives_idle=120, # Seconds of inactivity before sending keepalive (should be < server idle timeout) keepalives_interval=15, # Seconds between keepalive retries keepalives_count=5, # Number of keepalive retries before considering connection dead @@ -247,7 +247,7 @@ def _warm_up_connections_by_all(self): @contextmanager def _get_connection(self): - timeout = getattr(self, "_connection_wait_timeout", 5) + timeout = self._connection_wait_timeout if timeout <= 0: self._semaphore.acquire() else: @@ -1919,7 +1919,7 @@ def search_by_embedding( else: pass - logger.info(" search_by_embedding query: %s user_name: %s", query, user_name) + logger.info(" search_by_embedding query: %s", query) with self._get_connection() as conn, conn.cursor() as cursor: if params: From d5824caf86870bc2a21b108dada166dc646fefd9 Mon Sep 17 00:00:00 2001 From: tangbo <1502220175@qq.com> Date: Sat, 7 Mar 2026 22:33:16 +0800 Subject: [PATCH 03/18] refactor: move openwork-memos-integration into apps/ directory Reorganize project structure by moving the openwork-memos-integration module under the apps/ directory for consistency. Made-with: Cursor --- openwork-memos-integration/CLAUDE.md | 162 - openwork-memos-integration/CONTRIBUTING.md | 60 - openwork-memos-integration/LICENSE | 21 - openwork-memos-integration/README.md | 315 - openwork-memos-integration/SECURITY.md | 49 - .../apps/desktop/.eslintrc.json | 39 - .../main/appSettings.integration.test.ts | 369 - .../opencode/cli-path.integration.test.ts | 499 - .../config-generator.integration.test.ts | 332 - .../main/permission-api.integration.test.ts | 120 - .../main/secureStorage.integration.test.ts | 519 - .../freshInstallCleanup.integration.test.ts | 244 - .../main/taskHistory.integration.test.ts | 625 -- .../utils/bundled-node.integration.test.ts | 449 - .../utils/system-path.integration.test.ts | 513 - .../preload/preload.integration.test.ts | 323 - .../renderer/App.integration.test.tsx | 370 - .../components/Header.integration.test.tsx | 272 - .../SettingsDialog.integration.test.tsx | 854 -- .../components/Sidebar.integration.test.tsx | 522 - .../StreamingText.integration.test.tsx | 487 - .../TaskHistory.integration.test.tsx | 791 -- .../TaskInputBar.integration.test.tsx | 526 - .../TaskLauncher.integration.test.tsx | 1122 -- .../pages/Execution.integration.test.tsx | 1380 --- .../renderer/pages/Home.integration.test.tsx | 594 -- .../renderer/taskStore.integration.test.ts | 869 -- .../__tests__/main/config.unit.test.ts | 197 - .../main/ipc/handlers-utils.unit.test.ts | 784 -- .../main/ipc/validation.unit.test.ts | 617 -- .../main/opencode/stream-parser.unit.test.ts | 692 -- .../__tests__/renderer/lib/utils.unit.test.ts | 437 - .../apps/desktop/__tests__/setup.ts | 13 - .../unit/main/ipc/handlers.unit.test.ts | 1946 ---- .../unit/main/opencode/adapter.unit.test.ts | 856 -- .../main/opencode/task-manager.unit.test.ts | 727 -- .../unit/renderer/lib/accomplish.unit.test.ts | 234 - .../unit/renderer/lib/analytics.unit.test.ts | 281 - .../unit/renderer/lib/animations.unit.test.ts | 141 - .../lib/waiting-detection.unit.test.ts | 185 - .../apps/desktop/clean_dmg_install.sh | 229 - .../apps/desktop/e2e/README.md | 236 - .../apps/desktop/e2e/config/index.ts | 1 - .../apps/desktop/e2e/config/timeouts.ts | 62 - .../apps/desktop/e2e/docker/Dockerfile | 52 - .../desktop/e2e/docker/docker-compose.yml | 20 - .../apps/desktop/e2e/fixtures/electron-app.ts | 67 - .../apps/desktop/e2e/fixtures/index.ts | 1 - .../apps/desktop/e2e/pages/execution.page.ts | 71 - .../apps/desktop/e2e/pages/home.page.ts | 37 - .../apps/desktop/e2e/pages/index.ts | 3 - .../apps/desktop/e2e/pages/settings.page.ts | 247 - .../apps/desktop/e2e/playwright.config.ts | 47 - .../apps/desktop/e2e/specs/execution.spec.ts | 618 -- .../apps/desktop/e2e/specs/home.spec.ts | 215 - .../e2e/specs/settings-bedrock.spec.ts | 187 - .../e2e/specs/settings-providers.spec.ts | 351 - .../apps/desktop/e2e/specs/settings.spec.ts | 750 -- .../e2e/specs/task-launch-guard.spec.ts | 303 - .../apps/desktop/e2e/utils/index.ts | 1 - .../apps/desktop/e2e/utils/screenshots.ts | 109 - .../apps/desktop/index.html | 21 - .../apps/desktop/package.json | 178 - .../apps/desktop/postcss.config.js | 6 - .../public/assets/ai-logos/anthropic.svg | 3 - .../public/assets/ai-logos/bedrock.svg | 10 - .../public/assets/ai-logos/deepseek.svg | 10 - .../desktop/public/assets/ai-logos/google.svg | 110 - .../public/assets/ai-logos/litellm.svg | 9 - .../desktop/public/assets/ai-logos/ollama.svg | 3 - .../desktop/public/assets/ai-logos/openai.svg | 3 - .../public/assets/ai-logos/openrouter.svg | 3 - .../public/assets/ai-logos/provider-logos.svg | 147 - .../desktop/public/assets/ai-logos/vertex.svg | 10 - .../desktop/public/assets/ai-logos/xai.svg | 6 - .../desktop/public/assets/ai-logos/zai.svg | 6 - .../desktop/public/assets/icons/connect.svg | 3 - .../public/assets/icons/connected-key.svg | 12 - .../desktop/public/assets/icons/connected.svg | 3 - .../public/assets/icons/pending-key.svg | 12 - .../desktop/public/assets/loading-symbol.svg | 8 - .../apps/desktop/public/assets/logo-1.png | Bin 3636 -> 0 bytes .../apps/desktop/public/assets/logo.png | Bin 4605 -> 0 bytes .../desktop/public/assets/openwork-icon.png | Bin 1003 -> 0 bytes .../assets/usecases/ai-image-wizard.webp | Bin 2828 -> 0 bytes .../assets/usecases/automated-reminders.webp | Bin 22282 -> 0 bytes .../assets/usecases/batch-file-renaming.webp | Bin 49778 -> 0 bytes .../assets/usecases/bilingual-output.webp | Bin 18690 -> 0 bytes .../assets/usecases/calendar-events.webp | Bin 22008 -> 0 bytes .../assets/usecases/calendar-prep-notes.png | Bin 12480 -> 0 bytes .../assets/usecases/career-document.webp | Bin 23348 -> 0 bytes .../assets/usecases/clean-data-output.webp | Bin 18054 -> 0 bytes .../usecases/competitor-pricing-deck.png | Bin 31960 -> 0 bytes .../assets/usecases/course-announcement.webp | Bin 49226 -> 0 bytes .../assets/usecases/custom-web-tool.webp | Bin 21396 -> 0 bytes .../assets/usecases/document-translation.webp | Bin 19248 -> 0 bytes .../usecases/event-calendar-builder.png | Bin 10030 -> 0 bytes .../assets/usecases/export-to-table.webp | Bin 45222 -> 0 bytes .../assets/usecases/inbox-promo-cleanup.png | Bin 6400 -> 0 bytes .../usecases/job-application-automation.png | Bin 3065 -> 0 bytes .../assets/usecases/landing-page-copy.webp | Bin 20858 -> 0 bytes .../assets/usecases/localize-content.webp | Bin 19108 -> 0 bytes .../assets/usecases/notion-api-audit.png | Bin 5158 -> 0 bytes .../public/assets/usecases/organize-data.webp | Bin 1836 -> 0 bytes .../assets/usecases/personal-website.webp | Bin 1758 -> 0 bytes .../public/assets/usecases/pitch-deck.webp | Bin 1430 -> 0 bytes .../assets/usecases/polish-writing.webp | Bin 2928 -> 0 bytes .../usecases/portfolio-presentation.webp | Bin 19626 -> 0 bytes .../assets/usecases/prod-broken-links.png | Bin 31960 -> 0 bytes .../assets/usecases/professional-emails.webp | Bin 1376 -> 0 bytes .../usecases/professional-headshot.webp | Bin 27364 -> 0 bytes .../usecases/staging-vs-prod-visual.png | Bin 33944 -> 0 bytes .../usecases/stock-portfolio-alerts.png | Bin 6425 -> 0 bytes .../desktop/public/fonts/DMSans-Black.ttf | Bin 56344 -> 0 bytes .../apps/desktop/public/fonts/DMSans-Bold.ttf | Bin 56268 -> 0 bytes .../desktop/public/fonts/DMSans-Light.ttf | Bin 56328 -> 0 bytes .../desktop/public/fonts/DMSans-Medium.ttf | Bin 56376 -> 0 bytes .../desktop/public/fonts/DMSans-Regular.ttf | Bin 56344 -> 0 bytes .../desktop/resources/entitlements.mac.plist | 18 - .../apps/desktop/resources/icon.png | Bin 26734 -> 0 bytes .../apps/desktop/run_local_ui_prod_api.sh | 4 - .../apps/desktop/run_local_ui_staging_api.sh | 4 - .../apps/desktop/run_prod.sh | 14 - .../apps/desktop/run_staging.sh | 14 - .../apps/desktop/scripts/after-pack.cjs | 256 - .../apps/desktop/scripts/download-nodejs.cjs | 205 - .../apps/desktop/scripts/package.cjs | 57 - .../desktop/scripts/patch-electron-name.cjs | 46 - .../desktop/skills/ask-user-question/SKILL.md | 133 - .../ask-user-question/package-lock.json | 1650 --- .../skills/ask-user-question/package.json | 17 - .../skills/ask-user-question/src/index.ts | 196 - .../skills/ask-user-question/tsconfig.json | 14 - .../desktop/skills/dev-browser/.gitignore | 4 - .../apps/desktop/skills/dev-browser/SKILL.md | 211 - .../apps/desktop/skills/dev-browser/bun.lock | 443 - .../skills/dev-browser/package-lock.json | 3006 ------ .../desktop/skills/dev-browser/package.json | 31 - .../skills/dev-browser/references/scraping.md | 155 - .../skills/dev-browser/scripts/start-relay.ts | 33 - .../dev-browser/scripts/start-server.ts | 172 - .../apps/desktop/skills/dev-browser/server.sh | 27 - .../desktop/skills/dev-browser/src/client.ts | 509 - .../desktop/skills/dev-browser/src/index.ts | 324 - .../desktop/skills/dev-browser/src/relay.ts | 732 -- .../src/snapshot/__tests__/snapshot.test.ts | 223 - .../src/snapshot/browser-script.ts | 877 -- .../skills/dev-browser/src/snapshot/index.ts | 14 - .../skills/dev-browser/src/snapshot/inject.ts | 13 - .../desktop/skills/dev-browser/src/types.ts | 36 - .../desktop/skills/dev-browser/tsconfig.json | 34 - .../skills/dev-browser/vitest.config.ts | 12 - .../skills/file-permission/package-lock.json | 1650 --- .../skills/file-permission/package.json | 17 - .../skills/file-permission/src/index.ts | 138 - .../skills/file-permission/tsconfig.json | 24 - .../skills/safe-file-deletion/SKILL.md | 50 - .../apps/desktop/src/main/config.ts | 30 - .../apps/desktop/src/main/index.ts | 223 - .../apps/desktop/src/main/ipc/handlers.ts | 1721 --- .../apps/desktop/src/main/ipc/validation.ts | 47 - .../apps/desktop/src/main/opencode/adapter.ts | 784 -- .../desktop/src/main/opencode/cli-path.ts | 215 - .../src/main/opencode/config-generator.ts | 728 -- .../src/main/opencode/stream-parser.ts | 145 - .../desktop/src/main/opencode/task-manager.ts | 650 -- .../apps/desktop/src/main/permission-api.ts | 356 - .../apps/desktop/src/main/services/memory.ts | 329 - .../desktop/src/main/services/summarizer.ts | 212 - .../desktop/src/main/store/appSettings.ts | 140 - .../src/main/store/freshInstallCleanup.ts | 265 - .../src/main/store/providerSettings.ts | 125 - .../desktop/src/main/store/secureStorage.ts | 269 - .../desktop/src/main/store/taskHistory.ts | 224 - .../src/main/test-utils/mock-task-flow.ts | 363 - .../desktop/src/main/utils/bundled-node.ts | 148 - .../desktop/src/main/utils/system-path.ts | 230 - .../apps/desktop/src/preload/index.ts | 220 - .../apps/desktop/src/renderer/App.tsx | 144 - .../components/TaskLauncher/TaskLauncher.tsx | 221 - .../TaskLauncher/TaskLauncherItem.tsx | 64 - .../renderer/components/TaskLauncher/index.ts | 2 - .../components/history/TaskHistory.tsx | 133 - .../components/landing/TaskInputBar.tsx | 96 - .../layout/ConversationListItem.tsx | 84 - .../src/renderer/components/layout/Header.tsx | 57 - .../components/layout/SettingsDialog.tsx | 1660 --- .../renderer/components/layout/Sidebar.tsx | 137 - .../components/settings/ProviderCard.tsx | 110 - .../components/settings/ProviderGrid.tsx | 121 - .../settings/ProviderSettingsPanel.tsx | 103 - .../settings/hooks/useProviderSettings.ts | 102 - .../providers/BedrockProviderForm.tsx | 255 - .../providers/ClassicProviderForm.tsx | 186 - .../providers/LiteLLMProviderForm.tsx | 157 - .../settings/providers/OllamaProviderForm.tsx | 130 - .../providers/OpenRouterProviderForm.tsx | 196 - .../components/settings/providers/index.ts | 7 - .../settings/shared/ApiKeyInput.tsx | 62 - .../settings/shared/ConnectButton.tsx | 35 - .../settings/shared/ConnectedControls.tsx | 31 - .../settings/shared/ConnectionStatus.tsx | 63 - .../components/settings/shared/FormError.tsx | 13 - .../settings/shared/ModelSelector.tsx | 172 - .../settings/shared/ProviderFormHeader.tsx | 22 - .../settings/shared/RegionSelector.tsx | 42 - .../components/settings/shared/index.ts | 10 - .../src/renderer/components/ui/avatar.tsx | 53 - .../src/renderer/components/ui/badge.tsx | 46 - .../src/renderer/components/ui/button.tsx | 60 - .../src/renderer/components/ui/card.tsx | 92 - .../src/renderer/components/ui/dialog.tsx | 161 - .../renderer/components/ui/dropdown-menu.tsx | 251 - .../src/renderer/components/ui/input.tsx | 21 - .../src/renderer/components/ui/label.tsx | 27 - .../renderer/components/ui/scroll-area.tsx | 21 - .../src/renderer/components/ui/separator.tsx | 28 - .../src/renderer/components/ui/skeleton.tsx | 13 - .../renderer/components/ui/streaming-text.tsx | 140 - .../src/renderer/components/ui/textarea.tsx | 18 - .../desktop/src/renderer/lib/accomplish.ts | 200 - .../desktop/src/renderer/lib/analytics.ts | 106 - .../desktop/src/renderer/lib/animations.ts | 80 - .../apps/desktop/src/renderer/lib/utils.ts | 6 - .../src/renderer/lib/waiting-detection.ts | 70 - .../apps/desktop/src/renderer/main.tsx | 19 - .../desktop/src/renderer/pages/Execution.tsx | 1268 --- .../desktop/src/renderer/pages/History.tsx | 15 - .../apps/desktop/src/renderer/pages/Home.tsx | 266 - .../desktop/src/renderer/stores/taskStore.ts | 502 - .../desktop/src/renderer/styles/globals.css | 142 - .../apps/desktop/src/vite-env.d.ts | 1 - .../apps/desktop/tailwind.config.ts | 145 - .../apps/desktop/tsconfig.json | 45 - .../apps/desktop/vite.config.ts | 70 - .../apps/desktop/vitest.config.ts | 81 - .../apps/desktop/vitest.integration.config.ts | 34 - .../apps/desktop/vitest.unit.config.ts | 33 - openwork-memos-integration/docs/banner.svg | 34 - .../2026-01-17-safe-file-deletion-impl.md | 745 -- .../docs/video-thumbnail.png | Bin 4605469 -> 0 bytes openwork-memos-integration/package.json | 30 - .../packages/shared/package.json | 18 - .../packages/shared/src/index.ts | 1 - .../packages/shared/src/types/auth.ts | 60 - .../packages/shared/src/types/index.ts | 6 - .../packages/shared/src/types/opencode.ts | 162 - .../packages/shared/src/types/permission.ts | 55 - .../packages/shared/src/types/provider.ts | 275 - .../shared/src/types/providerSettings.ts | 125 - .../packages/shared/src/types/task.ts | 86 - .../packages/shared/tsconfig.json | 25 - openwork-memos-integration/pnpm-lock.yaml | 9315 ----------------- .../pnpm-workspace.yaml | 3 - 254 files changed, 61862 deletions(-) delete mode 100644 openwork-memos-integration/CLAUDE.md delete mode 100644 openwork-memos-integration/CONTRIBUTING.md delete mode 100644 openwork-memos-integration/LICENSE delete mode 100644 openwork-memos-integration/README.md delete mode 100644 openwork-memos-integration/SECURITY.md delete mode 100644 openwork-memos-integration/apps/desktop/.eslintrc.json delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/appSettings.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/cli-path.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/config-generator.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/permission-api.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/secureStorage.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/store/freshInstallCleanup.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/taskHistory.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/bundled-node.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/system-path.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/preload/preload.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/App.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Header.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/SettingsDialog.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Sidebar.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/StreamingText.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskHistory.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskInputBar.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskLauncher.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Execution.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Home.integration.test.tsx delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/integration/renderer/taskStore.integration.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/main/config.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/main/ipc/handlers-utils.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/main/ipc/validation.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/main/opencode/stream-parser.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/renderer/lib/utils.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/setup.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/unit/main/ipc/handlers.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/adapter.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/task-manager.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/accomplish.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/analytics.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/animations.unit.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/waiting-detection.unit.test.ts delete mode 100755 openwork-memos-integration/apps/desktop/clean_dmg_install.sh delete mode 100644 openwork-memos-integration/apps/desktop/e2e/README.md delete mode 100644 openwork-memos-integration/apps/desktop/e2e/config/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/config/timeouts.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/docker/Dockerfile delete mode 100644 openwork-memos-integration/apps/desktop/e2e/docker/docker-compose.yml delete mode 100644 openwork-memos-integration/apps/desktop/e2e/fixtures/electron-app.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/fixtures/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/pages/execution.page.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/pages/home.page.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/pages/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/pages/settings.page.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/playwright.config.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/specs/execution.spec.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/specs/home.spec.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/specs/settings-bedrock.spec.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/specs/settings-providers.spec.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/specs/settings.spec.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/specs/task-launch-guard.spec.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/utils/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/e2e/utils/screenshots.ts delete mode 100644 openwork-memos-integration/apps/desktop/index.html delete mode 100644 openwork-memos-integration/apps/desktop/package.json delete mode 100644 openwork-memos-integration/apps/desktop/postcss.config.js delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/anthropic.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/bedrock.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/deepseek.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/google.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/litellm.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/ollama.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/openai.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/openrouter.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/provider-logos.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/vertex.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/xai.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/ai-logos/zai.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/icons/connect.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/icons/connected-key.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/icons/connected.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/icons/pending-key.svg delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/loading-symbol.svg delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/logo-1.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/logo.png delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/openwork-icon.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/ai-image-wizard.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/automated-reminders.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/batch-file-renaming.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/bilingual-output.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/calendar-events.webp delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/calendar-prep-notes.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/career-document.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/clean-data-output.webp delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/competitor-pricing-deck.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/course-announcement.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/custom-web-tool.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/document-translation.webp delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/event-calendar-builder.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/export-to-table.webp delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/inbox-promo-cleanup.png delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/job-application-automation.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/landing-page-copy.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/localize-content.webp delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/notion-api-audit.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/organize-data.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/personal-website.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/pitch-deck.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/polish-writing.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/portfolio-presentation.webp delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/prod-broken-links.png delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/professional-emails.webp delete mode 100644 openwork-memos-integration/apps/desktop/public/assets/usecases/professional-headshot.webp delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/staging-vs-prod-visual.png delete mode 100755 openwork-memos-integration/apps/desktop/public/assets/usecases/stock-portfolio-alerts.png delete mode 100644 openwork-memos-integration/apps/desktop/public/fonts/DMSans-Black.ttf delete mode 100644 openwork-memos-integration/apps/desktop/public/fonts/DMSans-Bold.ttf delete mode 100644 openwork-memos-integration/apps/desktop/public/fonts/DMSans-Light.ttf delete mode 100644 openwork-memos-integration/apps/desktop/public/fonts/DMSans-Medium.ttf delete mode 100644 openwork-memos-integration/apps/desktop/public/fonts/DMSans-Regular.ttf delete mode 100644 openwork-memos-integration/apps/desktop/resources/entitlements.mac.plist delete mode 100644 openwork-memos-integration/apps/desktop/resources/icon.png delete mode 100755 openwork-memos-integration/apps/desktop/run_local_ui_prod_api.sh delete mode 100755 openwork-memos-integration/apps/desktop/run_local_ui_staging_api.sh delete mode 100755 openwork-memos-integration/apps/desktop/run_prod.sh delete mode 100755 openwork-memos-integration/apps/desktop/run_staging.sh delete mode 100644 openwork-memos-integration/apps/desktop/scripts/after-pack.cjs delete mode 100644 openwork-memos-integration/apps/desktop/scripts/download-nodejs.cjs delete mode 100644 openwork-memos-integration/apps/desktop/scripts/package.cjs delete mode 100644 openwork-memos-integration/apps/desktop/scripts/patch-electron-name.cjs delete mode 100644 openwork-memos-integration/apps/desktop/skills/ask-user-question/SKILL.md delete mode 100644 openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/ask-user-question/src/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/.gitignore delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/SKILL.md delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/package.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/references/scraping.md delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-relay.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-server.ts delete mode 100755 openwork-memos-integration/apps/desktop/skills/dev-browser/server.sh delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/client.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/relay.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/__tests__/snapshot.test.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/browser-script.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/inject.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/src/types.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/dev-browser/vitest.config.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/file-permission/package.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/file-permission/src/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json delete mode 100644 openwork-memos-integration/apps/desktop/skills/safe-file-deletion/SKILL.md delete mode 100644 openwork-memos-integration/apps/desktop/src/main/config.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/ipc/handlers.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/ipc/validation.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/opencode/adapter.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/opencode/cli-path.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/opencode/config-generator.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/opencode/stream-parser.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/opencode/task-manager.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/permission-api.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/services/memory.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/services/summarizer.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/store/appSettings.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/store/freshInstallCleanup.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/store/providerSettings.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/store/secureStorage.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/store/taskHistory.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/test-utils/mock-task-flow.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/utils/bundled-node.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/main/utils/system-path.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/preload/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/App.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncher.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncherItem.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/history/TaskHistory.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/landing/TaskInputBar.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/layout/ConversationListItem.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/layout/Header.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/layout/SettingsDialog.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/layout/Sidebar.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/ProviderCard.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/ProviderGrid.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/ProviderSettingsPanel.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/hooks/useProviderSettings.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/providers/BedrockProviderForm.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/providers/ClassicProviderForm.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/providers/LiteLLMProviderForm.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/providers/OllamaProviderForm.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/providers/OpenRouterProviderForm.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/providers/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/ApiKeyInput.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/ConnectButton.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/ConnectedControls.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/ConnectionStatus.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/FormError.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/ModelSelector.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/ProviderFormHeader.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/RegionSelector.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/settings/shared/index.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/avatar.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/badge.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/button.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/card.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/dialog.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/dropdown-menu.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/input.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/label.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/scroll-area.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/separator.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/skeleton.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/streaming-text.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/components/ui/textarea.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/lib/accomplish.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/lib/analytics.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/lib/animations.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/lib/utils.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/lib/waiting-detection.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/main.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/pages/Execution.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/pages/History.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/pages/Home.tsx delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/stores/taskStore.ts delete mode 100644 openwork-memos-integration/apps/desktop/src/renderer/styles/globals.css delete mode 100644 openwork-memos-integration/apps/desktop/src/vite-env.d.ts delete mode 100644 openwork-memos-integration/apps/desktop/tailwind.config.ts delete mode 100644 openwork-memos-integration/apps/desktop/tsconfig.json delete mode 100644 openwork-memos-integration/apps/desktop/vite.config.ts delete mode 100644 openwork-memos-integration/apps/desktop/vitest.config.ts delete mode 100644 openwork-memos-integration/apps/desktop/vitest.integration.config.ts delete mode 100644 openwork-memos-integration/apps/desktop/vitest.unit.config.ts delete mode 100644 openwork-memos-integration/docs/banner.svg delete mode 100644 openwork-memos-integration/docs/plans/2026-01-17-safe-file-deletion-impl.md delete mode 100644 openwork-memos-integration/docs/video-thumbnail.png delete mode 100644 openwork-memos-integration/package.json delete mode 100644 openwork-memos-integration/packages/shared/package.json delete mode 100644 openwork-memos-integration/packages/shared/src/index.ts delete mode 100644 openwork-memos-integration/packages/shared/src/types/auth.ts delete mode 100644 openwork-memos-integration/packages/shared/src/types/index.ts delete mode 100644 openwork-memos-integration/packages/shared/src/types/opencode.ts delete mode 100644 openwork-memos-integration/packages/shared/src/types/permission.ts delete mode 100644 openwork-memos-integration/packages/shared/src/types/provider.ts delete mode 100644 openwork-memos-integration/packages/shared/src/types/providerSettings.ts delete mode 100644 openwork-memos-integration/packages/shared/src/types/task.ts delete mode 100644 openwork-memos-integration/packages/shared/tsconfig.json delete mode 100644 openwork-memos-integration/pnpm-lock.yaml delete mode 100644 openwork-memos-integration/pnpm-workspace.yaml diff --git a/openwork-memos-integration/CLAUDE.md b/openwork-memos-integration/CLAUDE.md deleted file mode 100644 index 74a9707da..000000000 --- a/openwork-memos-integration/CLAUDE.md +++ /dev/null @@ -1,162 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -Openwork is a standalone desktop automation assistant built with Electron. The app hosts a local React UI (bundled via Vite), communicating with the main process through `contextBridge` IPC. The main process spawns the OpenCode CLI (via `node-pty`) to execute user tasks. Users provide their own API key (Anthropic, OpenAI, Google, or xAI) on first launch, stored securely in the OS keychain. - -## Common Commands - -```bash -pnpm dev # Run desktop app in dev mode (Vite + Electron) -pnpm dev:clean # Dev mode with CLEAN_START=1 (clears stored data) -pnpm build # Build all workspaces -pnpm build:desktop # Build desktop app only -pnpm lint # TypeScript checks -pnpm typecheck # Type validation -pnpm clean # Clean build outputs and node_modules -pnpm -F @accomplish/desktop test:e2e # Playwright E2E tests -pnpm -F @accomplish/desktop test:e2e:ui # E2E with Playwright UI -pnpm -F @accomplish/desktop test:e2e:debug # E2E in debug mode -``` - -## Architecture - -### Monorepo Layout -``` -apps/desktop/ # Electron app (main/preload/renderer) -packages/shared/ # Shared TypeScript types -``` - -### Desktop App Structure (`apps/desktop/src/`) - -**Main Process** (`main/`): -- `index.ts` - Electron bootstrap, single-instance enforcement, `accomplish://` protocol handler -- `ipc/handlers.ts` - IPC handlers for task lifecycle, settings, onboarding, API keys -- `opencode/adapter.ts` - OpenCode CLI wrapper using `node-pty`, streams output and handles permissions -- `store/secureStorage.ts` - API key storage via `keytar` (OS keychain) -- `store/appSettings.ts` - App settings via `electron-store` (debug mode, onboarding state) -- `store/taskHistory.ts` - Task history persistence - -**Preload** (`preload/index.ts`): -- Exposes `window.accomplish` API via `contextBridge` -- Provides typed IPC methods for task operations, settings, events - -**Renderer** (`renderer/`): -- `main.tsx` - React entry with HashRouter -- `App.tsx` - Main routing + onboarding gate -- `pages/` - Home, Execution, History, Settings pages -- `stores/taskStore.ts` - Zustand store for task/UI state -- `lib/accomplish.ts` - Typed wrapper for the IPC API - -### IPC Communication Flow -``` -Renderer (React) - ↓ window.accomplish.* calls -Preload (contextBridge) - ↓ ipcRenderer.invoke -Main Process - ↓ Native APIs (keytar, node-pty, electron-store) - ↑ IPC events -Preload - ↑ ipcRenderer.on callbacks -Renderer -``` - -### Key Dependencies -- `node-pty` - PTY for OpenCode CLI spawning -- `keytar` - Secure API key storage (OS keychain) -- `electron-store` - Local settings/preferences -- `opencode-ai` - Bundled OpenCode CLI (multi-provider: Anthropic, OpenAI, Google, xAI) - -## Code Conventions - -- TypeScript everywhere (no JS for app logic) -- Use `pnpm -F @accomplish/desktop ...` for desktop-specific commands -- Shared types go in `packages/shared/src/types/` -- Renderer state via Zustand store actions -- IPC handlers in `src/main/ipc/handlers.ts` must match `window.accomplish` API in preload - -### Image Assets in Renderer - -**IMPORTANT:** Always use ES module imports for images in the renderer, never absolute paths. - -```typescript -// CORRECT - Use ES imports -import logoImage from '/assets/logo.png'; -Logo - -// WRONG - Absolute paths break in packaged app -Logo -``` - -**Why:** In development, Vite serves `/assets/...` from the public folder. But in the packaged Electron app, the renderer loads via `file://` protocol, and absolute paths like `/assets/logo.png` resolve to the filesystem root instead of the app bundle. ES imports are processed by Vite to use `import.meta.url`, which works correctly in both environments. - -Static assets go in `apps/desktop/public/assets/`. - -## Environment Variables - -- `CLEAN_START=1` - Clear all stored data on app start -- `E2E_SKIP_AUTH=1` - Skip onboarding flow (for testing) - -## Testing - -- E2E tests: `pnpm -F @accomplish/desktop test:e2e` -- Tests use Playwright with serial execution (Electron requirement) -- Test config: `apps/desktop/playwright.config.ts` - -## Bundled Node.js - -The packaged app bundles standalone Node.js v20.18.1 binaries to ensure MCP servers work on machines without Node.js installed. - -### Key Files -- `src/main/utils/bundled-node.ts` - Utility to get bundled node/npm/npx paths -- `scripts/download-nodejs.cjs` - Downloads Node.js binaries for all platforms -- `scripts/after-pack.cjs` - Copies correct binary into app bundle during build - -### CRITICAL: Spawning npx/node in Main Process - -**IMPORTANT:** When spawning `npx` or `node` in the main process, you MUST add the bundled Node.js bin directory to PATH. This is because `npx` uses a `#!/usr/bin/env node` shebang which looks for `node` in PATH. - -```typescript -import { spawn } from 'child_process'; -import { getNpxPath, getBundledNodePaths } from '../utils/bundled-node'; - -// Get bundled paths -const npxPath = getNpxPath(); -const bundledPaths = getBundledNodePaths(); - -// Build environment with bundled node in PATH -let spawnEnv: NodeJS.ProcessEnv = { ...process.env }; -if (bundledPaths) { - const delimiter = process.platform === 'win32' ? ';' : ':'; - spawnEnv.PATH = `${bundledPaths.binDir}${delimiter}${process.env.PATH || ''}`; -} - -// Spawn with the modified environment -spawn(npxPath, ['-y', 'some-package@latest'], { - stdio: ['pipe', 'pipe', 'pipe'], - env: spawnEnv, -}); -``` - -**Why:** Without adding `bundledPaths.binDir` to PATH, the spawned process will fail with exit code 127 ("node not found") on machines that don't have Node.js installed system-wide. - -### For MCP Server Configs - -When generating MCP server configurations, pass `NODE_BIN_PATH` in the environment so spawned servers can add it to their PATH: - -```typescript -environment: { - NODE_BIN_PATH: bundledPaths?.binDir || '', -} -``` - -## Key Behaviors - -- Single-instance enforcement - second instance focuses existing window -- API keys stored in OS keychain (macOS Keychain, Windows Credential Vault, Linux Secret Service) -- API key validation via test request to respective provider API -- OpenCode CLI permissions are bridged to UI via IPC `permission:request` / `permission:respond` -- Task output streams through `task:update` and `task:progress` IPC events diff --git a/openwork-memos-integration/CONTRIBUTING.md b/openwork-memos-integration/CONTRIBUTING.md deleted file mode 100644 index b5dcb6dd1..000000000 --- a/openwork-memos-integration/CONTRIBUTING.md +++ /dev/null @@ -1,60 +0,0 @@ -# Contributing to Openwork - -Thank you for your interest in contributing to Openwork! This document provides guidelines and instructions for contributing. - -## Getting Started - -1. Fork the repository -2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/openwork.git` -3. Install dependencies: `pnpm install` -4. Create a branch: `git checkout -b feature/your-feature-name` - -## Development - -```bash -pnpm dev # Run the desktop app in development mode -pnpm build # Build all workspaces -pnpm typecheck # Run TypeScript checks -pnpm lint # Run linting -``` - -## Code Style - -- TypeScript for all application code -- Follow existing patterns in the codebase -- Use meaningful variable and function names -- Keep functions focused and small - -## Pull Request Process - -1. Ensure your code builds without errors (`pnpm build`) -2. Run type checking (`pnpm typecheck`) -3. Update documentation if needed -4. Write a clear PR description explaining: - - What the change does - - Why it's needed - - How to test it - -## Commit Messages - -Use clear, descriptive commit messages: -- `feat: add dark mode support` -- `fix: resolve crash on startup` -- `docs: update README with new instructions` -- `refactor: simplify task queue logic` - -## Reporting Issues - -When reporting issues, please include: -- OS and version -- Steps to reproduce -- Expected vs actual behavior -- Any error messages or logs - -## Security - -If you discover a security vulnerability, please see [SECURITY.md](SECURITY.md) for responsible disclosure guidelines. - -## License - -By contributing, you agree that your contributions will be licensed under the MIT License. diff --git a/openwork-memos-integration/LICENSE b/openwork-memos-integration/LICENSE deleted file mode 100644 index e548c0a6f..000000000 --- a/openwork-memos-integration/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2026 Accomplish Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/openwork-memos-integration/README.md b/openwork-memos-integration/README.md deleted file mode 100644 index 132d7455a..000000000 --- a/openwork-memos-integration/README.md +++ /dev/null @@ -1,315 +0,0 @@ -

- Openwork - Open source AI desktop agent that automates file management, document creation, and browser tasks with your own AI API keys -

- -

- MIT License - GitHub Stars - GitHub Issues - Last Commit - Download for macOS -

- -# Openwork™ - Open Source AI Desktop Agent - -Openwork is an open source AI desktop agent that automates file management, document creation, and browser tasks locally on your machine. Bring your own API keys (OpenAI, Anthropic, Google, xAI) or run local models via Ollama. - -

- Runs locally on your machine. Bring your own API keys or local models. MIT licensed. -

- -

- Download Openwork for Mac (Apple Silicon) - · - Openwork website - · - Openwork blog - · - Openwork releases -

- -
- ---- - -
- -## What makes it different - - - - - - - - - - -
- -### 🖥️ It runs locally - -
- -- Your files stay on your machine -- You decide which folders it can touch -- Nothing gets sent to Openwork (or anyone else) - -
- -
- -### 🔑 You bring your own AI - -
- -- Use your own API key (OpenAI, Anthropic, etc.) -- Or run with [Ollama](https://ollama.com) (no API key needed) -- No subscription, no upsell -- It's a tool—not a service - -
- -
- -### 📖 It's open source - -
- -- Every line of code is on GitHub -- MIT licensed -- Change it, fork it, break it, fix it - -
- -
- -### ⚡ It acts, not just chats - -
- -- File management -- Document creation -- Custom automations -- Skill learning - -
- -
- -
- ---- - -
- -## What it actually does - -| | | | -|:--|:--|:--| -| **📁 File Management** | **✍️ Document Writing** | **🔗 Tool Connections** | -| Sort, rename, and move files based on content or rules you give it | Prompt it to write, summarize, or rewrite documents | Works with Notion, Google Drive, Dropbox, and more (through local APIs) | -| | | | -| **⚙️ Custom Skills** | **🛡️ Full Control** | | -| Define repeatable workflows, save them as skills | You approve every action. You can see logs. You can stop it anytime. | | - -
- -## Use cases - -- Clean up messy folders by project, file type, or date -- Draft, summarize, and rewrite docs, reports, and meeting notes -- Automate browser workflows like research and form entry -- Generate weekly updates from files and notes -- Prepare meeting materials from docs and calendars - -
- -## Memory (MemOS) - -Openwork can connect to MemOS to provide long-term memory. When a MemOS API key is set, relevant memories are injected into the system prompt and new memories are saved after tasks finish. Learn more in the MemOS docs: https://memos-docs.openmem.net/ - -
- -## Supported models and providers - -- OpenAI -- Anthropic -- Google -- xAI -- Ollama (local models) - -
- -## Privacy and local-first - -Openwork runs locally on your machine. Your files stay on your device, and you choose which folders it can access. - -
- -## System requirements - -- macOS (Apple Silicon) -- Windows support coming soon - -
- ---- - -
- -## How to use it - -> **Takes 2 minutes to set up.** - -| Step | Action | Details | -|:----:|--------|---------| -| **1** | **Install the App** | Download the DMG and drag it into Applications | -| **2** | **Connect Your AI** | Use your own OpenAI or Anthropic API key, or Ollama. No subscriptions. | -| **3** | **Give It Access** | Choose which folders it can see. You stay in control. | -| **4** | **Start Working** | Ask it to summarize a doc, clean a folder, or create a report. You approve everything. | - -
- -
- -[**Download for Mac (Apple Silicon)**](https://downloads.openwork.me/downloads/0.2.1/macos/Openwork-0.2.1-mac-arm64.dmg) - -
- -
- ---- - -
- -## Screenshots and Demo - -A quick look at Openwork on macOS, plus a short demo video. - -

- - Openwork demo - AI agent automating file management and browser tasks - -

- -

- Watch the demo → -

- -
- -## FAQ - -**Does Openwork run locally?** -Yes. Openwork runs locally on your machine and you control which folders it can access. - -**Do I need an API key?** -You can use your own API keys (OpenAI, Anthropic, Google, xAI) or run local models via Ollama. - -**Is Openwork free?** -Yes. Openwork is open source and MIT licensed. - -**Which platforms are supported?** -macOS (Apple Silicon) is available now. Windows support is coming soon. - -
- ---- - -
- -## Development - -```bash -pnpm install -pnpm dev -``` - -That's it. - -
-Prerequisites - -- Node.js 20+ -- pnpm 9+ - -
- -
-All Commands - -| Command | Description | -|---------|-------------| -| `pnpm dev` | Run desktop app in dev mode | -| `pnpm dev:clean` | Dev mode with clean start | -| `pnpm build` | Build all workspaces | -| `pnpm build:desktop` | Build desktop app only | -| `pnpm lint` | TypeScript checks | -| `pnpm typecheck` | Type validation | -| `pnpm -F @accomplish/desktop test:e2e` | Playwright E2E tests | - -
- -
-Environment Variables - -| Variable | Description | -|----------|-------------| -| `CLEAN_START=1` | Clear all stored data on app start | -| `E2E_SKIP_AUTH=1` | Skip onboarding flow (for testing) | - -
- -
-Architecture - -``` -apps/ - desktop/ # Electron app (main + preload + renderer) -packages/ - shared/ # Shared TypeScript types -``` - -The desktop app uses Electron with a React UI bundled via Vite. The main process spawns [OpenCode](https://github.com/sst/opencode) CLI using `node-pty` to execute tasks. API keys are stored securely in the OS keychain. - -See [CLAUDE.md](CLAUDE.md) for detailed architecture documentation. - -
- -
- ---- - -
- -## Contributing - -Contributions welcome! Feel free to open a PR. - -```bash -# Fork → Clone → Branch → Commit → Push → PR -git checkout -b feature/amazing-feature -git commit -m 'Add amazing feature' -git push origin feature/amazing-feature -``` - -
- ---- - -
- -
- -**[Openwork website](https://www.openwork.me/)** · **[Openwork blog](https://www.openwork.me/blog/)** · **[Openwork releases](https://github.com/accomplish-ai/openwork/releases)** · **[Issues](https://github.com/accomplish-ai/openwork/issues)** · **[Twitter](https://x.com/openwork_ai)** - -
- -MIT License · Built by [Openwork](https://www.openwork.me) - -
- -**Keywords:** AI agent, AI desktop agent, desktop automation, file management, document creation, browser automation, local-first, macOS, privacy-first, open source, Electron, computer use, AI assistant, workflow automation, OpenAI, Anthropic, Google, xAI, Claude, GPT-4, Ollama - -
diff --git a/openwork-memos-integration/SECURITY.md b/openwork-memos-integration/SECURITY.md deleted file mode 100644 index 16117e532..000000000 --- a/openwork-memos-integration/SECURITY.md +++ /dev/null @@ -1,49 +0,0 @@ -# Security Policy - -## Supported Versions - -| Version | Supported | -| ------- | ------------------ | -| 0.1.x | :white_check_mark: | - -## Reporting a Vulnerability - -We take security seriously. If you discover a security vulnerability, please report it responsibly. - -### How to Report - -1. **Do not** open a public GitHub issue for security vulnerabilities -2. Email security concerns to the maintainers (see GitHub profile) -3. Include: - - Description of the vulnerability - - Steps to reproduce - - Potential impact - - Any suggested fixes (optional) - -### What to Expect - -- Acknowledgment within 48 hours -- Regular updates on progress -- Credit in release notes (if desired) - -### Scope - -Security issues we're interested in: -- Remote code execution -- Local privilege escalation -- Data exposure -- Authentication/authorization bypasses -- IPC security issues - -Out of scope: -- Denial of service -- Social engineering -- Issues requiring physical access - -## Security Best Practices - -When using Openwork: -- Keep the application updated -- Only grant file permissions when necessary -- Review task outputs before approving sensitive operations -- Use API keys with minimal required permissions diff --git a/openwork-memos-integration/apps/desktop/.eslintrc.json b/openwork-memos-integration/apps/desktop/.eslintrc.json deleted file mode 100644 index d655265ef..000000000 --- a/openwork-memos-integration/apps/desktop/.eslintrc.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "root": true, - "env": { - "browser": true, - "es2021": true, - "node": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "settings": { - "react": { - "version": "detect" - } - }, - "plugins": [ - "@typescript-eslint", - "react", - "react-hooks" - ], - "extends": [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:react-hooks/recommended" - ], - "ignorePatterns": [ - "dist", - "dist-electron", - "release", - "node_modules" - ], - "rules": { - "react/react-in-jsx-scope": "off", - "react/prop-types": "off" - } -} diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/appSettings.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/appSettings.integration.test.ts deleted file mode 100644 index 303dab022..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/appSettings.integration.test.ts +++ /dev/null @@ -1,369 +0,0 @@ -/** - * Integration tests for appSettings store - * Tests real electron-store interactions with temporary directories - * @module __tests__/integration/main/appSettings.integration.test - */ - -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as os from 'os'; - -// Create a unique temp directory for each test run -let tempDir: string; -let originalCwd: string; - -describe('appSettings Integration', () => { - beforeEach(async () => { - // Create a unique temp directory for each test - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'appSettings-test-')); - originalCwd = process.cwd(); - - // Reset module cache first - vi.resetModules(); - - // Use doMock (not hoisted) so tempDir is captured with current value - vi.doMock('electron', () => ({ - app: { - getPath: (name: string) => { - if (name === 'userData') { - return tempDir; - } - return `/mock/path/${name}`; - }, - getVersion: () => '0.1.0', - getName: () => 'Accomplish', - isPackaged: false, - }, - })); - }); - - afterEach(() => { - // Clean up temp directory - if (tempDir && fs.existsSync(tempDir)) { - fs.rmSync(tempDir, { recursive: true, force: true }); - } - process.chdir(originalCwd); - }); - - describe('debugMode', () => { - it('should return false as default value for debugMode', async () => { - // Arrange - const { getDebugMode, clearAppSettings } = await import('@main/store/appSettings'); - clearAppSettings(); // Ensure fresh state - - // Act - const result = getDebugMode(); - - // Assert - expect(result).toBe(false); - }); - - it('should persist debugMode after setting to true', async () => { - // Arrange - const { getDebugMode, setDebugMode } = await import('@main/store/appSettings'); - - // Act - setDebugMode(true); - const result = getDebugMode(); - - // Assert - expect(result).toBe(true); - }); - - it('should persist debugMode after setting to false', async () => { - // Arrange - const { getDebugMode, setDebugMode } = await import('@main/store/appSettings'); - - // Act - set to true first, then false - setDebugMode(true); - setDebugMode(false); - const result = getDebugMode(); - - // Assert - expect(result).toBe(false); - }); - - it('should round-trip debugMode value correctly', async () => { - // Arrange - const { getDebugMode, setDebugMode } = await import('@main/store/appSettings'); - - // Act - setDebugMode(true); - const afterTrue = getDebugMode(); - setDebugMode(false); - const afterFalse = getDebugMode(); - setDebugMode(true); - const afterTrueAgain = getDebugMode(); - - // Assert - expect(afterTrue).toBe(true); - expect(afterFalse).toBe(false); - expect(afterTrueAgain).toBe(true); - }); - }); - - describe('onboardingComplete', () => { - it('should return false as default value for onboardingComplete', async () => { - // Arrange - const { getOnboardingComplete, clearAppSettings } = await import('@main/store/appSettings'); - clearAppSettings(); // Ensure fresh state - - // Act - const result = getOnboardingComplete(); - - // Assert - expect(result).toBe(false); - }); - - it('should persist onboardingComplete after setting to true', async () => { - // Arrange - const { getOnboardingComplete, setOnboardingComplete } = await import('@main/store/appSettings'); - - // Act - setOnboardingComplete(true); - const result = getOnboardingComplete(); - - // Assert - expect(result).toBe(true); - }); - - it('should round-trip onboardingComplete value correctly', async () => { - // Arrange - const { getOnboardingComplete, setOnboardingComplete } = await import('@main/store/appSettings'); - - // Act - setOnboardingComplete(true); - const afterTrue = getOnboardingComplete(); - setOnboardingComplete(false); - const afterFalse = getOnboardingComplete(); - - // Assert - expect(afterTrue).toBe(true); - expect(afterFalse).toBe(false); - }); - }); - - describe('selectedModel', () => { - it('should return default model on fresh store', async () => { - // Arrange - const { getSelectedModel, clearAppSettings } = await import('@main/store/appSettings'); - clearAppSettings(); // Ensure fresh state - - // Act - const result = getSelectedModel(); - - // Assert - expect(result).toEqual({ - provider: 'anthropic', - model: 'anthropic/claude-opus-4-5', - }); - }); - - it('should persist selectedModel after setting new value', async () => { - // Arrange - const { getSelectedModel, setSelectedModel } = await import('@main/store/appSettings'); - const newModel = { provider: 'openai', model: 'gpt-4' }; - - // Act - setSelectedModel(newModel); - const result = getSelectedModel(); - - // Assert - expect(result).toEqual(newModel); - }); - - it('should round-trip different model values correctly', async () => { - // Arrange - const { getSelectedModel, setSelectedModel } = await import('@main/store/appSettings'); - const model1 = { provider: 'anthropic', model: 'claude-3-opus' }; - const model2 = { provider: 'google', model: 'gemini-pro' }; - const model3 = { provider: 'xai', model: 'grok-4' }; - - // Act & Assert - setSelectedModel(model1); - expect(getSelectedModel()).toEqual(model1); - - setSelectedModel(model2); - expect(getSelectedModel()).toEqual(model2); - - setSelectedModel(model3); - expect(getSelectedModel()).toEqual(model3); - }); - }); - - describe('getAppSettings', () => { - it('should return all default settings on fresh store', async () => { - // Arrange - const { getAppSettings, clearAppSettings } = await import('@main/store/appSettings'); - clearAppSettings(); // Ensure fresh state - - // Act - const result = getAppSettings(); - - // Assert - expect(result).toEqual({ - debugMode: false, - onboardingComplete: false, - ollamaConfig: null, - litellmConfig: null, - selectedModel: { - provider: 'anthropic', - model: 'anthropic/claude-opus-4-5', - }, - }); - }); - - it('should return all settings after modifications', async () => { - // Arrange - const { getAppSettings, setDebugMode, setOnboardingComplete, setSelectedModel, clearAppSettings } = await import('@main/store/appSettings'); - clearAppSettings(); // Start fresh - const customModel = { provider: 'openai', model: 'gpt-4-turbo' }; - - // Act - setDebugMode(true); - setOnboardingComplete(true); - setSelectedModel(customModel); - const result = getAppSettings(); - - // Assert - expect(result).toEqual({ - debugMode: true, - onboardingComplete: true, - ollamaConfig: null, - litellmConfig: null, - selectedModel: customModel, - }); - }); - - it('should reflect partial modifications correctly', async () => { - // Arrange - const { getAppSettings, setDebugMode, clearAppSettings } = await import('@main/store/appSettings'); - clearAppSettings(); // Start fresh - - // Act - only modify debugMode - setDebugMode(true); - const result = getAppSettings(); - - // Assert - expect(result.debugMode).toBe(true); - expect(result.onboardingComplete).toBe(false); - expect(result.selectedModel).toEqual({ - provider: 'anthropic', - model: 'anthropic/claude-opus-4-5', - }); - }); - }); - - describe('clearAppSettings', () => { - it('should reset all settings to defaults', async () => { - // Arrange - const { - getAppSettings, - clearAppSettings, - setDebugMode, - setOnboardingComplete, - setSelectedModel - } = await import('@main/store/appSettings'); - - // Set custom values - setDebugMode(true); - setOnboardingComplete(true); - setSelectedModel({ provider: 'openai', model: 'gpt-4' }); - - // Act - clearAppSettings(); - const result = getAppSettings(); - - // Assert - expect(result).toEqual({ - debugMode: false, - onboardingComplete: false, - ollamaConfig: null, - litellmConfig: null, - selectedModel: { - provider: 'anthropic', - model: 'anthropic/claude-opus-4-5', - }, - }); - }); - - it('should reset debugMode to default after clear', async () => { - // Arrange - const { getDebugMode, setDebugMode, clearAppSettings } = await import('@main/store/appSettings'); - - // Act - setDebugMode(true); - expect(getDebugMode()).toBe(true); - clearAppSettings(); - const result = getDebugMode(); - - // Assert - expect(result).toBe(false); - }); - - it('should reset onboardingComplete to default after clear', async () => { - // Arrange - const { getOnboardingComplete, setOnboardingComplete, clearAppSettings } = await import('@main/store/appSettings'); - - // Act - setOnboardingComplete(true); - expect(getOnboardingComplete()).toBe(true); - clearAppSettings(); - const result = getOnboardingComplete(); - - // Assert - expect(result).toBe(false); - }); - - it('should reset selectedModel to default after clear', async () => { - // Arrange - const { getSelectedModel, setSelectedModel, clearAppSettings } = await import('@main/store/appSettings'); - - // Act - setSelectedModel({ provider: 'openai', model: 'gpt-4' }); - expect(getSelectedModel()).toEqual({ provider: 'openai', model: 'gpt-4' }); - clearAppSettings(); - const result = getSelectedModel(); - - // Assert - expect(result).toEqual({ - provider: 'anthropic', - model: 'anthropic/claude-opus-4-5', - }); - }); - - it('should allow setting new values after clear', async () => { - // Arrange - const { getDebugMode, setDebugMode, clearAppSettings } = await import('@main/store/appSettings'); - - // Act - setDebugMode(true); - clearAppSettings(); - setDebugMode(true); - const result = getDebugMode(); - - // Assert - expect(result).toBe(true); - }); - }); - - describe('persistence across module reloads', () => { - it('should persist values to disk and survive module reload', async () => { - // Arrange - first import and set values - const module1 = await import('@main/store/appSettings'); - module1.setDebugMode(true); - module1.setOnboardingComplete(true); - module1.setSelectedModel({ provider: 'google', model: 'gemini-ultra' }); - - // Act - reset modules and reimport - vi.resetModules(); - const module2 = await import('@main/store/appSettings'); - - // Assert - values should be persisted - expect(module2.getDebugMode()).toBe(true); - expect(module2.getOnboardingComplete()).toBe(true); - expect(module2.getSelectedModel()).toEqual({ provider: 'google', model: 'gemini-ultra' }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/cli-path.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/cli-path.integration.test.ts deleted file mode 100644 index 7e0320988..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/cli-path.integration.test.ts +++ /dev/null @@ -1,499 +0,0 @@ -/** - * Integration tests for OpenCode CLI path resolution - * - * Tests the cli-path module which resolves paths to the OpenCode CLI binary - * in both development and packaged app modes. - * - * @module __tests__/integration/main/opencode/cli-path.integration.test - */ - -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; -import path from 'path'; - -// Mock electron module before importing the module under test -const mockApp = { - isPackaged: false, - getAppPath: vi.fn(() => '/mock/app/path'), -}; - -vi.mock('electron', () => ({ - app: mockApp, -})); - -// Mock fs module -const mockFs = { - existsSync: vi.fn(), - readdirSync: vi.fn(), - readFileSync: vi.fn(), -}; - -vi.mock('fs', () => ({ - default: mockFs, - existsSync: mockFs.existsSync, - readdirSync: mockFs.readdirSync, - readFileSync: mockFs.readFileSync, -})); - -// Mock child_process -const mockExecSync = vi.fn(); - -vi.mock('child_process', () => ({ - execSync: mockExecSync, -})); - -describe('OpenCode CLI Path Module', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset module state - vi.resetModules(); - // Reset packaged state - mockApp.isPackaged = false; - // Reset HOME environment variable - process.env.HOME = '/Users/testuser'; - }); - - afterEach(() => { - vi.restoreAllMocks(); - }); - - describe('getOpenCodeCliPath()', () => { - describe('Development Mode', () => { - it('should return nvm OpenCode path when available', async () => { - // Arrange - mockApp.isPackaged = false; - const nvmVersionsDir = '/Users/testuser/.nvm/versions/node'; - const expectedPath = path.join(nvmVersionsDir, 'v20.10.0', 'bin', 'opencode'); - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === nvmVersionsDir) return true; - if (p === expectedPath) return true; - return false; - }); - mockFs.readdirSync.mockImplementation((p: string) => { - if (p === nvmVersionsDir) return ['v20.10.0']; - return []; - }); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - expect(result.command).toBe(expectedPath); - expect(result.args).toEqual([]); - }); - - it('should return global npm OpenCode path when nvm not available', async () => { - // Arrange - mockApp.isPackaged = false; - const globalPath = '/usr/local/bin/opencode'; - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === globalPath) return true; - return false; - }); - mockFs.readdirSync.mockReturnValue([]); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - expect(result.command).toBe(globalPath); - expect(result.args).toEqual([]); - }); - - it('should return Homebrew OpenCode path on Apple Silicon', async () => { - // Arrange - mockApp.isPackaged = false; - const homebrewPath = '/opt/homebrew/bin/opencode'; - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === homebrewPath) return true; - return false; - }); - mockFs.readdirSync.mockReturnValue([]); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - expect(result.command).toBe(homebrewPath); - expect(result.args).toEqual([]); - }); - - it('should return bundled CLI path in node_modules when global not found', async () => { - // Arrange - mockApp.isPackaged = false; - const appPath = '/mock/app/path'; - const bundledPath = path.join(appPath, 'node_modules', '.bin', 'opencode'); - - mockApp.getAppPath.mockReturnValue(appPath); - mockFs.existsSync.mockImplementation((p: string) => { - if (p === bundledPath) return true; - return false; - }); - mockFs.readdirSync.mockReturnValue([]); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - expect(result.command).toBe(bundledPath); - expect(result.args).toEqual([]); - }); - - it('should fallback to PATH-based opencode when no paths found', async () => { - // Arrange - mockApp.isPackaged = false; - mockFs.existsSync.mockReturnValue(false); - mockFs.readdirSync.mockReturnValue([]); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - expect(result.command).toBe('opencode'); - expect(result.args).toEqual([]); - }); - }); - - describe('Packaged Mode', () => { - it('should return unpacked asar path when packaged', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - const expectedPath = path.join( - resourcesPath, - 'app.asar.unpacked', - 'node_modules', - 'opencode-ai', - 'bin', - 'opencode' - ); - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === expectedPath) return true; - return false; - }); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - expect(result.command).toBe(expectedPath); - expect(result.args).toEqual([]); - }); - - it('should throw error when bundled CLI not found in packaged app', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(false); - - // Act & Assert - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - expect(() => getOpenCodeCliPath()).toThrow('OpenCode CLI not found at'); - }); - }); - }); - - describe('isOpenCodeBundled()', () => { - describe('Development Mode', () => { - it('should return true when nvm OpenCode is available', async () => { - // Arrange - mockApp.isPackaged = false; - const nvmVersionsDir = '/Users/testuser/.nvm/versions/node'; - const opencodePath = path.join(nvmVersionsDir, 'v20.10.0', 'bin', 'opencode'); - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === nvmVersionsDir) return true; - if (p === opencodePath) return true; - return false; - }); - mockFs.readdirSync.mockImplementation((p: string) => { - if (p === nvmVersionsDir) return ['v20.10.0']; - return []; - }); - - // Act - const { isOpenCodeBundled } = await import('@main/opencode/cli-path'); - const result = isOpenCodeBundled(); - - // Assert - expect(result).toBe(true); - }); - - it('should return true when bundled CLI exists in node_modules', async () => { - // Arrange - mockApp.isPackaged = false; - const appPath = '/mock/app/path'; - const bundledPath = path.join(appPath, 'node_modules', '.bin', 'opencode'); - - mockApp.getAppPath.mockReturnValue(appPath); - mockFs.existsSync.mockImplementation((p: string) => { - if (p === bundledPath) return true; - return false; - }); - mockFs.readdirSync.mockReturnValue([]); - - // Act - const { isOpenCodeBundled } = await import('@main/opencode/cli-path'); - const result = isOpenCodeBundled(); - - // Assert - expect(result).toBe(true); - }); - - it('should return true when opencode is available on PATH', async () => { - // Arrange - mockApp.isPackaged = false; - mockFs.existsSync.mockReturnValue(false); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('/usr/local/bin/opencode'); - - // Act - const { isOpenCodeBundled } = await import('@main/opencode/cli-path'); - const result = isOpenCodeBundled(); - - // Assert - expect(result).toBe(true); - }); - - it('should return false when no CLI is found anywhere', async () => { - // Arrange - mockApp.isPackaged = false; - mockFs.existsSync.mockReturnValue(false); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockImplementation(() => { - throw new Error('Command not found'); - }); - - // Act - const { isOpenCodeBundled } = await import('@main/opencode/cli-path'); - const result = isOpenCodeBundled(); - - // Assert - expect(result).toBe(false); - }); - }); - - describe('Packaged Mode', () => { - it('should return true when bundled CLI exists in unpacked asar', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - const cliPath = path.join( - resourcesPath, - 'app.asar.unpacked', - 'node_modules', - 'opencode-ai', - 'bin', - 'opencode' - ); - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === cliPath) return true; - return false; - }); - - // Act - const { isOpenCodeBundled } = await import('@main/opencode/cli-path'); - const result = isOpenCodeBundled(); - - // Assert - expect(result).toBe(true); - }); - - it('should return false when bundled CLI missing in unpacked asar', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(false); - - // Act - const { isOpenCodeBundled } = await import('@main/opencode/cli-path'); - const result = isOpenCodeBundled(); - - // Assert - expect(result).toBe(false); - }); - }); - }); - - describe('getBundledOpenCodeVersion()', () => { - describe('Packaged Mode', () => { - it('should read version from package.json in unpacked asar', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - const packageJsonPath = path.join( - resourcesPath, - 'app.asar.unpacked', - 'node_modules', - 'opencode-ai', - 'package.json' - ); - - mockFs.existsSync.mockImplementation((p: string) => p === packageJsonPath); - mockFs.readFileSync.mockImplementation((p: string) => { - if (p === packageJsonPath) { - return JSON.stringify({ version: '1.2.3' }); - } - return ''; - }); - - // Act - const { getBundledOpenCodeVersion } = await import('@main/opencode/cli-path'); - const result = getBundledOpenCodeVersion(); - - // Assert - expect(result).toBe('1.2.3'); - }); - - it('should return null when package.json not found', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(false); - - // Act - const { getBundledOpenCodeVersion } = await import('@main/opencode/cli-path'); - const result = getBundledOpenCodeVersion(); - - // Assert - expect(result).toBeNull(); - }); - }); - - describe('Development Mode', () => { - it('should execute CLI with --version flag and parse output', async () => { - // Arrange - mockApp.isPackaged = false; - const appPath = '/mock/app/path'; - const bundledPath = path.join(appPath, 'node_modules', '.bin', 'opencode'); - - mockApp.getAppPath.mockReturnValue(appPath); - mockFs.existsSync.mockImplementation((p: string) => { - if (p === bundledPath) return true; - return false; - }); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('opencode 1.5.0\n'); - - // Act - const { getBundledOpenCodeVersion } = await import('@main/opencode/cli-path'); - const result = getBundledOpenCodeVersion(); - - // Assert - expect(result).toBe('1.5.0'); - }); - - it('should parse version from simple version string', async () => { - // Arrange - mockApp.isPackaged = false; - const appPath = '/mock/app/path'; - const bundledPath = path.join(appPath, 'node_modules', '.bin', 'opencode'); - - mockApp.getAppPath.mockReturnValue(appPath); - mockFs.existsSync.mockImplementation((p: string) => { - if (p === bundledPath) return true; - return false; - }); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('2.0.1'); - - // Act - const { getBundledOpenCodeVersion } = await import('@main/opencode/cli-path'); - const result = getBundledOpenCodeVersion(); - - // Assert - expect(result).toBe('2.0.1'); - }); - - it('should return null when version command fails', async () => { - // Arrange - mockApp.isPackaged = false; - const appPath = '/mock/app/path'; - const bundledPath = path.join(appPath, 'node_modules', '.bin', 'opencode'); - - mockApp.getAppPath.mockReturnValue(appPath); - mockFs.existsSync.mockImplementation((p: string) => { - if (p === bundledPath) return true; - return false; - }); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockImplementation(() => { - throw new Error('Command failed'); - }); - - // Act - const { getBundledOpenCodeVersion } = await import('@main/opencode/cli-path'); - const result = getBundledOpenCodeVersion(); - - // Assert - expect(result).toBeNull(); - }); - }); - }); - - describe('NVM Path Scanning', () => { - it('should scan multiple nvm versions and return first found', async () => { - // Arrange - mockApp.isPackaged = false; - const nvmVersionsDir = '/Users/testuser/.nvm/versions/node'; - const v18Path = path.join(nvmVersionsDir, 'v18.17.0', 'bin', 'opencode'); - const v20Path = path.join(nvmVersionsDir, 'v20.10.0', 'bin', 'opencode'); - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === nvmVersionsDir) return true; - if (p === v20Path) return true; - if (p === v18Path) return false; - return false; - }); - mockFs.readdirSync.mockImplementation((p: string) => { - if (p === nvmVersionsDir) return ['v18.17.0', 'v20.10.0']; - return []; - }); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - expect(result.command).toBe(v20Path); - }); - - it('should handle missing nvm directory gracefully', async () => { - // Arrange - mockApp.isPackaged = false; - process.env.HOME = '/Users/testuser'; - - mockFs.existsSync.mockReturnValue(false); - mockFs.readdirSync.mockReturnValue([]); - - // Act - const { getOpenCodeCliPath } = await import('@main/opencode/cli-path'); - const result = getOpenCodeCliPath(); - - // Assert - should fallback to opencode on PATH - expect(result.command).toBe('opencode'); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/config-generator.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/config-generator.integration.test.ts deleted file mode 100644 index e6636410e..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/opencode/config-generator.integration.test.ts +++ /dev/null @@ -1,332 +0,0 @@ -/** - * Integration tests for OpenCode config generator - * - * Tests the config-generator module which creates OpenCode configuration files - * with MCP servers, agent definitions, and system prompts. - * - * NOTE: This is a TRUE integration test. - * - Uses REAL filesystem operations with temp directories - * - Only mocks external dependencies (electron APIs) - * - * Mocked external services: - * - electron.app: Native Electron APIs (getPath, getAppPath, isPackaged) - * - * Real implementations used: - * - fs: Real filesystem operations in temp directories - * - path: Real path operations - * - * @module __tests__/integration/main/opencode/config-generator.integration.test - */ - -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; -import path from 'path'; -import fs from 'fs'; -import os from 'os'; - -// Create temp directories for each test -let tempUserDataDir: string; -let tempAppDir: string; - -// Mock only the external electron module -const mockApp = { - isPackaged: false, - getAppPath: vi.fn(() => tempAppDir), - getPath: vi.fn((name: string) => { - if (name === 'userData') return tempUserDataDir; - return path.join(tempUserDataDir, name); - }), -}; - -vi.mock('electron', () => ({ - app: mockApp, -})); - -// Mock permission-api module (internal but exports constants we need) -vi.mock('@main/permission-api', () => ({ - PERMISSION_API_PORT: 9999, - QUESTION_API_PORT: 9227, -})); - -describe('OpenCode Config Generator Integration', () => { - let originalEnv: NodeJS.ProcessEnv; - - beforeEach(() => { - vi.clearAllMocks(); - vi.resetModules(); - originalEnv = { ...process.env }; - mockApp.isPackaged = false; - - // Create real temp directories for each test - tempUserDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'opencode-config-test-userData-')); - tempAppDir = fs.mkdtempSync(path.join(os.tmpdir(), 'opencode-config-test-app-')); - - // Create skills directory structure in temp app dir - const skillsDir = path.join(tempAppDir, 'skills'); - fs.mkdirSync(skillsDir, { recursive: true }); - fs.mkdirSync(path.join(skillsDir, 'file-permission', 'src'), { recursive: true }); - fs.writeFileSync(path.join(skillsDir, 'file-permission', 'src', 'index.ts'), '// mock file'); - - // Update mock to use temp directories - mockApp.getAppPath.mockReturnValue(tempAppDir); - mockApp.getPath.mockImplementation((name: string) => { - if (name === 'userData') return tempUserDataDir; - return path.join(tempUserDataDir, name); - }); - }); - - afterEach(() => { - vi.restoreAllMocks(); - process.env = originalEnv; - - // Clean up temp directories - try { - fs.rmSync(tempUserDataDir, { recursive: true, force: true }); - fs.rmSync(tempAppDir, { recursive: true, force: true }); - } catch { - // Ignore cleanup errors - } - }); - - describe('getSkillsPath()', () => { - describe('Development Mode', () => { - it('should return skills path relative to app path in dev mode', async () => { - // Arrange - mockApp.isPackaged = false; - - // Act - const { getSkillsPath } = await import('@main/opencode/config-generator'); - const result = getSkillsPath(); - - // Assert - expect(result).toBe(path.join(tempAppDir, 'skills')); - }); - }); - - describe('Packaged Mode', () => { - it('should return skills path in resources folder when packaged', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = path.join(tempAppDir, 'Resources'); - fs.mkdirSync(resourcesPath, { recursive: true }); - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - // Act - const { getSkillsPath } = await import('@main/opencode/config-generator'); - const result = getSkillsPath(); - - // Assert - expect(result).toBe(path.join(resourcesPath, 'skills')); - }); - }); - }); - - describe('generateOpenCodeConfig()', () => { - it('should create config directory if it does not exist', async () => { - // Arrange - config dir does not exist initially - - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - await generateOpenCodeConfig(); - - // Assert - verify directory was created using real fs - const configDir = path.join(tempUserDataDir, 'opencode'); - expect(fs.existsSync(configDir)).toBe(true); - }); - - it('should not recreate directory if it already exists', async () => { - // Arrange - create config dir beforehand - const configDir = path.join(tempUserDataDir, 'opencode'); - fs.mkdirSync(configDir, { recursive: true }); - const statBefore = fs.statSync(configDir); - - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - await generateOpenCodeConfig(); - - // Assert - directory still exists, no error - expect(fs.existsSync(configDir)).toBe(true); - }); - - it('should write config file with correct structure', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - read the real file - expect(fs.existsSync(configPath)).toBe(true); - const configContent = fs.readFileSync(configPath, 'utf-8'); - const config = JSON.parse(configContent); - - expect(config.$schema).toBe('https://opencode.ai/config.json'); - expect(config.default_agent).toBe('accomplish'); - expect(config.permission).toBe('allow'); - expect(config.enabled_providers).toContain('anthropic'); - expect(config.enabled_providers).toContain('openai'); - expect(config.enabled_providers).toContain('google'); - }); - - it('should include accomplish agent configuration', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); - const agent = config.agent['accomplish']; - - expect(agent).toBeDefined(); - expect(agent.description).toBe('Browser automation assistant using dev-browser'); - expect(agent.mode).toBe('primary'); - expect(typeof agent.prompt).toBe('string'); - expect(agent.prompt.length).toBeGreaterThan(0); - }); - - it('should include MCP server configuration for file-permission', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); - const filePermission = config.mcp['file-permission']; - - expect(filePermission).toBeDefined(); - expect(filePermission.type).toBe('local'); - expect(filePermission.enabled).toBe(true); - expect(filePermission.command[0]).toBe('npx'); - expect(filePermission.command[1]).toBe('tsx'); - expect(filePermission.environment.PERMISSION_API_PORT).toBe('9999'); - }); - - it('should inject skills path into system prompt', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); - const prompt = config.agent['accomplish'].prompt; - const skillsPath = path.join(tempAppDir, 'skills'); - - // Prompt should contain the actual skills path, not the template placeholder - expect(prompt).toContain(skillsPath); - expect(prompt).not.toContain('{{SKILLS_PATH}}'); - }); - - it('should set OPENCODE_CONFIG environment variable after generation', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - expect(process.env.OPENCODE_CONFIG).toBe(configPath); - expect(configPath).toBe(path.join(tempUserDataDir, 'opencode', 'opencode.json')); - }); - - it('should return the config file path', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const result = await generateOpenCodeConfig(); - - // Assert - expect(result).toBe(path.join(tempUserDataDir, 'opencode', 'opencode.json')); - expect(fs.existsSync(result)).toBe(true); - }); - }); - - describe('getOpenCodeConfigPath()', () => { - it('should return config path in userData directory', async () => { - // Act - const { getOpenCodeConfigPath } = await import('@main/opencode/config-generator'); - const result = getOpenCodeConfigPath(); - - // Assert - expect(result).toBe(path.join(tempUserDataDir, 'opencode', 'opencode.json')); - }); - }); - - describe('System Prompt Content', () => { - it('should include browser automation guidance', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); - const prompt = config.agent['accomplish'].prompt; - - expect(prompt).toContain('browser'); - expect(prompt.toLowerCase()).toContain('playwright'); - }); - - it('should include file permission rules', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); - const prompt = config.agent['accomplish'].prompt; - - expect(prompt).toContain('FILE PERMISSION WORKFLOW'); - expect(prompt).toContain('request_file_permission'); - }); - - it('should include user communication guidance', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); - const prompt = config.agent['accomplish'].prompt; - - expect(prompt).toContain('user-communication'); - expect(prompt).toContain('AskUserQuestion'); - }); - }); - - describe('ACCOMPLISH_AGENT_NAME Export', () => { - it('should export the agent name constant', async () => { - // Act - const { ACCOMPLISH_AGENT_NAME } = await import('@main/opencode/config-generator'); - - // Assert - expect(ACCOMPLISH_AGENT_NAME).toBe('accomplish'); - }); - }); - - describe('Config File Persistence', () => { - it('should overwrite existing config file on regeneration', async () => { - // Arrange - generate config first time - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const firstPath = await generateOpenCodeConfig(); - const firstContent = fs.readFileSync(firstPath, 'utf-8'); - - // Reset modules to re-run generator - vi.resetModules(); - - // Act - generate again - const { generateOpenCodeConfig: regenerate } = await import('@main/opencode/config-generator'); - const secondPath = await regenerate(); - const secondContent = fs.readFileSync(secondPath, 'utf-8'); - - // Assert - same path, same content structure - expect(firstPath).toBe(secondPath); - expect(JSON.parse(firstContent).$schema).toBe(JSON.parse(secondContent).$schema); - }); - - it('should create valid JSON that can be parsed', async () => { - // Act - const { generateOpenCodeConfig } = await import('@main/opencode/config-generator'); - const configPath = await generateOpenCodeConfig(); - - // Assert - should not throw when parsing - const content = fs.readFileSync(configPath, 'utf-8'); - expect(() => JSON.parse(content)).not.toThrow(); - - // Should be pretty-printed (contains newlines) - expect(content).toContain('\n'); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/permission-api.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/permission-api.integration.test.ts deleted file mode 100644 index f78a0355d..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/permission-api.integration.test.ts +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Integration tests for Permission API - * - * Tests the REAL exported functions from permission-api module: - * - isFilePermissionRequest() - checks if request ID is a file permission - * - resolvePermission() - resolves a pending permission request - * - initPermissionApi() - initializes the API with window and task getter - * - startPermissionApiServer() - starts the HTTP server - * - PERMISSION_API_PORT - the port constant - * - * These tests mock only electron (external dependency) and test the real - * module behavior. - */ - -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; - -// Mock electron before importing the module -vi.mock('electron', () => ({ - BrowserWindow: { - fromWebContents: vi.fn(), - getFocusedWindow: vi.fn(), - getAllWindows: vi.fn(() => []), - }, - app: { - isPackaged: false, - getPath: vi.fn(() => '/tmp/test-app'), - }, -})); - -// Import the REAL module functions after mocking electron -import { - isFilePermissionRequest, - resolvePermission, - initPermissionApi, - startPermissionApiServer, - PERMISSION_API_PORT, -} from '@main/permission-api'; - -describe('Permission API Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - afterEach(() => { - vi.clearAllMocks(); - }); - - describe('isFilePermissionRequest', () => { - it('should return true for IDs starting with filereq_', () => { - expect(isFilePermissionRequest('filereq_123')).toBe(true); - expect(isFilePermissionRequest('filereq_abc_def')).toBe(true); - expect(isFilePermissionRequest('filereq_1234567890_abcdefghi')).toBe(true); - expect(isFilePermissionRequest('filereq_')).toBe(true); - }); - - it('should return false for IDs not starting with filereq_', () => { - expect(isFilePermissionRequest('req_123')).toBe(false); - expect(isFilePermissionRequest('permission_abc')).toBe(false); - expect(isFilePermissionRequest('file_req_123')).toBe(false); - expect(isFilePermissionRequest('FILEREQ_123')).toBe(false); // case sensitive - expect(isFilePermissionRequest('')).toBe(false); - expect(isFilePermissionRequest('filereq')).toBe(false); // missing underscore - expect(isFilePermissionRequest('_filereq_123')).toBe(false); - }); - }); - - describe('resolvePermission', () => { - it('should return false for non-existent request ID', () => { - // The real function returns false when the request is not in pending - expect(resolvePermission('filereq_nonexistent', true)).toBe(false); - expect(resolvePermission('filereq_notpending', false)).toBe(false); - }); - - it('should return false when called multiple times with same ID', () => { - const requestId = 'filereq_double_resolve'; - // First call returns false (not pending) - expect(resolvePermission(requestId, true)).toBe(false); - // Second call also returns false (still not pending) - expect(resolvePermission(requestId, false)).toBe(false); - }); - }); - - describe('PERMISSION_API_PORT', () => { - it('should be exported with correct value', () => { - expect(PERMISSION_API_PORT).toBe(9226); - }); - }); - - describe('initPermissionApi', () => { - it('should accept window and task getter without throwing', () => { - const mockWindow = { - isDestroyed: () => false, - webContents: { - send: vi.fn(), - isDestroyed: () => false, - }, - } as unknown as import('electron').BrowserWindow; - const mockTaskGetter = () => 'task_123'; - - expect(() => initPermissionApi(mockWindow, mockTaskGetter)).not.toThrow(); - }); - - it('should be a function', () => { - expect(typeof initPermissionApi).toBe('function'); - }); - }); - - describe('startPermissionApiServer', () => { - it('should be a function', () => { - expect(typeof startPermissionApiServer).toBe('function'); - }); - - it('should return an HTTP server when called', () => { - const server = startPermissionApiServer(); - expect(server).toBeDefined(); - // Clean up - close the server - server?.close(); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/secureStorage.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/secureStorage.integration.test.ts deleted file mode 100644 index c5d57ce6c..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/secureStorage.integration.test.ts +++ /dev/null @@ -1,519 +0,0 @@ -/** - * Integration tests for secureStorage module - * Tests real electron-store interactions with encrypted API key storage - * @module __tests__/integration/main/secureStorage.integration.test - */ - -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as os from 'os'; - -// Create a unique temp directory for each test run -let tempDir: string; -let originalCwd: string; - -// Use a factory function that closes over tempDir -const getTempDir = () => tempDir; - -// Mock electron module to control userData path -vi.mock('electron', () => ({ - app: { - getPath: (name: string) => { - if (name === 'userData') { - return getTempDir(); - } - return `/mock/path/${name}`; - }, - getVersion: () => '0.1.0', - getName: () => 'Accomplish', - isPackaged: false, - }, -})); - -describe('secureStorage Integration', () => { - beforeEach(async () => { - // Create a unique temp directory for each test - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'secureStorage-test-')); - originalCwd = process.cwd(); - - // Reset module cache to get fresh store instances - vi.resetModules(); - }); - - afterEach(async () => { - // Clear secure storage - try { - const { clearSecureStorage } = await import('@main/store/secureStorage'); - clearSecureStorage(); - } catch { - // Module may not be loaded - } - - // Clean up temp directory - if (tempDir && fs.existsSync(tempDir)) { - fs.rmSync(tempDir, { recursive: true, force: true }); - } - process.chdir(originalCwd); - }); - - describe('storeApiKey and getApiKey', () => { - it('should store and retrieve an API key', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - const testKey = 'sk-test-anthropic-key-12345'; - - // Act - storeApiKey('anthropic', testKey); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe(testKey); - }); - - it('should return null for non-existent provider', async () => { - // Arrange - const { getApiKey } = await import('@main/store/secureStorage'); - - // Act - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBeNull(); - }); - - it('should encrypt the API key in storage', async () => { - // Arrange - const { storeApiKey } = await import('@main/store/secureStorage'); - const testKey = 'sk-test-visible-key'; - - // Act - storeApiKey('anthropic', testKey); - - // Assert - check that the raw file does not contain the key in plain text - const files = fs.readdirSync(tempDir); - const storeFile = files.find(f => f.includes('secure-storage')); - if (storeFile) { - const content = fs.readFileSync(path.join(tempDir, storeFile), 'utf-8'); - expect(content).not.toContain(testKey); - } - }); - - it('should overwrite existing key for same provider', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - const firstKey = 'sk-first-key'; - const secondKey = 'sk-second-key'; - - // Act - storeApiKey('anthropic', firstKey); - storeApiKey('anthropic', secondKey); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe(secondKey); - }); - - it('should handle special characters in API key', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - const testKey = 'sk-test_key+with/special=chars!@#$%^&*()'; - - // Act - storeApiKey('anthropic', testKey); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe(testKey); - }); - - it('should handle very long API keys', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - const testKey = 'sk-' + 'a'.repeat(500); - - // Act - storeApiKey('anthropic', testKey); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe(testKey); - }); - - it('should handle empty string as API key', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - - // Act - storeApiKey('anthropic', ''); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe(''); - }); - }); - - describe('multiple providers', () => { - it('should store API keys for different providers independently', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - - // Act - storeApiKey('anthropic', 'anthropic-key-123'); - storeApiKey('openai', 'openai-key-456'); - storeApiKey('google', 'google-key-789'); - storeApiKey('custom', 'custom-key-xyz'); - - // Assert - expect(getApiKey('anthropic')).toBe('anthropic-key-123'); - expect(getApiKey('openai')).toBe('openai-key-456'); - expect(getApiKey('google')).toBe('google-key-789'); - expect(getApiKey('custom')).toBe('custom-key-xyz'); - }); - - it('should not affect other providers when updating one', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'anthropic-original'); - storeApiKey('openai', 'openai-original'); - - // Act - storeApiKey('anthropic', 'anthropic-updated'); - - // Assert - expect(getApiKey('anthropic')).toBe('anthropic-updated'); - expect(getApiKey('openai')).toBe('openai-original'); - }); - }); - - describe('deleteApiKey', () => { - it('should remove only the target provider key', async () => { - // Arrange - const { storeApiKey, getApiKey, deleteApiKey } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'anthropic-key'); - storeApiKey('openai', 'openai-key'); - - // Act - const deleted = deleteApiKey('anthropic'); - - // Assert - expect(deleted).toBe(true); - expect(getApiKey('anthropic')).toBeNull(); - expect(getApiKey('openai')).toBe('openai-key'); - }); - - it('should return false when deleting non-existent key', async () => { - // Arrange - const { deleteApiKey } = await import('@main/store/secureStorage'); - - // Act - const result = deleteApiKey('anthropic'); - - // Assert - expect(result).toBe(false); - }); - - it('should allow re-storing after deletion', async () => { - // Arrange - const { storeApiKey, getApiKey, deleteApiKey } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'original-key'); - deleteApiKey('anthropic'); - - // Act - storeApiKey('anthropic', 'new-key'); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe('new-key'); - }); - }); - - describe('getAllApiKeys', () => { - it('should return all null for empty store', async () => { - // Arrange - const { getAllApiKeys } = await import('@main/store/secureStorage'); - - // Act - const result = await getAllApiKeys(); - - // Assert - expect(result).toEqual({ - anthropic: null, - openai: null, - google: null, - xai: null, - deepseek: null, - zai: null, - openrouter: null, - bedrock: null, - litellm: null, - custom: null, - }); - }); - - it('should return all stored API keys', async () => { - // Arrange - const { storeApiKey, getAllApiKeys } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'anthropic-key'); - storeApiKey('openai', 'openai-key'); - storeApiKey('google', 'google-key'); - - // Act - const result = await getAllApiKeys(); - - // Assert - expect(result.anthropic).toBe('anthropic-key'); - expect(result.openai).toBe('openai-key'); - expect(result.google).toBe('google-key'); - expect(result.custom).toBeNull(); - }); - - it('should return partial results when some providers are set', async () => { - // Arrange - const { storeApiKey, getAllApiKeys } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'anthropic-key'); - storeApiKey('custom', 'custom-key'); - - // Act - const result = await getAllApiKeys(); - - // Assert - expect(result.anthropic).toBe('anthropic-key'); - expect(result.openai).toBeNull(); - expect(result.google).toBeNull(); - expect(result.custom).toBe('custom-key'); - }); - }); - - describe('hasAnyApiKey', () => { - it('should return false when no keys are stored', async () => { - // Arrange - const { hasAnyApiKey } = await import('@main/store/secureStorage'); - - // Act - const result = await hasAnyApiKey(); - - // Assert - expect(result).toBe(false); - }); - - it('should return true when at least one key is stored', async () => { - // Arrange - const { storeApiKey, hasAnyApiKey } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'test-key'); - - // Act - const result = await hasAnyApiKey(); - - // Assert - expect(result).toBe(true); - }); - - it('should return true when multiple keys are stored', async () => { - // Arrange - const { storeApiKey, hasAnyApiKey } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'anthropic-key'); - storeApiKey('openai', 'openai-key'); - - // Act - const result = await hasAnyApiKey(); - - // Assert - expect(result).toBe(true); - }); - - it('should return false after all keys are deleted', async () => { - // Arrange - const { storeApiKey, deleteApiKey, hasAnyApiKey } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'test-key'); - deleteApiKey('anthropic'); - - // Act - const result = await hasAnyApiKey(); - - // Assert - expect(result).toBe(false); - }); - }); - - describe('clearSecureStorage', () => { - it('should remove all stored API keys', async () => { - // Arrange - const { storeApiKey, getAllApiKeys, clearSecureStorage } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'anthropic-key'); - storeApiKey('openai', 'openai-key'); - storeApiKey('google', 'google-key'); - - // Act - clearSecureStorage(); - const result = await getAllApiKeys(); - - // Assert - expect(result).toEqual({ - anthropic: null, - openai: null, - google: null, - xai: null, - deepseek: null, - zai: null, - openrouter: null, - bedrock: null, - litellm: null, - custom: null, - }); - }); - - it('should allow storing new keys after clear', async () => { - // Arrange - const { storeApiKey, getApiKey, clearSecureStorage } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'old-key'); - clearSecureStorage(); - - // Act - storeApiKey('anthropic', 'new-key'); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe('new-key'); - }); - - it('should reset salt and derived key', async () => { - // Arrange - const { storeApiKey, getApiKey, clearSecureStorage } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'test-key-1'); - - // Act - clearSecureStorage(); - storeApiKey('anthropic', 'test-key-2'); - const result = getApiKey('anthropic'); - - // Assert - key should be retrievable with new encryption - expect(result).toBe('test-key-2'); - }); - }); - - describe('listStoredCredentials', () => { - it('should return empty array when no credentials stored', async () => { - // Arrange - const { listStoredCredentials } = await import('@main/store/secureStorage'); - - // Act - const result = listStoredCredentials(); - - // Assert - expect(result).toEqual([]); - }); - - it('should return all stored credentials with decrypted values', async () => { - // Arrange - const { storeApiKey, listStoredCredentials } = await import('@main/store/secureStorage'); - storeApiKey('anthropic', 'anthropic-key-123'); - storeApiKey('openai', 'openai-key-456'); - - // Act - const result = listStoredCredentials(); - - // Assert - expect(result).toHaveLength(2); - expect(result).toContainEqual({ account: 'apiKey:anthropic', password: 'anthropic-key-123' }); - expect(result).toContainEqual({ account: 'apiKey:openai', password: 'openai-key-456' }); - }); - }); - - describe('encryption consistency', () => { - it('should decrypt values correctly after module reload', async () => { - // Arrange - store key in first module instance - const module1 = await import('@main/store/secureStorage'); - module1.storeApiKey('anthropic', 'persistent-key-123'); - - // Act - reset modules and reimport - vi.resetModules(); - const module2 = await import('@main/store/secureStorage'); - const result = module2.getApiKey('anthropic'); - - // Assert - expect(result).toBe('persistent-key-123'); - }); - - it('should maintain encryption across multiple store/retrieve cycles', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - - // Act - multiple cycles - for (let i = 0; i < 5; i++) { - const key = `test-key-cycle-${i}`; - storeApiKey('anthropic', key); - const result = getApiKey('anthropic'); - expect(result).toBe(key); - } - }); - - it('should use unique IV for each encryption', async () => { - // This test verifies that the same plaintext produces different ciphertext - // due to random IV generation by storing the same value twice - // and confirming decryption works for both - const { storeApiKey, getApiKey, clearSecureStorage } = await import('@main/store/secureStorage'); - - // Store the same plaintext for two different providers - storeApiKey('anthropic', 'same-key-value'); - storeApiKey('openai', 'same-key-value'); - - // Both should decrypt correctly (proving unique IVs didn't break anything) - const anthropicKey = getApiKey('anthropic'); - const openaiKey = getApiKey('openai'); - - expect(anthropicKey).toBe('same-key-value'); - expect(openaiKey).toBe('same-key-value'); - - // If the IVs were the same, we'd have potential security issues, - // but since this is an integration test, we verify the functionality works. - // The encryption implementation uses crypto.randomBytes for IV generation. - }); - }); - - describe('edge cases', () => { - it('should handle unicode characters in API key', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - const unicodeKey = 'sk-test-key-with-unicode-chars'; - - // Act - storeApiKey('anthropic', unicodeKey); - const result = getApiKey('anthropic'); - - // Assert - expect(result).toBe(unicodeKey); - }); - - it('should handle rapid successive stores', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - - // Act - rapid stores - for (let i = 0; i < 10; i++) { - storeApiKey('anthropic', `key-${i}`); - } - const result = getApiKey('anthropic'); - - // Assert - should have the last stored value - expect(result).toBe('key-9'); - }); - - it('should handle concurrent operations on different providers', async () => { - // Arrange - const { storeApiKey, getApiKey } = await import('@main/store/secureStorage'); - - // Act - interleaved operations - storeApiKey('anthropic', 'a1'); - storeApiKey('openai', 'o1'); - storeApiKey('anthropic', 'a2'); - storeApiKey('google', 'g1'); - storeApiKey('openai', 'o2'); - - // Assert - expect(getApiKey('anthropic')).toBe('a2'); - expect(getApiKey('openai')).toBe('o2'); - expect(getApiKey('google')).toBe('g1'); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/store/freshInstallCleanup.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/store/freshInstallCleanup.integration.test.ts deleted file mode 100644 index ed93e9a3d..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/store/freshInstallCleanup.integration.test.ts +++ /dev/null @@ -1,244 +0,0 @@ -/** - * Integration tests for Fresh Install Cleanup - * - * Tests the REAL checkAndCleanupFreshInstall function: - * - Returns false in dev mode (app.isPackaged = false) - * - Returns false when bundle mtime cannot be determined - * - * These tests mock external dependencies (electron, fs, store modules) - * and verify the actual module behavior. - */ - -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; - -// Use vi.hoisted() to ensure mock functions are available when vi.mock is hoisted -const { - mockExistsSync, - mockReadFileSync, - mockWriteFileSync, - mockStatSync, - mockMkdirSync, - mockUnlinkSync, - mockGetPath, - mockGetVersion, - mockClearAppSettings, - mockClearTaskHistoryStore, - mockClearSecureStorage, -} = vi.hoisted(() => ({ - mockExistsSync: vi.fn(), - mockReadFileSync: vi.fn(), - mockWriteFileSync: vi.fn(), - mockStatSync: vi.fn(), - mockMkdirSync: vi.fn(), - mockUnlinkSync: vi.fn(), - mockGetPath: vi.fn(), - mockGetVersion: vi.fn(), - mockClearAppSettings: vi.fn(), - mockClearTaskHistoryStore: vi.fn(), - mockClearSecureStorage: vi.fn(), -})); - -// Mock fs module -vi.mock('fs', () => ({ - default: { - existsSync: mockExistsSync, - readFileSync: mockReadFileSync, - writeFileSync: mockWriteFileSync, - statSync: mockStatSync, - mkdirSync: mockMkdirSync, - unlinkSync: mockUnlinkSync, - }, - existsSync: mockExistsSync, - readFileSync: mockReadFileSync, - writeFileSync: mockWriteFileSync, - statSync: mockStatSync, - mkdirSync: mockMkdirSync, - unlinkSync: mockUnlinkSync, -})); - -// Mock electron app - isPackaged starts as false (dev mode) -vi.mock('electron', () => ({ - app: { - isPackaged: false, - getPath: mockGetPath, - getVersion: mockGetVersion, - }, -})); - -// Mock store modules -vi.mock('@main/store/appSettings', () => ({ - clearAppSettings: mockClearAppSettings, -})); - -vi.mock('@main/store/taskHistory', () => ({ - clearTaskHistoryStore: mockClearTaskHistoryStore, -})); - -vi.mock('@main/store/secureStorage', () => ({ - clearSecureStorage: mockClearSecureStorage, -})); - -// Import the REAL module function after mocking dependencies -import { checkAndCleanupFreshInstall } from '@main/store/freshInstallCleanup'; -import { app } from 'electron'; - -describe('Fresh Install Cleanup Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset to dev mode by default - (app as unknown as { isPackaged: boolean }).isPackaged = false; - // Setup default path mocks - mockGetPath.mockImplementation((name: string) => { - const paths: Record = { - userData: '/tmp/test-app/userData', - appData: '/tmp/test-app/appData', - exe: '/Applications/Accomplish.app/Contents/MacOS/Accomplish', - }; - return paths[name] || '/tmp/test-app'; - }); - mockGetVersion.mockReturnValue('1.0.0'); - }); - - afterEach(() => { - vi.clearAllMocks(); - // Reset to dev mode - (app as unknown as { isPackaged: boolean }).isPackaged = false; - }); - - describe('checkAndCleanupFreshInstall', () => { - it('should return false in dev mode (app.isPackaged = false)', async () => { - // Arrange - dev mode is the default in beforeEach - expect(app.isPackaged).toBe(false); - - // Act - call the REAL function - const result = await checkAndCleanupFreshInstall(); - - // Assert - expect(result).toBe(false); - // Should not call any cleanup functions in dev mode - expect(mockClearAppSettings).not.toHaveBeenCalled(); - expect(mockClearTaskHistoryStore).not.toHaveBeenCalled(); - expect(mockClearSecureStorage).not.toHaveBeenCalled(); - }); - - it('should return false when exe path does not contain .app bundle', async () => { - // Arrange - set to packaged mode but with non-.app exe path - (app as unknown as { isPackaged: boolean }).isPackaged = true; - mockGetPath.mockImplementation((name: string) => { - if (name === 'exe') return '/usr/local/bin/accomplish'; // No .app in path - return '/tmp/test-app/userData'; - }); - - // Act - const result = await checkAndCleanupFreshInstall(); - - // Assert - expect(result).toBe(false); - }); - - it('should return false when bundle stat fails', async () => { - // Arrange - set to packaged mode with valid .app path but stat fails - (app as unknown as { isPackaged: boolean }).isPackaged = true; - mockStatSync.mockImplementation(() => { - throw new Error('ENOENT: no such file or directory'); - }); - - // Act - const result = await checkAndCleanupFreshInstall(); - - // Assert - expect(result).toBe(false); - }); - - it('should return false on first install (no existing data)', async () => { - // Arrange - packaged mode, valid bundle, but no existing data - (app as unknown as { isPackaged: boolean }).isPackaged = true; - const currentMtime = new Date('2024-06-01T00:00:00.000Z'); - mockStatSync.mockReturnValue({ mtime: currentMtime }); - mockExistsSync.mockReturnValue(false); // No existing marker or data - - // Act - const result = await checkAndCleanupFreshInstall(); - - // Assert - first install creates marker but doesn't cleanup (returns false) - expect(result).toBe(false); - // Should write the marker file - expect(mockWriteFileSync).toHaveBeenCalled(); - }); - - it('should return false when marker matches current bundle', async () => { - // Arrange - packaged mode, marker exists and matches - (app as unknown as { isPackaged: boolean }).isPackaged = true; - const currentMtime = new Date('2024-06-01T00:00:00.000Z'); - mockStatSync.mockReturnValue({ mtime: currentMtime }); - - const existingMarker = { - bundleMtime: currentMtime.toISOString(), - version: '1.0.0', - markerCreated: '2024-06-01T00:00:00.000Z', - }; - - mockExistsSync.mockImplementation((path: string) => { - return path.includes('.install-marker.json'); - }); - mockReadFileSync.mockReturnValue(JSON.stringify(existingMarker)); - - // Act - const result = await checkAndCleanupFreshInstall(); - - // Assert - no cleanup needed - expect(result).toBe(false); - expect(mockClearAppSettings).not.toHaveBeenCalled(); - }); - - it('should return true and cleanup when bundle mtime differs from marker', async () => { - // Arrange - packaged mode, marker exists but bundle changed - (app as unknown as { isPackaged: boolean }).isPackaged = true; - const currentMtime = new Date('2024-07-01T00:00:00.000Z'); // New version - mockStatSync.mockReturnValue({ mtime: currentMtime }); - - const existingMarker = { - bundleMtime: '2024-06-01T00:00:00.000Z', // Old version - version: '1.0.0', - markerCreated: '2024-06-01T00:00:00.000Z', - }; - - mockExistsSync.mockImplementation((path: string) => { - return path.includes('.install-marker.json'); - }); - mockReadFileSync.mockReturnValue(JSON.stringify(existingMarker)); - - // Act - const result = await checkAndCleanupFreshInstall(); - - // Assert - cleanup was performed - expect(result).toBe(true); - expect(mockClearAppSettings).toHaveBeenCalled(); - expect(mockClearTaskHistoryStore).toHaveBeenCalled(); - expect(mockClearSecureStorage).toHaveBeenCalled(); - }); - - it('should return true and cleanup on reinstall (existing data but no marker)', async () => { - // Arrange - packaged mode, no marker but has existing settings file - (app as unknown as { isPackaged: boolean }).isPackaged = true; - const currentMtime = new Date('2024-06-01T00:00:00.000Z'); - mockStatSync.mockReturnValue({ mtime: currentMtime }); - - // No marker, but app-settings.json exists - mockExistsSync.mockImplementation((path: string) => { - if (path.includes('.install-marker.json')) return false; - if (path.includes('app-settings.json')) return true; - return false; - }); - - // Act - const result = await checkAndCleanupFreshInstall(); - - // Assert - cleanup was performed (reinstall scenario) - expect(result).toBe(true); - expect(mockClearAppSettings).toHaveBeenCalled(); - expect(mockClearTaskHistoryStore).toHaveBeenCalled(); - expect(mockClearSecureStorage).toHaveBeenCalled(); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/taskHistory.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/taskHistory.integration.test.ts deleted file mode 100644 index 28e364870..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/taskHistory.integration.test.ts +++ /dev/null @@ -1,625 +0,0 @@ -/** - * Integration tests for taskHistory store - * Tests real electron-store interactions with task persistence - * @module __tests__/integration/main/taskHistory.integration.test - */ - -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as os from 'os'; -import type { Task, TaskMessage } from '@accomplish/shared'; - -// Create a unique temp directory for each test run -let tempDir: string; -let originalCwd: string; - -// Use a factory function that closes over tempDir -const getTempDir = () => tempDir; - -// Mock electron module to control userData path -vi.mock('electron', () => ({ - app: { - getPath: (name: string) => { - if (name === 'userData') { - return getTempDir(); - } - return `/mock/path/${name}`; - }, - getVersion: () => '0.1.0', - getName: () => 'Accomplish', - isPackaged: false, - }, -})); - -// Helper to create a mock task -function createMockTask(id: string, prompt: string = 'Test task'): Task { - return { - id, - prompt, - status: 'pending', - messages: [], - createdAt: new Date().toISOString(), - }; -} - -// Helper to create a mock message -function createMockMessage( - id: string, - type: 'assistant' | 'user' | 'tool' | 'system' = 'assistant', - content: string = 'Test message' -): TaskMessage { - return { - id, - type, - content, - timestamp: new Date().toISOString(), - }; -} - -describe('taskHistory Integration', () => { - beforeEach(async () => { - // Create a unique temp directory for each test - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'taskHistory-test-')); - originalCwd = process.cwd(); - - // Reset module cache to get fresh electron-store instances - vi.resetModules(); - }); - - afterEach(async () => { - // Flush any pending writes and clear timeouts - try { - const { flushPendingTasks, clearTaskHistoryStore } = await import('@main/store/taskHistory'); - flushPendingTasks(); - clearTaskHistoryStore(); - } catch { - // Module may not be loaded - } - - // Clean up temp directory - if (tempDir && fs.existsSync(tempDir)) { - fs.rmSync(tempDir, { recursive: true, force: true }); - } - process.chdir(originalCwd); - }); - - describe('saveTask and getTask', () => { - it('should save and retrieve a task by ID', async () => { - // Arrange - const { saveTask, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - const task = createMockTask('task-1', 'Save and retrieve test'); - - // Act - saveTask(task); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result).toBeDefined(); - expect(result?.id).toBe('task-1'); - expect(result?.prompt).toBe('Save and retrieve test'); - expect(result?.status).toBe('pending'); - }); - - it('should return undefined for non-existent task', async () => { - // Arrange - const { getTask } = await import('@main/store/taskHistory'); - - // Act - const result = getTask('non-existent'); - - // Assert - expect(result).toBeUndefined(); - }); - - it('should update existing task when saving with same ID', async () => { - // Arrange - const { saveTask, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - const task1 = createMockTask('task-1', 'Original prompt'); - const task2 = { ...createMockTask('task-1', 'Updated prompt'), status: 'running' as const }; - - // Act - saveTask(task1); - flushPendingTasks(); - saveTask(task2); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.prompt).toBe('Updated prompt'); - expect(result?.status).toBe('running'); - }); - - it('should preserve task messages when saving', async () => { - // Arrange - const { saveTask, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - const task: Task = { - ...createMockTask('task-1'), - messages: [ - createMockMessage('msg-1', 'user', 'Hello'), - createMockMessage('msg-2', 'assistant', 'Hi there'), - ], - }; - - // Act - saveTask(task); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.messages).toHaveLength(2); - expect(result?.messages[0].content).toBe('Hello'); - expect(result?.messages[1].content).toBe('Hi there'); - }); - - it('should preserve sessionId when saving', async () => { - // Arrange - const { saveTask, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - const task: Task = { - ...createMockTask('task-1'), - sessionId: 'session-abc-123', - }; - - // Act - saveTask(task); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.sessionId).toBe('session-abc-123'); - }); - }); - - describe('getTasks', () => { - it('should return empty array on fresh store', async () => { - // Arrange - const { getTasks } = await import('@main/store/taskHistory'); - - // Act - const result = getTasks(); - - // Assert - expect(result).toEqual([]); - }); - - it('should return all saved tasks', async () => { - // Arrange - const { saveTask, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1', 'Task 1')); - saveTask(createMockTask('task-2', 'Task 2')); - saveTask(createMockTask('task-3', 'Task 3')); - flushPendingTasks(); - - // Act - const result = getTasks(); - - // Assert - expect(result).toHaveLength(3); - }); - - it('should return tasks in reverse chronological order (newest first)', async () => { - // Arrange - const { saveTask, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1', 'First')); - saveTask(createMockTask('task-2', 'Second')); - saveTask(createMockTask('task-3', 'Third')); - flushPendingTasks(); - - // Act - const result = getTasks(); - - // Assert - newest should be first (tasks are unshifted) - expect(result[0].id).toBe('task-3'); - expect(result[1].id).toBe('task-2'); - expect(result[2].id).toBe('task-1'); - }); - }); - - describe('updateTaskStatus', () => { - it('should update task status without affecting other fields', async () => { - // Arrange - const { saveTask, updateTaskStatus, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - const task: Task = { - ...createMockTask('task-1', 'Status update test'), - messages: [createMockMessage('msg-1')], - sessionId: 'session-123', - }; - saveTask(task); - flushPendingTasks(); - - // Act - updateTaskStatus('task-1', 'completed'); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.status).toBe('completed'); - expect(result?.prompt).toBe('Status update test'); - expect(result?.messages).toHaveLength(1); - expect(result?.sessionId).toBe('session-123'); - }); - - it('should set completedAt when provided', async () => { - // Arrange - const { saveTask, updateTaskStatus, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - flushPendingTasks(); - const completedAt = new Date().toISOString(); - - // Act - updateTaskStatus('task-1', 'completed', completedAt); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.status).toBe('completed'); - expect(result?.completedAt).toBe(completedAt); - }); - - it('should not modify non-existent task', async () => { - // Arrange - const { updateTaskStatus, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - - // Act - updateTaskStatus('non-existent', 'completed'); - flushPendingTasks(); - const result = getTasks(); - - // Assert - expect(result).toHaveLength(0); - }); - - it('should transition through various statuses correctly', async () => { - // Arrange - const { saveTask, updateTaskStatus, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - flushPendingTasks(); - - // Act & Assert - updateTaskStatus('task-1', 'running'); - flushPendingTasks(); - expect(getTask('task-1')?.status).toBe('running'); - - updateTaskStatus('task-1', 'waiting_permission'); - flushPendingTasks(); - expect(getTask('task-1')?.status).toBe('waiting_permission'); - - updateTaskStatus('task-1', 'running'); - flushPendingTasks(); - expect(getTask('task-1')?.status).toBe('running'); - - updateTaskStatus('task-1', 'completed'); - flushPendingTasks(); - expect(getTask('task-1')?.status).toBe('completed'); - }); - }); - - describe('addTaskMessage', () => { - it('should append message to task', async () => { - // Arrange - const { saveTask, addTaskMessage, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - flushPendingTasks(); - const message = createMockMessage('msg-1', 'assistant', 'Hello there'); - - // Act - addTaskMessage('task-1', message); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.messages).toHaveLength(1); - expect(result?.messages[0].content).toBe('Hello there'); - }); - - it('should append multiple messages in order', async () => { - // Arrange - const { saveTask, addTaskMessage, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - flushPendingTasks(); - - // Act - addTaskMessage('task-1', createMockMessage('msg-1', 'user', 'First')); - addTaskMessage('task-1', createMockMessage('msg-2', 'assistant', 'Second')); - addTaskMessage('task-1', createMockMessage('msg-3', 'tool', 'Third')); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.messages).toHaveLength(3); - expect(result?.messages[0].content).toBe('First'); - expect(result?.messages[1].content).toBe('Second'); - expect(result?.messages[2].content).toBe('Third'); - }); - - it('should not modify non-existent task', async () => { - // Arrange - const { addTaskMessage, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - - // Act - addTaskMessage('non-existent', createMockMessage('msg-1')); - flushPendingTasks(); - const result = getTasks(); - - // Assert - expect(result).toHaveLength(0); - }); - - it('should preserve existing messages when adding new ones', async () => { - // Arrange - const { saveTask, addTaskMessage, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - const task: Task = { - ...createMockTask('task-1'), - messages: [createMockMessage('msg-1', 'user', 'Existing')], - }; - saveTask(task); - flushPendingTasks(); - - // Act - addTaskMessage('task-1', createMockMessage('msg-2', 'assistant', 'New')); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.messages).toHaveLength(2); - expect(result?.messages[0].content).toBe('Existing'); - expect(result?.messages[1].content).toBe('New'); - }); - }); - - describe('deleteTask', () => { - it('should remove only the target task', async () => { - // Arrange - const { saveTask, deleteTask, getTasks, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1', 'Keep this')); - saveTask(createMockTask('task-2', 'Delete this')); - saveTask(createMockTask('task-3', 'Keep this too')); - flushPendingTasks(); - - // Act - deleteTask('task-2'); - flushPendingTasks(); - - // Assert - expect(getTasks()).toHaveLength(2); - expect(getTask('task-1')).toBeDefined(); - expect(getTask('task-2')).toBeUndefined(); - expect(getTask('task-3')).toBeDefined(); - }); - - it('should handle deleting non-existent task gracefully', async () => { - // Arrange - const { saveTask, deleteTask, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - flushPendingTasks(); - - // Act - deleteTask('non-existent'); - flushPendingTasks(); - - // Assert - expect(getTasks()).toHaveLength(1); - }); - - it('should allow deleting all tasks one by one', async () => { - // Arrange - const { saveTask, deleteTask, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - saveTask(createMockTask('task-2')); - flushPendingTasks(); - - // Act - deleteTask('task-1'); - deleteTask('task-2'); - flushPendingTasks(); - - // Assert - expect(getTasks()).toHaveLength(0); - }); - }); - - describe('clearHistory', () => { - it('should remove all tasks', async () => { - // Arrange - const { saveTask, clearHistory, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - saveTask(createMockTask('task-2')); - saveTask(createMockTask('task-3')); - flushPendingTasks(); - - // Act - clearHistory(); - flushPendingTasks(); - - // Assert - expect(getTasks()).toHaveLength(0); - }); - - it('should allow saving new tasks after clear', async () => { - // Arrange - const { saveTask, clearHistory, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - flushPendingTasks(); - clearHistory(); - flushPendingTasks(); - - // Act - saveTask(createMockTask('task-new')); - flushPendingTasks(); - - // Assert - expect(getTasks()).toHaveLength(1); - expect(getTasks()[0].id).toBe('task-new'); - }); - }); - - describe('setMaxHistoryItems', () => { - it('should enforce history limit when saving new tasks', async () => { - // Arrange - const { saveTask, setMaxHistoryItems, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - setMaxHistoryItems(3); - - // Act - save more than the limit - saveTask(createMockTask('task-1')); - saveTask(createMockTask('task-2')); - saveTask(createMockTask('task-3')); - saveTask(createMockTask('task-4')); - saveTask(createMockTask('task-5')); - flushPendingTasks(); - - // Assert - should only keep 3 most recent - const tasks = getTasks(); - expect(tasks).toHaveLength(3); - expect(tasks[0].id).toBe('task-5'); - expect(tasks[1].id).toBe('task-4'); - expect(tasks[2].id).toBe('task-3'); - }); - - it('should trim existing history when limit is reduced', async () => { - // Arrange - const { saveTask, setMaxHistoryItems, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - saveTask(createMockTask('task-2')); - saveTask(createMockTask('task-3')); - saveTask(createMockTask('task-4')); - saveTask(createMockTask('task-5')); - flushPendingTasks(); - - // Act - reduce limit - setMaxHistoryItems(2); - flushPendingTasks(); - - // Assert - const tasks = getTasks(); - expect(tasks).toHaveLength(2); - expect(tasks[0].id).toBe('task-5'); - expect(tasks[1].id).toBe('task-4'); - }); - - it('should not affect history when limit is increased', async () => { - // Arrange - const { saveTask, setMaxHistoryItems, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - setMaxHistoryItems(3); - saveTask(createMockTask('task-1')); - saveTask(createMockTask('task-2')); - saveTask(createMockTask('task-3')); - flushPendingTasks(); - - // Act - setMaxHistoryItems(10); - flushPendingTasks(); - - // Assert - expect(getTasks()).toHaveLength(3); - }); - }); - - describe('debounced flush behavior', () => { - it('should batch rapid updates into single write', async () => { - // Arrange - const { saveTask, addTaskMessage, flushPendingTasks, getTask } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - - // Act - rapid updates without flush - addTaskMessage('task-1', createMockMessage('msg-1')); - addTaskMessage('task-1', createMockMessage('msg-2')); - addTaskMessage('task-1', createMockMessage('msg-3')); - - // Force flush - flushPendingTasks(); - - // Assert - const task = getTask('task-1'); - expect(task?.messages).toHaveLength(3); - }); - - it('should flush pending tasks when explicitly called', async () => { - // Arrange - const { saveTask, flushPendingTasks, getTasks } = await import('@main/store/taskHistory'); - - // Act - save without waiting for debounce - saveTask(createMockTask('task-1')); - flushPendingTasks(); - - // Assert - task should be persisted immediately - const tasks = getTasks(); - expect(tasks).toHaveLength(1); - }); - - it('should handle interleaved saves and reads correctly', async () => { - // Arrange - const { saveTask, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - - // Act - saveTask(createMockTask('task-1', 'First')); - const afterFirst = getTask('task-1'); - - saveTask(createMockTask('task-2', 'Second')); - const afterSecond = getTask('task-2'); - - flushPendingTasks(); - - // Assert - both should be readable even before flush - expect(afterFirst?.prompt).toBe('First'); - expect(afterSecond?.prompt).toBe('Second'); - }); - }); - - describe('updateTaskSessionId', () => { - it('should update session ID for existing task', async () => { - // Arrange - const { saveTask, updateTaskSessionId, getTask, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - flushPendingTasks(); - - // Act - updateTaskSessionId('task-1', 'new-session-xyz'); - flushPendingTasks(); - const result = getTask('task-1'); - - // Assert - expect(result?.sessionId).toBe('new-session-xyz'); - }); - - it('should not modify non-existent task', async () => { - // Arrange - const { updateTaskSessionId, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - - // Act - updateTaskSessionId('non-existent', 'session-123'); - flushPendingTasks(); - - // Assert - expect(getTasks()).toHaveLength(0); - }); - }); - - describe('clearTaskHistoryStore', () => { - it('should reset store to defaults', async () => { - // Arrange - const { saveTask, clearTaskHistoryStore, getTasks, flushPendingTasks } = await import('@main/store/taskHistory'); - saveTask(createMockTask('task-1')); - saveTask(createMockTask('task-2')); - flushPendingTasks(); - - // Act - clearTaskHistoryStore(); - - // Assert - expect(getTasks()).toHaveLength(0); - }); - - it('should clear pending writes without persisting them', async () => { - // Arrange - const { saveTask, clearTaskHistoryStore, getTasks } = await import('@main/store/taskHistory'); - - // Act - save without flush, then clear - saveTask(createMockTask('task-1')); - clearTaskHistoryStore(); - - // Assert - pending task should not be persisted - expect(getTasks()).toHaveLength(0); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/bundled-node.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/bundled-node.integration.test.ts deleted file mode 100644 index dd5f44c7b..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/bundled-node.integration.test.ts +++ /dev/null @@ -1,449 +0,0 @@ -/** - * Integration tests for Bundled Node.js utilities - * - * Tests the bundled-node module which provides paths to bundled Node.js - * binaries for packaged Electron apps. - * - * @module __tests__/integration/main/utils/bundled-node.integration.test - */ - -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; -import path from 'path'; - -// Store original values -const originalPlatform = process.platform; -const originalArch = process.arch; - -// Mock electron module -const mockApp = { - isPackaged: false, -}; - -vi.mock('electron', () => ({ - app: mockApp, -})); - -// Mock fs module -const mockFs = { - existsSync: vi.fn(), -}; - -vi.mock('fs', () => ({ - default: mockFs, - existsSync: mockFs.existsSync, -})); - -describe('Bundled Node.js Utilities', () => { - let getBundledNodePaths: typeof import('@main/utils/bundled-node').getBundledNodePaths; - let isBundledNodeAvailable: typeof import('@main/utils/bundled-node').isBundledNodeAvailable; - let getNodePath: typeof import('@main/utils/bundled-node').getNodePath; - let getNpmPath: typeof import('@main/utils/bundled-node').getNpmPath; - let getNpxPath: typeof import('@main/utils/bundled-node').getNpxPath; - let logBundledNodeInfo: typeof import('@main/utils/bundled-node').logBundledNodeInfo; - - beforeEach(async () => { - vi.clearAllMocks(); - vi.resetModules(); - mockApp.isPackaged = false; - - // Re-import module to get fresh state - const module = await import('@main/utils/bundled-node'); - getBundledNodePaths = module.getBundledNodePaths; - isBundledNodeAvailable = module.isBundledNodeAvailable; - getNodePath = module.getNodePath; - getNpmPath = module.getNpmPath; - getNpxPath = module.getNpxPath; - logBundledNodeInfo = module.logBundledNodeInfo; - }); - - afterEach(() => { - vi.restoreAllMocks(); - // Restore platform/arch - Object.defineProperty(process, 'platform', { value: originalPlatform }); - Object.defineProperty(process, 'arch', { value: originalArch }); - }); - - describe('getBundledNodePaths()', () => { - describe('Development Mode', () => { - it('should return null in development mode', () => { - // Arrange - mockApp.isPackaged = false; - - // Act - const result = getBundledNodePaths(); - - // Assert - expect(result).toBeNull(); - }); - }); - - describe('Packaged Mode - macOS (darwin)', () => { - beforeEach(() => { - Object.defineProperty(process, 'platform', { value: 'darwin' }); - }); - - it('should return correct paths for arm64 architecture', async () => { - // Arrange - mockApp.isPackaged = true; - Object.defineProperty(process, 'arch', { value: 'arm64' }); - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - // Re-import to pick up new process values - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - const paths = module.getBundledNodePaths(); - - // Assert - expect(paths).not.toBeNull(); - expect(paths!.nodeDir).toBe(path.join(resourcesPath, 'nodejs', 'arm64')); - expect(paths!.binDir).toBe(path.join(resourcesPath, 'nodejs', 'arm64', 'bin')); - expect(paths!.nodePath).toBe(path.join(resourcesPath, 'nodejs', 'arm64', 'bin', 'node')); - expect(paths!.npmPath).toBe(path.join(resourcesPath, 'nodejs', 'arm64', 'bin', 'npm')); - expect(paths!.npxPath).toBe(path.join(resourcesPath, 'nodejs', 'arm64', 'bin', 'npx')); - }); - - it('should return correct paths for x64 architecture', async () => { - // Arrange - mockApp.isPackaged = true; - Object.defineProperty(process, 'arch', { value: 'x64' }); - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - // Re-import to pick up new process values - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - const paths = module.getBundledNodePaths(); - - // Assert - expect(paths).not.toBeNull(); - expect(paths!.nodeDir).toBe(path.join(resourcesPath, 'nodejs', 'x64')); - expect(paths!.binDir).toBe(path.join(resourcesPath, 'nodejs', 'x64', 'bin')); - }); - }); - - describe('Packaged Mode - Windows (win32)', () => { - it('should return correct paths for Windows', async () => { - // Arrange - mockApp.isPackaged = true; - Object.defineProperty(process, 'platform', { value: 'win32' }); - Object.defineProperty(process, 'arch', { value: 'x64' }); - const resourcesPath = 'C:\\Program Files\\Accomplish\\resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - // Re-import to pick up new process values - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - const paths = module.getBundledNodePaths(); - - // Assert - expect(paths).not.toBeNull(); - expect(paths!.nodeDir).toBe(path.join(resourcesPath, 'nodejs', 'x64')); - // Windows: binDir is same as nodeDir - expect(paths!.binDir).toBe(path.join(resourcesPath, 'nodejs', 'x64')); - expect(paths!.nodePath).toBe(path.join(resourcesPath, 'nodejs', 'x64', 'node.exe')); - expect(paths!.npmPath).toBe(path.join(resourcesPath, 'nodejs', 'x64', 'npm.cmd')); - expect(paths!.npxPath).toBe(path.join(resourcesPath, 'nodejs', 'x64', 'npx.cmd')); - }); - }); - }); - - describe('isBundledNodeAvailable()', () => { - it('should return false in development mode', () => { - // Arrange - mockApp.isPackaged = false; - - // Act - const result = isBundledNodeAvailable(); - - // Assert - expect(result).toBe(false); - }); - - it('should return true when bundled node exists', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(true); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Act - const result = module.isBundledNodeAvailable(); - - // Assert - expect(result).toBe(true); - expect(mockFs.existsSync).toHaveBeenCalled(); - }); - - it('should return false when bundled node does not exist', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(false); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Act - const result = module.isBundledNodeAvailable(); - - // Assert - expect(result).toBe(false); - }); - }); - - describe('getNodePath()', () => { - it('should return "node" in development mode', () => { - // Arrange - mockApp.isPackaged = false; - - // Act - const result = getNodePath(); - - // Assert - expect(result).toBe('node'); - }); - - it('should return bundled node path when available', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(true); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Act - const result = module.getNodePath(); - - // Assert - expect(result).toContain('node'); - expect(result).not.toBe('node'); // Should be full path - }); - - it('should fallback to "node" when bundled not found in packaged app', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(false); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Spy on console.warn - const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); - - // Act - const result = module.getNodePath(); - - // Assert - expect(result).toBe('node'); - expect(warnSpy).toHaveBeenCalledWith( - expect.stringContaining('WARNING: Bundled Node.js not found') - ); - - warnSpy.mockRestore(); - }); - }); - - describe('getNpmPath()', () => { - it('should return "npm" in development mode', () => { - // Arrange - mockApp.isPackaged = false; - - // Act - const result = getNpmPath(); - - // Assert - expect(result).toBe('npm'); - }); - - it('should return bundled npm path when available', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(true); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Act - const result = module.getNpmPath(); - - // Assert - expect(result).toContain('npm'); - expect(result).not.toBe('npm'); // Should be full path - }); - - it('should fallback to "npm" when bundled not found', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(false); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Suppress console.warn - vi.spyOn(console, 'warn').mockImplementation(() => {}); - - // Act - const result = module.getNpmPath(); - - // Assert - expect(result).toBe('npm'); - }); - }); - - describe('getNpxPath()', () => { - it('should return "npx" in development mode', () => { - // Arrange - mockApp.isPackaged = false; - - // Act - const result = getNpxPath(); - - // Assert - expect(result).toBe('npx'); - }); - - it('should return bundled npx path when available', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(true); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Act - const result = module.getNpxPath(); - - // Assert - expect(result).toContain('npx'); - expect(result).not.toBe('npx'); // Should be full path - }); - - it('should fallback to "npx" when bundled not found', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(false); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Suppress console.warn - vi.spyOn(console, 'warn').mockImplementation(() => {}); - - // Act - const result = module.getNpxPath(); - - // Assert - expect(result).toBe('npx'); - }); - }); - - describe('logBundledNodeInfo()', () => { - it('should log development mode message when not packaged', () => { - // Arrange - mockApp.isPackaged = false; - const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {}); - - // Act - logBundledNodeInfo(); - - // Assert - expect(logSpy).toHaveBeenCalledWith( - expect.stringContaining('Development mode') - ); - - logSpy.mockRestore(); - }); - - it('should log bundled node configuration when packaged', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - mockFs.existsSync.mockReturnValue(true); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {}); - - // Act - module.logBundledNodeInfo(); - - // Assert - expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Configuration')); - expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Platform')); - expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Architecture')); - expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Node directory')); - expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Node path')); - expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('Available')); - - logSpy.mockRestore(); - }); - }); - - describe('BundledNodePaths Interface', () => { - it('should return all required path properties', async () => { - // Arrange - mockApp.isPackaged = true; - const resourcesPath = '/Applications/Accomplish.app/Contents/Resources'; - (process as NodeJS.Process & { resourcesPath: string }).resourcesPath = resourcesPath; - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/bundled-node'); - - // Act - const paths = module.getBundledNodePaths(); - - // Assert - expect(paths).not.toBeNull(); - expect(paths).toHaveProperty('nodePath'); - expect(paths).toHaveProperty('npmPath'); - expect(paths).toHaveProperty('npxPath'); - expect(paths).toHaveProperty('binDir'); - expect(paths).toHaveProperty('nodeDir'); - - // All should be strings - expect(typeof paths!.nodePath).toBe('string'); - expect(typeof paths!.npmPath).toBe('string'); - expect(typeof paths!.npxPath).toBe('string'); - expect(typeof paths!.binDir).toBe('string'); - expect(typeof paths!.nodeDir).toBe('string'); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/system-path.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/system-path.integration.test.ts deleted file mode 100644 index 9a6d6c268..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/main/utils/system-path.integration.test.ts +++ /dev/null @@ -1,513 +0,0 @@ -/** - * Integration tests for System PATH utilities - * - * Tests the system-path module which builds extended PATH strings for - * finding Node.js tools in macOS packaged apps. - * - * @module __tests__/integration/main/utils/system-path.integration.test - */ - -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; -import path from 'path'; - -// Store original values -const originalPlatform = process.platform; -const originalEnv = { ...process.env }; - -// Mock fs module -const mockFs = { - existsSync: vi.fn(), - readdirSync: vi.fn(), - statSync: vi.fn(), - accessSync: vi.fn(), - constants: { - X_OK: 1, - }, -}; - -vi.mock('fs', () => ({ - default: mockFs, - existsSync: mockFs.existsSync, - readdirSync: mockFs.readdirSync, - statSync: mockFs.statSync, - accessSync: mockFs.accessSync, - constants: mockFs.constants, -})); - -// Mock child_process -const mockExecSync = vi.fn(); - -vi.mock('child_process', () => ({ - execSync: mockExecSync, -})); - -describe('System PATH Utilities', () => { - let getExtendedNodePath: typeof import('@main/utils/system-path').getExtendedNodePath; - let findCommandInPath: typeof import('@main/utils/system-path').findCommandInPath; - - beforeEach(async () => { - vi.clearAllMocks(); - vi.resetModules(); - - // Reset environment - process.env = { ...originalEnv }; - process.env.HOME = '/Users/testuser'; - - // Re-import module to get fresh state - const module = await import('@main/utils/system-path'); - getExtendedNodePath = module.getExtendedNodePath; - findCommandInPath = module.findCommandInPath; - }); - - afterEach(() => { - vi.restoreAllMocks(); - Object.defineProperty(process, 'platform', { value: originalPlatform }); - process.env = originalEnv; - }); - - describe('getExtendedNodePath()', () => { - describe('Non-macOS Platforms', () => { - it('should return base PATH unchanged on Linux', async () => { - // Arrange - Object.defineProperty(process, 'platform', { value: 'linux' }); - const basePath = '/usr/bin:/usr/local/bin'; - - // Re-import for platform change - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(basePath); - - // Assert - expect(result).toBe(basePath); - }); - - it('should return base PATH unchanged on Windows', async () => { - // Arrange - Object.defineProperty(process, 'platform', { value: 'win32' }); - const basePath = 'C:\\Windows\\System32'; - - // Re-import for platform change - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(basePath); - - // Assert - expect(result).toBe(basePath); - }); - }); - - describe('macOS Platform', () => { - beforeEach(() => { - Object.defineProperty(process, 'platform', { value: 'darwin' }); - }); - - it('should include common Node.js paths', async () => { - // Arrange - mockFs.existsSync.mockImplementation((p: string) => { - const existingPaths = [ - '/opt/homebrew/bin', - '/usr/local/bin', - ]; - return existingPaths.includes(p); - }); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('PATH="/usr/bin:/bin"; export PATH;'); - - // Re-import for platform change - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath('/original/path'); - - // Assert - expect(result).toContain('/opt/homebrew/bin'); - expect(result).toContain('/usr/local/bin'); - }); - - it('should include NVM paths when available', async () => { - // Arrange - const nvmPath = '/Users/testuser/.nvm/versions/node/v20.10.0/bin'; - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === '/Users/testuser/.nvm/versions/node') return true; - if (p === nvmPath) return true; - return false; - }); - mockFs.readdirSync.mockImplementation((p: string) => { - if (p === '/Users/testuser/.nvm/versions/node') return ['v20.10.0']; - return []; - }); - mockExecSync.mockReturnValue('PATH="/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(''); - - // Assert - expect(result).toContain(nvmPath); - }); - - it('should include fnm paths when available', async () => { - // Arrange - const fnmPath = '/Users/testuser/.fnm/node-versions/v20.10.0/installation/bin'; - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === '/Users/testuser/.fnm/node-versions') return true; - if (p === fnmPath) return true; - return false; - }); - mockFs.readdirSync.mockImplementation((p: string) => { - if (p === '/Users/testuser/.fnm/node-versions') return ['v20.10.0']; - return []; - }); - mockExecSync.mockReturnValue('PATH="/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(''); - - // Assert - expect(result).toContain(fnmPath); - }); - - it('should sort NVM versions with newest first', async () => { - // Arrange - const nvmDir = '/Users/testuser/.nvm/versions/node'; - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === nvmDir) return true; - if (p.includes('.nvm/versions/node/v')) return true; - return false; - }); - mockFs.readdirSync.mockImplementation((p: string) => { - if (p === nvmDir) return ['v18.17.0', 'v20.10.0', 'v16.20.0']; - return []; - }); - mockExecSync.mockReturnValue('PATH="/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(''); - const pathParts = result.split(':'); - - // Assert - v20 should come before v18 which should come before v16 - const v20Index = pathParts.findIndex((p) => p.includes('v20')); - const v18Index = pathParts.findIndex((p) => p.includes('v18')); - const v16Index = pathParts.findIndex((p) => p.includes('v16')); - - expect(v20Index).toBeLessThan(v18Index); - expect(v18Index).toBeLessThan(v16Index); - }); - - it('should include path_helper output', async () => { - // Arrange - mockFs.existsSync.mockReturnValue(false); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('PATH="/custom/path:/another/path"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(''); - - // Assert - expect(result).toContain('/custom/path'); - expect(result).toContain('/another/path'); - }); - - it('should handle path_helper failure gracefully', async () => { - // Arrange - mockFs.existsSync.mockReturnValue(false); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockImplementation(() => { - throw new Error('path_helper failed'); - }); - - const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - should not throw - const result = module.getExtendedNodePath('/base/path'); - - // Assert - expect(result).toContain('/base/path'); - warnSpy.mockRestore(); - }); - - it('should deduplicate paths', async () => { - // Arrange - mockFs.existsSync.mockImplementation((p: string) => { - return p === '/usr/local/bin'; - }); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('PATH="/usr/local/bin:/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath('/usr/local/bin'); - - // Assert - /usr/local/bin should appear only once - const pathParts = result.split(':'); - const localBinCount = pathParts.filter((p) => p === '/usr/local/bin').length; - expect(localBinCount).toBe(1); - }); - - it('should use process.env.PATH as default base', async () => { - // Arrange - process.env.PATH = '/default/env/path'; - mockFs.existsSync.mockReturnValue(false); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('PATH="/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(); - - // Assert - expect(result).toContain('/default/env/path'); - }); - - it('should include Volta path when available', async () => { - // Arrange - const voltaPath = '/Users/testuser/.volta/bin'; - - mockFs.existsSync.mockImplementation((p: string) => { - return p === voltaPath; - }); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('PATH="/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(''); - - // Assert - expect(result).toContain(voltaPath); - }); - - it('should include asdf shims path when available', async () => { - // Arrange - const asdfPath = '/Users/testuser/.asdf/shims'; - - mockFs.existsSync.mockImplementation((p: string) => { - return p === asdfPath; - }); - mockFs.readdirSync.mockReturnValue([]); - mockExecSync.mockReturnValue('PATH="/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(''); - - // Assert - expect(result).toContain(asdfPath); - }); - }); - }); - - describe('findCommandInPath()', () => { - it('should find executable command in PATH', () => { - // Arrange - const searchPath = '/usr/bin:/usr/local/bin'; - const expectedPath = '/usr/local/bin/node'; - - mockFs.existsSync.mockImplementation((p: string) => { - return p === expectedPath; - }); - mockFs.statSync.mockReturnValue({ isFile: () => true }); - mockFs.accessSync.mockImplementation(() => {}); // No throw = executable - - // Act - const result = findCommandInPath('node', searchPath); - - // Assert - expect(result).toBe(expectedPath); - }); - - it('should return null when command not found', () => { - // Arrange - const searchPath = '/usr/bin:/usr/local/bin'; - mockFs.existsSync.mockReturnValue(false); - - // Act - const result = findCommandInPath('nonexistent', searchPath); - - // Assert - expect(result).toBeNull(); - }); - - it('should skip non-file entries', () => { - // Arrange - const searchPath = '/usr/bin'; - mockFs.existsSync.mockReturnValue(true); - mockFs.statSync.mockReturnValue({ isFile: () => false }); // Directory - - // Act - const result = findCommandInPath('node', searchPath); - - // Assert - expect(result).toBeNull(); - }); - - it('should skip non-executable files', () => { - // Arrange - const searchPath = '/usr/bin'; - mockFs.existsSync.mockReturnValue(true); - mockFs.statSync.mockReturnValue({ isFile: () => true }); - mockFs.accessSync.mockImplementation(() => { - throw new Error('Not executable'); - }); - - // Act - const result = findCommandInPath('node', searchPath); - - // Assert - expect(result).toBeNull(); - }); - - it('should search directories in order', () => { - // Arrange - const searchPath = '/first/bin:/second/bin'; - const firstPath = '/first/bin/node'; - const secondPath = '/second/bin/node'; - - mockFs.existsSync.mockImplementation((p: string) => { - return p === firstPath || p === secondPath; - }); - mockFs.statSync.mockReturnValue({ isFile: () => true }); - mockFs.accessSync.mockImplementation(() => {}); - - // Act - const result = findCommandInPath('node', searchPath); - - // Assert - expect(result).toBe(firstPath); - }); - - it('should handle empty path segments', () => { - // Arrange - const searchPath = '/usr/bin::/usr/local/bin'; - const expectedPath = '/usr/local/bin/node'; - - mockFs.existsSync.mockImplementation((p: string) => { - return p === expectedPath; - }); - mockFs.statSync.mockReturnValue({ isFile: () => true }); - mockFs.accessSync.mockImplementation(() => {}); - - // Act - const result = findCommandInPath('node', searchPath); - - // Assert - expect(result).toBe(expectedPath); - }); - - it('should handle directory access errors gracefully', () => { - // Arrange - const searchPath = '/nonexistent:/usr/local/bin'; - const expectedPath = '/usr/local/bin/node'; - - mockFs.existsSync.mockImplementation((p: string) => { - if (p.startsWith('/nonexistent')) { - throw new Error('Directory does not exist'); - } - return p === expectedPath; - }); - mockFs.statSync.mockReturnValue({ isFile: () => true }); - mockFs.accessSync.mockImplementation(() => {}); - - // Act - should not throw - const result = findCommandInPath('node', searchPath); - - // Assert - expect(result).toBe(expectedPath); - }); - - it('should handle statSync errors gracefully', () => { - // Arrange - const searchPath = '/usr/bin:/usr/local/bin'; - const expectedPath = '/usr/local/bin/node'; - - mockFs.existsSync.mockReturnValue(true); - mockFs.statSync.mockImplementation((p: string) => { - if (p === '/usr/bin/node') { - throw new Error('Stat error'); - } - return { isFile: () => p === expectedPath }; - }); - mockFs.accessSync.mockImplementation(() => {}); - - // Act - const result = findCommandInPath('node', searchPath); - - // Assert - expect(result).toBe(expectedPath); - }); - }); - - describe('Path Priority Order', () => { - it('should prioritize version manager paths over system paths', async () => { - // Arrange - Object.defineProperty(process, 'platform', { value: 'darwin' }); - const nvmPath = '/Users/testuser/.nvm/versions/node/v20.10.0/bin'; - - mockFs.existsSync.mockImplementation((p: string) => { - if (p === '/Users/testuser/.nvm/versions/node') return true; - if (p === nvmPath) return true; - if (p === '/opt/homebrew/bin') return true; - if (p === '/usr/local/bin') return true; - return false; - }); - mockFs.readdirSync.mockImplementation((p: string) => { - if (p === '/Users/testuser/.nvm/versions/node') return ['v20.10.0']; - return []; - }); - mockExecSync.mockReturnValue('PATH="/usr/bin"; export PATH;'); - - // Re-import - vi.resetModules(); - const module = await import('@main/utils/system-path'); - - // Act - const result = module.getExtendedNodePath(''); - const pathParts = result.split(':'); - - // Assert - NVM should come before Homebrew - const nvmIndex = pathParts.findIndex((p) => p.includes('.nvm')); - const homebrewIndex = pathParts.findIndex((p) => p.includes('homebrew')); - - expect(nvmIndex).toBeLessThan(homebrewIndex); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/preload/preload.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/preload/preload.integration.test.ts deleted file mode 100644 index c3e9c3341..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/preload/preload.integration.test.ts +++ /dev/null @@ -1,323 +0,0 @@ -/** - * Integration tests for Preload script - * - * Tests the REAL preload script by: - * 1. Mocking electron APIs (external dependency) - * 2. Importing the real preload module (triggers contextBridge.exposeInMainWorld) - * 3. Verifying the exposed API calls the correct IPC channels - * - * This is a proper integration test - only external dependencies are mocked. - */ - -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; -import pkg from '../../../package.json'; - -// Create mock functions for electron -const mockExposeInMainWorld = vi.fn(); -const mockInvoke = vi.fn(() => Promise.resolve(undefined)); -const mockOn = vi.fn(); -const mockRemoveListener = vi.fn(); - -// Mock electron module before importing preload -vi.mock('electron', () => ({ - contextBridge: { - exposeInMainWorld: mockExposeInMainWorld, - }, - ipcRenderer: { - invoke: mockInvoke, - on: mockOn, - removeListener: mockRemoveListener, - }, -})); - -// Store captured APIs from exposeInMainWorld calls -let capturedAccomplishAPI: Record = {}; -let capturedAccomplishShell: Record = {}; - -describe('Preload Script Integration', () => { - beforeEach(async () => { - vi.clearAllMocks(); - capturedAccomplishAPI = {}; - capturedAccomplishShell = {}; - - // Capture what the real preload exposes - mockExposeInMainWorld.mockImplementation((name: string, api: unknown) => { - if (name === 'accomplish') { - capturedAccomplishAPI = api as Record; - } else if (name === 'accomplishShell') { - capturedAccomplishShell = api as Record; - } - }); - - // Reset module cache and import the REAL preload module - vi.resetModules(); - await import('../../../src/preload/index'); - }); - - afterEach(() => { - vi.clearAllMocks(); - }); - - describe('API Exposure', () => { - it('should expose accomplish API via contextBridge', () => { - expect(mockExposeInMainWorld).toHaveBeenCalledWith('accomplish', expect.any(Object)); - expect(capturedAccomplishAPI).toBeDefined(); - }); - - it('should expose accomplishShell info via contextBridge', () => { - expect(mockExposeInMainWorld).toHaveBeenCalledWith('accomplishShell', expect.any(Object)); - expect(capturedAccomplishShell).toBeDefined(); - }); - - it('should expose shell info with isElectron=true', () => { - expect(capturedAccomplishShell.isElectron).toBe(true); - }); - - it('should expose shell info with platform', () => { - expect(capturedAccomplishShell.platform).toBe(process.platform); - }); - - it('should expose shell info with version matching package.json', () => { - expect(capturedAccomplishShell.version).toBe(pkg.version); - }); - }); - - describe('IPC Method Invocations', () => { - describe('App Info', () => { - it('getVersion should invoke app:version', async () => { - await (capturedAccomplishAPI.getVersion as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('app:version'); - }); - - it('getPlatform should invoke app:platform', async () => { - await (capturedAccomplishAPI.getPlatform as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('app:platform'); - }); - }); - - describe('Shell Operations', () => { - it('openExternal should invoke shell:open-external with URL', async () => { - const url = 'https://example.com'; - await (capturedAccomplishAPI.openExternal as (url: string) => Promise)(url); - expect(mockInvoke).toHaveBeenCalledWith('shell:open-external', url); - }); - }); - - describe('Task Operations', () => { - it('startTask should invoke task:start with config', async () => { - const config = { description: 'Test task' }; - await (capturedAccomplishAPI.startTask as (config: { description: string }) => Promise)(config); - expect(mockInvoke).toHaveBeenCalledWith('task:start', config); - }); - - it('cancelTask should invoke task:cancel with taskId', async () => { - await (capturedAccomplishAPI.cancelTask as (taskId: string) => Promise)('task_123'); - expect(mockInvoke).toHaveBeenCalledWith('task:cancel', 'task_123'); - }); - - it('interruptTask should invoke task:interrupt with taskId', async () => { - await (capturedAccomplishAPI.interruptTask as (taskId: string) => Promise)('task_123'); - expect(mockInvoke).toHaveBeenCalledWith('task:interrupt', 'task_123'); - }); - - it('getTask should invoke task:get with taskId', async () => { - await (capturedAccomplishAPI.getTask as (taskId: string) => Promise)('task_123'); - expect(mockInvoke).toHaveBeenCalledWith('task:get', 'task_123'); - }); - - it('listTasks should invoke task:list', async () => { - await (capturedAccomplishAPI.listTasks as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('task:list'); - }); - - it('deleteTask should invoke task:delete with taskId', async () => { - await (capturedAccomplishAPI.deleteTask as (taskId: string) => Promise)('task_123'); - expect(mockInvoke).toHaveBeenCalledWith('task:delete', 'task_123'); - }); - - it('clearTaskHistory should invoke task:clear-history', async () => { - await (capturedAccomplishAPI.clearTaskHistory as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('task:clear-history'); - }); - }); - - describe('Permission Operations', () => { - it('respondToPermission should invoke permission:respond', async () => { - const response = { taskId: 'task_123', allowed: true }; - await (capturedAccomplishAPI.respondToPermission as (r: { taskId: string; allowed: boolean }) => Promise)(response); - expect(mockInvoke).toHaveBeenCalledWith('permission:respond', response); - }); - }); - - describe('Session Operations', () => { - it('resumeSession should invoke session:resume', async () => { - await (capturedAccomplishAPI.resumeSession as (s: string, p: string, t?: string) => Promise)('session_123', 'Continue', 'task_456'); - expect(mockInvoke).toHaveBeenCalledWith('session:resume', 'session_123', 'Continue', 'task_456'); - }); - }); - - describe('Settings Operations', () => { - it('getDebugMode should invoke settings:debug-mode', async () => { - await (capturedAccomplishAPI.getDebugMode as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('settings:debug-mode'); - }); - - it('setDebugMode should invoke settings:set-debug-mode', async () => { - await (capturedAccomplishAPI.setDebugMode as (enabled: boolean) => Promise)(true); - expect(mockInvoke).toHaveBeenCalledWith('settings:set-debug-mode', true); - }); - - it('getAppSettings should invoke settings:app-settings', async () => { - await (capturedAccomplishAPI.getAppSettings as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('settings:app-settings'); - }); - }); - - describe('API Key Operations', () => { - it('hasApiKey should invoke api-key:exists', async () => { - await (capturedAccomplishAPI.hasApiKey as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('api-key:exists'); - }); - - it('setApiKey should invoke api-key:set', async () => { - await (capturedAccomplishAPI.setApiKey as (key: string) => Promise)('sk-test'); - expect(mockInvoke).toHaveBeenCalledWith('api-key:set', 'sk-test'); - }); - - it('getApiKey should invoke api-key:get', async () => { - await (capturedAccomplishAPI.getApiKey as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('api-key:get'); - }); - - it('validateApiKey should invoke api-key:validate', async () => { - await (capturedAccomplishAPI.validateApiKey as (key: string) => Promise)('sk-test'); - expect(mockInvoke).toHaveBeenCalledWith('api-key:validate', 'sk-test'); - }); - - it('clearApiKey should invoke api-key:clear', async () => { - await (capturedAccomplishAPI.clearApiKey as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('api-key:clear'); - }); - - it('getAllApiKeys should invoke api-keys:all', async () => { - await (capturedAccomplishAPI.getAllApiKeys as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('api-keys:all'); - }); - - it('hasAnyApiKey should invoke api-keys:has-any', async () => { - await (capturedAccomplishAPI.hasAnyApiKey as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('api-keys:has-any'); - }); - }); - - describe('Onboarding Operations', () => { - it('getOnboardingComplete should invoke onboarding:complete', async () => { - await (capturedAccomplishAPI.getOnboardingComplete as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('onboarding:complete'); - }); - - it('setOnboardingComplete should invoke onboarding:set-complete', async () => { - await (capturedAccomplishAPI.setOnboardingComplete as (c: boolean) => Promise)(true); - expect(mockInvoke).toHaveBeenCalledWith('onboarding:set-complete', true); - }); - }); - - describe('Model Operations', () => { - it('getSelectedModel should invoke model:get', async () => { - await (capturedAccomplishAPI.getSelectedModel as () => Promise)(); - expect(mockInvoke).toHaveBeenCalledWith('model:get'); - }); - - it('setSelectedModel should invoke model:set', async () => { - const model = { provider: 'anthropic', model: 'claude-3-opus' }; - await (capturedAccomplishAPI.setSelectedModel as (m: { provider: string; model: string }) => Promise)(model); - expect(mockInvoke).toHaveBeenCalledWith('model:set', model); - }); - }); - - describe('Logging Operations', () => { - it('logEvent should invoke log:event', async () => { - const payload = { level: 'info', message: 'Test' }; - await (capturedAccomplishAPI.logEvent as (p: unknown) => Promise)(payload); - expect(mockInvoke).toHaveBeenCalledWith('log:event', payload); - }); - }); - }); - - describe('Event Subscriptions', () => { - it('onTaskUpdate should subscribe to task:update', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onTaskUpdate as (cb: (e: unknown) => void) => () => void)(callback); - expect(mockOn).toHaveBeenCalledWith('task:update', expect.any(Function)); - }); - - it('onTaskUpdate should return unsubscribe function', () => { - const callback = vi.fn(); - const unsubscribe = (capturedAccomplishAPI.onTaskUpdate as (cb: (e: unknown) => void) => () => void)(callback); - unsubscribe(); - expect(mockRemoveListener).toHaveBeenCalledWith('task:update', expect.any(Function)); - }); - - it('onTaskUpdateBatch should subscribe to task:update:batch', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onTaskUpdateBatch as (cb: (e: unknown) => void) => () => void)(callback); - expect(mockOn).toHaveBeenCalledWith('task:update:batch', expect.any(Function)); - }); - - it('onPermissionRequest should subscribe to permission:request', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onPermissionRequest as (cb: (e: unknown) => void) => () => void)(callback); - expect(mockOn).toHaveBeenCalledWith('permission:request', expect.any(Function)); - }); - - it('onTaskProgress should subscribe to task:progress', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onTaskProgress as (cb: (e: unknown) => void) => () => void)(callback); - expect(mockOn).toHaveBeenCalledWith('task:progress', expect.any(Function)); - }); - - it('onDebugLog should subscribe to debug:log', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onDebugLog as (cb: (e: unknown) => void) => () => void)(callback); - expect(mockOn).toHaveBeenCalledWith('debug:log', expect.any(Function)); - }); - - it('onTaskStatusChange should subscribe to task:status-change', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onTaskStatusChange as (cb: (e: unknown) => void) => () => void)(callback); - expect(mockOn).toHaveBeenCalledWith('task:status-change', expect.any(Function)); - }); - }); - - describe('Event Callback Invocation', () => { - it('onTaskUpdate callback should receive event data', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onTaskUpdate as (cb: (e: unknown) => void) => () => void)(callback); - - // Get the registered listener from mockOn calls - const registeredListener = mockOn.mock.calls.find( - (call: unknown[]) => call[0] === 'task:update' - )?.[1] as (event: unknown, data: unknown) => void; - - // Simulate IPC event - const eventData = { taskId: 'task_123', type: 'message' }; - registeredListener(null, eventData); - - expect(callback).toHaveBeenCalledWith(eventData); - }); - - it('onPermissionRequest callback should receive request data', () => { - const callback = vi.fn(); - (capturedAccomplishAPI.onPermissionRequest as (cb: (e: unknown) => void) => () => void)(callback); - - const registeredListener = mockOn.mock.calls.find( - (call: unknown[]) => call[0] === 'permission:request' - )?.[1] as (event: unknown, data: unknown) => void; - - const requestData = { id: 'req_123', taskId: 'task_456' }; - registeredListener(null, requestData); - - expect(callback).toHaveBeenCalledWith(requestData); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/App.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/App.integration.test.tsx deleted file mode 100644 index e1cde7814..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/App.integration.test.tsx +++ /dev/null @@ -1,370 +0,0 @@ -/** - * Integration tests for App component - * Tests router setup and route rendering - * - * NOTE: This test follows React component integration testing principles: - * - Mocks external boundaries (IPC API, analytics) - cannot run real Electron in vitest - * - Mocks animation libraries (framer-motion) - for test stability - * - Mocks child page components - to focus on App's coordination logic - * - Uses real router (MemoryRouter) for route testing - * - * For full component rendering integration, see individual component tests. - * - * @module __tests__/integration/renderer/App.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; -import { render, screen, waitFor, fireEvent } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; - -// Create mock functions for accomplish API -const mockSetOnboardingComplete = vi.fn(); -const mockLogEvent = vi.fn(); -const mockListTasks = vi.fn(); -const mockOnTaskStatusChange = vi.fn(); -const mockOnTaskUpdate = vi.fn(); -const mockGetTask = vi.fn(); - -// Mock accomplish API -const mockAccomplish = { - setOnboardingComplete: mockSetOnboardingComplete, - logEvent: mockLogEvent.mockResolvedValue(undefined), - listTasks: mockListTasks.mockResolvedValue([]), - onTaskStatusChange: mockOnTaskStatusChange.mockReturnValue(() => {}), - onTaskUpdate: mockOnTaskUpdate.mockReturnValue(() => {}), - getTask: mockGetTask.mockResolvedValue(null), - getSelectedModel: vi.fn().mockResolvedValue({ provider: 'anthropic', id: 'claude-3-opus' }), - getOllamaConfig: vi.fn().mockResolvedValue(null), - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateApiKeyForProvider: vi.fn().mockResolvedValue({ valid: true }), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module - always return true for isRunningInElectron for most tests -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, - isRunningInElectron: () => true, -})); - -// Mock analytics -vi.mock('@/lib/analytics', () => ({ - analytics: { - trackPageView: vi.fn(), - trackNewTask: vi.fn(), - trackOpenSettings: vi.fn(), - }, -})); - -// Mock framer-motion to simplify testing animations -vi.mock('framer-motion', () => ({ - motion: { - div: ({ children, className, ...props }: { children: React.ReactNode; className?: string; [key: string]: unknown }) => { - const { initial, animate, exit, transition, variants, whileHover, ...domProps } = props; - return
{children}
; - }, - p: ({ children, className, ...props }: { children: React.ReactNode; className?: string; [key: string]: unknown }) => { - const { initial, animate, exit, transition, variants, ...domProps } = props; - return

{children}

; - }, - button: ({ children, className, ...props }: { children: React.ReactNode; className?: string; [key: string]: unknown }) => { - const { initial, animate, exit, transition, variants, whileHover, ...domProps } = props; - return ; - }, - }, - AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}, -})); - -// Mock animation utilities -vi.mock('@/lib/animations', () => ({ - springs: { - bouncy: { type: 'spring', stiffness: 300 }, - gentle: { type: 'spring', stiffness: 200 }, - }, - variants: { - fadeUp: { - initial: { opacity: 0, y: 20 }, - animate: { opacity: 1, y: 0 }, - exit: { opacity: 0, y: -20 }, - }, - }, - staggerContainer: {}, - staggerItem: {}, -})); - -// Mock the task store -const mockLoadTasks = vi.fn(); -const mockReset = vi.fn(); -let mockStoreState = { - tasks: [], - currentTask: null, - isLoading: false, - loadTasks: mockLoadTasks, - reset: mockReset, - loadTaskById: vi.fn(), - updateTaskStatus: vi.fn(), - addTaskUpdate: vi.fn(), -}; - -vi.mock('@/stores/taskStore', () => ({ - useTaskStore: () => mockStoreState, -})); - -// Mock the Sidebar component -vi.mock('@/components/layout/Sidebar', () => ({ - default: () =>
Sidebar
, -})); - -// Mock the HomePage -vi.mock('@/pages/Home', () => ({ - default: () =>
Home Page Content
, -})); - -// Mock the ExecutionPage -vi.mock('@/pages/Execution', () => ({ - default: () =>
Execution Page Content
, -})); - -// Import App after all mocks are set up -import App from '@/App'; - -describe('App Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset store state - mockStoreState = { - tasks: [], - currentTask: null, - isLoading: false, - loadTasks: mockLoadTasks, - reset: mockReset, - loadTaskById: vi.fn(), - updateTaskStatus: vi.fn(), - addTaskUpdate: vi.fn(), - }; - mockSetOnboardingComplete.mockResolvedValue(undefined); - }); - - // Helper to render App with router - const renderApp = (initialRoute = '/') => { - return render( - - - - ); - }; - - describe('router setup', () => { - it('should render sidebar in ready state', async () => { - // Arrange & Act - renderApp(); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('sidebar')).toBeInTheDocument(); - }); - }); - - it('should render main content area', async () => { - // Arrange & Act - renderApp(); - - // Assert - await waitFor(() => { - const main = document.querySelector('main'); - expect(main).toBeInTheDocument(); - }); - }); - - it('should render drag region for window dragging', async () => { - // Arrange & Act - renderApp(); - - // Assert - await waitFor(() => { - const dragRegion = document.querySelector('.drag-region'); - expect(dragRegion).toBeInTheDocument(); - }); - }); - }); - - describe('route rendering - Home', () => { - it('should render home page at root route', async () => { - // Arrange & Act - renderApp('/'); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('home-page')).toBeInTheDocument(); - }); - }); - - it('should render home page content', async () => { - // Arrange & Act - renderApp('/'); - - // Assert - await waitFor(() => { - expect(screen.getByText('Home Page Content')).toBeInTheDocument(); - }); - }); - }); - - describe('route rendering - Execution', () => { - it('should render execution page at /execution/:id route', async () => { - // Arrange & Act - renderApp('/execution/task-123'); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('execution-page')).toBeInTheDocument(); - }); - }); - - it('should render execution page content', async () => { - // Arrange & Act - renderApp('/execution/task-123'); - - // Assert - await waitFor(() => { - expect(screen.getByText('Execution Page Content')).toBeInTheDocument(); - }); - }); - - it('should handle different task IDs', async () => { - // Arrange & Act - renderApp('/execution/different-task-456'); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('execution-page')).toBeInTheDocument(); - }); - }); - }); - - describe('route rendering - Fallback', () => { - it('should redirect unknown routes to home', async () => { - // Arrange & Act - renderApp('/unknown-route'); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('home-page')).toBeInTheDocument(); - }); - }); - - it('should redirect /history to home (since it is not defined)', async () => { - // Arrange & Act - renderApp('/history'); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('home-page')).toBeInTheDocument(); - }); - }); - - it('should redirect deeply nested unknown routes to home', async () => { - // Arrange & Act - renderApp('/some/deeply/nested/route'); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('home-page')).toBeInTheDocument(); - }); - }); - }); - - describe('layout structure', () => { - it('should render with flex layout', async () => { - // Arrange & Act - renderApp(); - - // Assert - await waitFor(() => { - const flexContainer = document.querySelector('.flex.h-screen'); - expect(flexContainer).toBeInTheDocument(); - }); - }); - - it('should prevent overflow on app container', async () => { - // Arrange & Act - renderApp(); - - // Assert - await waitFor(() => { - const container = document.querySelector('.overflow-hidden'); - expect(container).toBeInTheDocument(); - }); - }); - - it('should render main content with flex-1 for proper sizing', async () => { - // Arrange & Act - renderApp(); - - // Assert - await waitFor(() => { - const main = document.querySelector('main.flex-1'); - expect(main).toBeInTheDocument(); - }); - }); - }); - - describe('analytics tracking', () => { - it('should track page view on mount', async () => { - // Arrange - const { analytics } = await import('@/lib/analytics'); - - // Act - renderApp('/'); - - // Assert - await waitFor(() => { - expect(analytics.trackPageView).toHaveBeenCalledWith('/'); - }); - }); - - it('should track page view for execution route', async () => { - // Arrange - const { analytics } = await import('@/lib/analytics'); - - // Act - renderApp('/execution/task-123'); - - // Assert - await waitFor(() => { - expect(analytics.trackPageView).toHaveBeenCalledWith('/execution/task-123'); - }); - }); - }); - - describe('accessibility', () => { - it('should have main landmark element', async () => { - // Arrange & Act - renderApp(); - - // Assert - await waitFor(() => { - const main = screen.getByRole('main'); - expect(main).toBeInTheDocument(); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Header.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Header.integration.test.tsx deleted file mode 100644 index 19a689328..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Header.integration.test.tsx +++ /dev/null @@ -1,272 +0,0 @@ -/** - * Integration tests for Header component - * Tests rendering and navigation elements - * @module __tests__/integration/renderer/components/Header.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect } from 'vitest'; -import { render, screen } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import Header from '@/components/layout/Header'; - -describe('Header Integration', () => { - describe('rendering', () => { - it('should render the header element', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const header = screen.getByRole('banner'); - expect(header).toBeInTheDocument(); - }); - - it('should render the logo/brand link', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const brandLink = screen.getByRole('link', { name: /openwork/i }); - expect(brandLink).toBeInTheDocument(); - expect(brandLink).toHaveAttribute('href', '/'); - }); - - it('should render the brand text', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - expect(screen.getByText('Openwork')).toBeInTheDocument(); - }); - }); - - describe('navigation elements', () => { - it('should render the navigation', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const nav = screen.getByRole('navigation'); - expect(nav).toBeInTheDocument(); - }); - - it('should render Home navigation link', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const homeLink = screen.getByRole('link', { name: /^home$/i }); - expect(homeLink).toBeInTheDocument(); - expect(homeLink).toHaveAttribute('href', '/'); - }); - - it('should render History navigation link', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const historyLink = screen.getByRole('link', { name: /history/i }); - expect(historyLink).toBeInTheDocument(); - expect(historyLink).toHaveAttribute('href', '/history'); - }); - - it('should render Settings navigation link', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const settingsLink = screen.getByRole('link', { name: /settings/i }); - expect(settingsLink).toBeInTheDocument(); - expect(settingsLink).toHaveAttribute('href', '/settings'); - }); - - it('should render all three navigation links', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const nav = screen.getByRole('navigation'); - const links = nav.querySelectorAll('a'); - expect(links).toHaveLength(3); - }); - }); - - describe('active state', () => { - it('should mark Home link as active when on home route', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const homeLink = screen.getByRole('link', { name: /^home$/i }); - expect(homeLink.className).toContain('nav-link-active'); - }); - - it('should mark History link as active when on history route', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const historyLink = screen.getByRole('link', { name: /history/i }); - expect(historyLink.className).toContain('nav-link-active'); - }); - - it('should mark Settings link as active when on settings route', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const settingsLink = screen.getByRole('link', { name: /settings/i }); - expect(settingsLink.className).toContain('nav-link-active'); - }); - - it('should not mark Home link as active when on other routes', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const homeLink = screen.getByRole('link', { name: /^home$/i }); - expect(homeLink.className).not.toContain('nav-link-active'); - }); - - it('should have nav-link class on all navigation links', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const homeLink = screen.getByRole('link', { name: /^home$/i }); - const historyLink = screen.getByRole('link', { name: /history/i }); - const settingsLink = screen.getByRole('link', { name: /settings/i }); - - expect(homeLink.className).toContain('nav-link'); - expect(historyLink.className).toContain('nav-link'); - expect(settingsLink.className).toContain('nav-link'); - }); - }); - - describe('layout and structure', () => { - it('should have drag region class for window dragging', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const header = screen.getByRole('banner'); - expect(header.className).toContain('drag-region'); - }); - - it('should have no-drag class on logo link', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const brandLink = screen.getByRole('link', { name: /openwork/i }); - expect(brandLink.className).toContain('no-drag'); - }); - - it('should have no-drag class on navigation', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const nav = screen.getByRole('navigation'); - expect(nav.className).toContain('no-drag'); - }); - - it('should render logo icon SVG', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - const brandLink = screen.getByRole('link', { name: /openwork/i }); - const svg = brandLink.querySelector('svg'); - expect(svg).toBeInTheDocument(); - }); - }); - - describe('deep routes', () => { - it('should not highlight any nav link on execution routes', () => { - // Arrange & Act - render( - -
- - ); - - // Assert - None of the standard routes should be active - const homeLink = screen.getByRole('link', { name: /^home$/i }); - const historyLink = screen.getByRole('link', { name: /history/i }); - const settingsLink = screen.getByRole('link', { name: /settings/i }); - - expect(homeLink.className).not.toContain('nav-link-active'); - expect(historyLink.className).not.toContain('nav-link-active'); - expect(settingsLink.className).not.toContain('nav-link-active'); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/SettingsDialog.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/SettingsDialog.integration.test.tsx deleted file mode 100644 index b95408962..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/SettingsDialog.integration.test.tsx +++ /dev/null @@ -1,854 +0,0 @@ -/** - * Integration tests for SettingsDialog component - * Tests dialog rendering, API key management, model selection, and debug mode - * @module __tests__/integration/renderer/components/SettingsDialog.integration.test - * @vitest-environment jsdom - * - * NOTE: Many tests in this file are skipped because they were written for the old - * API key-based Settings UI. The SettingsDialog was redesigned to use a provider-based - * system with ProviderGrid and ProviderSettingsPanel components. - * - * The Settings functionality is covered by E2E tests in e2e/specs/settings.spec.ts. - * These integration tests should be rewritten to test the new provider-based UI. - * - * TODO: Rewrite tests for new provider-based Settings UI - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import type { ApiKeyConfig } from '@accomplish/shared'; - -// Mock analytics to prevent tracking calls -vi.mock('@/lib/analytics', () => ({ - analytics: { - trackToggleDebugMode: vi.fn(), - trackSelectModel: vi.fn(), - trackSaveApiKey: vi.fn(), - trackSelectProvider: vi.fn(), - }, -})); - -// Create mock functions for accomplish API -const mockGetApiKeys = vi.fn(); -const mockGetDebugMode = vi.fn(); -const mockGetVersion = vi.fn(); -const mockGetSelectedModel = vi.fn(); -const mockSetDebugMode = vi.fn(); -const mockSetSelectedModel = vi.fn(); -const mockAddApiKey = vi.fn(); -const mockRemoveApiKey = vi.fn(); -const mockValidateApiKeyForProvider = vi.fn(); - -// Mock accomplish API -const mockAccomplish = { - getApiKeys: mockGetApiKeys, - getDebugMode: mockGetDebugMode, - getVersion: mockGetVersion, - getSelectedModel: mockGetSelectedModel, - getOllamaConfig: vi.fn().mockResolvedValue(null), - setDebugMode: mockSetDebugMode, - setSelectedModel: mockSetSelectedModel, - addApiKey: mockAddApiKey, - removeApiKey: mockRemoveApiKey, - validateApiKeyForProvider: mockValidateApiKeyForProvider, - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, -})); - -// Mock framer-motion to simplify testing animations -vi.mock('framer-motion', () => ({ - motion: { - div: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => { - // Filter out motion-specific props - const { initial, animate, exit, transition, variants, whileHover, ...domProps } = props; - return
{children}
; - }, - }, - AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}, -})); - -// Mock Radix Dialog to simplify testing -vi.mock('@radix-ui/react-dialog', () => ({ - Root: ({ children, open }: { children: React.ReactNode; open: boolean }) => ( - open ?
{children}
: null - ), - Portal: ({ children }: { children: React.ReactNode }) => <>{children}, - Overlay: ({ children }: { children: React.ReactNode }) => ( -
{children}
- ), - Content: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( -
{children}
- ), - Title: ({ children, className }: { children: React.ReactNode; className?: string }) => ( -

{children}

- ), - Close: ({ children }: { children: React.ReactNode }) => ( - - ), -})); - -// Need to import after mocks are set up -import SettingsDialog from '@/components/layout/SettingsDialog'; - -describe('SettingsDialog Integration', () => { - const defaultProps = { - open: true, - onOpenChange: vi.fn(), - onApiKeySaved: vi.fn(), - }; - - beforeEach(() => { - vi.clearAllMocks(); - // Default mock implementations - mockGetApiKeys.mockResolvedValue([]); - mockGetDebugMode.mockResolvedValue(false); - mockGetVersion.mockResolvedValue('1.0.0'); - mockGetSelectedModel.mockResolvedValue({ provider: 'anthropic', model: 'anthropic/claude-opus-4-5' }); - mockSetDebugMode.mockResolvedValue(undefined); - mockSetSelectedModel.mockResolvedValue(undefined); - mockValidateApiKeyForProvider.mockResolvedValue({ valid: true }); - mockAddApiKey.mockResolvedValue({ id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }); - mockRemoveApiKey.mockResolvedValue(undefined); - }); - - describe('dialog rendering', () => { - it('should render dialog when open is true', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByRole('dialog')).toBeInTheDocument(); - }); - }); - - it('should not render dialog when open is false', () => { - // Arrange & Act - render(); - - // Assert - expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); - }); - - it('should render dialog title', async () => { - // Arrange & Act - render(); - - // Assert - new SettingsDialog uses "Set up Openwork" as title - await waitFor(() => { - expect(screen.getByText('Set up Openwork')).toBeInTheDocument(); - }); - }); - - it('should fetch initial data on open', async () => { - // Arrange & Act - render(); - - // Assert - new provider-based SettingsDialog fetches provider settings - await waitFor(() => { - expect(mockAccomplish.getProviderSettings).toHaveBeenCalled(); - }); - }); - - it('should not render dialog content when open is false', () => { - // Arrange & Act - render(); - - // Assert - Dialog root should not be in document when closed - expect(screen.queryByTestId('dialog-root')).not.toBeInTheDocument(); - expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); - }); - }); - - describe('provider active state', () => { - /** - * Bug test: Newly connected ready provider should become active - * - * Bug: When connecting a new provider that is immediately "ready" (has a default - * model auto-selected), it should become the active provider. However, the bug - * caused the green active indicator to stay on the previously active provider. - * - * Root cause: handleConnect only called setActiveProvider when NO provider was - * active (!settings?.activeProviderId). It should call setActiveProvider when - * the new provider is ready, regardless of existing active provider. - * - * This test verifies that when Provider B connects with a default model while - * Provider A is already active, Provider B becomes the new active provider. - * - * Test approach: This is a unit test of the handleConnect logic in SettingsDialog. - * We check that setActiveProvider is called when a ready provider connects, - * even when another provider is already active. The actual UI flow requires - * provider forms which are complex to mock, so we test the observable behavior - * through the hook's setActiveProvider being called. - */ - it('should call setActiveProvider when a ready provider connects (regression test)', async () => { - // This test documents the expected behavior: - // When handleConnect receives a provider that is "ready" (has selectedModelId), - // it should call setActiveProvider with that provider's ID, regardless of - // whether activeProviderId already has a value. - // - // The bug is in SettingsDialog.tsx handleConnect: - // BUGGY: if (!settings?.activeProviderId) { setActiveProvider(...) } - // CORRECT: if (isProviderReady(provider)) { setActiveProvider(...) } - // - // Since the full UI flow is difficult to test in isolation, we document - // the expected behavior here and rely on E2E tests for full validation. - - // Initial state: anthropic is connected and active - mockAccomplish.getProviderSettings = vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'anthropic/claude-haiku-4-5', - credentials: { type: 'api-key', apiKeyPrefix: 'sk-ant-...' }, - lastConnectedAt: new Date().toISOString(), - }, - }, - debugMode: false, - }); - - render(); - - // Wait for dialog to load with anthropic as active - await waitFor(() => { - expect(screen.getByRole('dialog')).toBeInTheDocument(); - // Verify anthropic card has green background (is active) - const anthropicCard = screen.getByTestId('provider-card-anthropic'); - expect(anthropicCard.className).toContain('bg-[#e9f7e7]'); - }); - - // Verify the initial state: anthropic is active - // This confirms the test setup is correct - expect(mockAccomplish.getProviderSettings).toHaveBeenCalled(); - }); - }); - - // SKIP: Old UI tests - SettingsDialog was redesigned with provider-based system - // TODO: Rewrite these tests for the new ProviderGrid/ProviderSettingsPanel UI - describe.skip('API key section', () => { - it('should render API key section title', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Bring Your Own Model/API Key')).toBeInTheDocument(); - }); - }); - - it('should render provider selection buttons', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Anthropic')).toBeInTheDocument(); - expect(screen.getByText('OpenAI')).toBeInTheDocument(); - expect(screen.getByText('Google AI')).toBeInTheDocument(); - expect(screen.getByText('xAI (Grok)')).toBeInTheDocument(); - }); - }); - - it('should render API key input field', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - const input = screen.getByPlaceholderText('sk-ant-...'); - expect(input).toBeInTheDocument(); - expect(input).toHaveAttribute('type', 'password'); - }); - }); - - it('should render Save API Key button', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByRole('button', { name: /save api key/i })).toBeInTheDocument(); - }); - }); - }); - - // SKIP: Old UI tests - SettingsDialog was redesigned with provider-based system - describe.skip('provider selection', () => { - it('should change provider when button is clicked', async () => { - // Arrange - render(); - - // Act - await waitFor(() => { - expect(screen.getByText('Google AI')).toBeInTheDocument(); - }); - fireEvent.click(screen.getByText('Google AI')); - - // Assert - await waitFor(() => { - expect(screen.getByPlaceholderText('AIza...')).toBeInTheDocument(); - }); - }); - - it('should update input placeholder when provider changes', async () => { - // Arrange - render(); - - // Act - Click Google AI provider - await waitFor(() => { - expect(screen.getByText('Google AI')).toBeInTheDocument(); - }); - fireEvent.click(screen.getByText('Google AI')); - - // Assert - await waitFor(() => { - expect(screen.getByPlaceholderText('AIza...')).toBeInTheDocument(); - }); - }); - - it('should highlight selected provider', async () => { - // Arrange - render(); - - // Assert - Anthropic is selected by default and should have highlight class - await waitFor(() => { - const anthropicButton = screen.getByText('Anthropic').closest('button'); - expect(anthropicButton?.className).toContain('border-primary'); - }); - }); - }); - - // SKIP: Old UI tests - SettingsDialog was redesigned with provider-based system - describe.skip('API key input and saving', () => { - it('should show error when saving empty API key', async () => { - // Arrange - render(); - - // Act - await waitFor(() => { - expect(screen.getByRole('button', { name: /save api key/i })).toBeInTheDocument(); - }); - fireEvent.click(screen.getByRole('button', { name: /save api key/i })); - - // Assert - await waitFor(() => { - expect(screen.getByText('Please enter an API key.')).toBeInTheDocument(); - }); - }); - - it('should show error when API key format is invalid', async () => { - // Arrange - render(); - - // Act - await waitFor(() => { - expect(screen.getByPlaceholderText('sk-ant-...')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByPlaceholderText('sk-ant-...'), { target: { value: 'invalid-key' } }); - fireEvent.click(screen.getByRole('button', { name: /save api key/i })); - - // Assert - await waitFor(() => { - expect(screen.getByText(/invalid api key format/i)).toBeInTheDocument(); - }); - }); - - it('should validate and save valid API key', async () => { - // Arrange - mockValidateApiKeyForProvider.mockResolvedValue({ valid: true }); - mockAddApiKey.mockResolvedValue({ id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }); - render(); - - // Act - await waitFor(() => { - expect(screen.getByPlaceholderText('sk-ant-...')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByPlaceholderText('sk-ant-...'), { target: { value: 'sk-ant-test123' } }); - fireEvent.click(screen.getByRole('button', { name: /save api key/i })); - - // Assert - await waitFor(() => { - expect(mockValidateApiKeyForProvider).toHaveBeenCalledWith('anthropic', 'sk-ant-test123'); - expect(mockAddApiKey).toHaveBeenCalledWith('anthropic', 'sk-ant-test123'); - }); - }); - - it('should show error when API key validation fails', async () => { - // Arrange - mockValidateApiKeyForProvider.mockResolvedValue({ valid: false, error: 'Invalid API key' }); - render(); - - // Act - await waitFor(() => { - expect(screen.getByPlaceholderText('sk-ant-...')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByPlaceholderText('sk-ant-...'), { target: { value: 'sk-ant-invalid' } }); - fireEvent.click(screen.getByRole('button', { name: /save api key/i })); - - // Assert - await waitFor(() => { - expect(screen.getByText('Invalid API key')).toBeInTheDocument(); - }); - }); - - it('should show success message after saving API key', async () => { - // Arrange - mockValidateApiKeyForProvider.mockResolvedValue({ valid: true }); - mockAddApiKey.mockResolvedValue({ id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }); - render(); - - // Act - await waitFor(() => { - expect(screen.getByPlaceholderText('sk-ant-...')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByPlaceholderText('sk-ant-...'), { target: { value: 'sk-ant-valid123' } }); - fireEvent.click(screen.getByRole('button', { name: /save api key/i })); - - // Assert - await waitFor(() => { - expect(screen.getByText(/anthropic api key saved securely/i)).toBeInTheDocument(); - }); - }); - - it('should call onApiKeySaved callback after saving', async () => { - // Arrange - const onApiKeySaved = vi.fn(); - mockValidateApiKeyForProvider.mockResolvedValue({ valid: true }); - mockAddApiKey.mockResolvedValue({ id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }); - render(); - - // Act - await waitFor(() => { - expect(screen.getByPlaceholderText('sk-ant-...')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByPlaceholderText('sk-ant-...'), { target: { value: 'sk-ant-valid123' } }); - fireEvent.click(screen.getByRole('button', { name: /save api key/i })); - - // Assert - await waitFor(() => { - expect(onApiKeySaved).toHaveBeenCalled(); - }); - }); - - it('should show Saving... while saving is in progress', async () => { - // Arrange - mockValidateApiKeyForProvider.mockImplementation( - () => new Promise((resolve) => setTimeout(() => resolve({ valid: true }), 100)) - ); - render(); - - // Act - await waitFor(() => { - expect(screen.getByPlaceholderText('sk-ant-...')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByPlaceholderText('sk-ant-...'), { target: { value: 'sk-ant-valid123' } }); - fireEvent.click(screen.getByRole('button', { name: /save api key/i })); - - // Assert - expect(screen.getByText('Saving...')).toBeInTheDocument(); - }); - }); - - // SKIP: Old UI tests - SettingsDialog was redesigned with provider-based system - describe.skip('saved keys display', () => { - it('should render saved API keys', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-abc...' }, - { id: 'key-2', provider: 'openai', keyPrefix: 'sk-xyz...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Saved Keys')).toBeInTheDocument(); - expect(screen.getByText('sk-ant-abc...')).toBeInTheDocument(); - expect(screen.getByText('sk-xyz...')).toBeInTheDocument(); - }); - }); - - it('should show delete button for each saved key', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-abc...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Assert - await waitFor(() => { - expect(screen.getByTitle('Remove API key')).toBeInTheDocument(); - }); - }); - - it('should delete API key when delete button is clicked and confirmed', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-abc...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Act - Click delete button to show confirmation - await waitFor(() => { - expect(screen.getByTitle('Remove API key')).toBeInTheDocument(); - }); - fireEvent.click(screen.getByTitle('Remove API key')); - - // Act - Confirm deletion by clicking Yes - await waitFor(() => { - expect(screen.getByText('Are you sure?')).toBeInTheDocument(); - }); - fireEvent.click(screen.getByRole('button', { name: /yes/i })); - - // Assert - await waitFor(() => { - expect(mockRemoveApiKey).toHaveBeenCalledWith('key-1'); - }); - }); - - it('should not delete API key when confirmation is cancelled', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-abc...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Act - Click delete button to show confirmation - await waitFor(() => { - expect(screen.getByTitle('Remove API key')).toBeInTheDocument(); - }); - fireEvent.click(screen.getByTitle('Remove API key')); - - // Act - Cancel by clicking No - await waitFor(() => { - expect(screen.getByText('Are you sure?')).toBeInTheDocument(); - }); - fireEvent.click(screen.getByRole('button', { name: /no/i })); - - // Assert - Should not delete, confirmation should be hidden - expect(mockRemoveApiKey).not.toHaveBeenCalled(); - await waitFor(() => { - expect(screen.queryByText('Are you sure?')).not.toBeInTheDocument(); - }); - }); - - it('should show loading skeleton while fetching keys', async () => { - // Arrange - mockGetApiKeys.mockImplementation( - () => new Promise((resolve) => setTimeout(() => resolve([]), 500)) - ); - render(); - - // Assert - Check for skeleton animation - await waitFor(() => { - const skeletons = document.querySelectorAll('.animate-pulse'); - expect(skeletons.length).toBeGreaterThan(0); - }); - }); - }); - - // SKIP: Old UI tests - SettingsDialog was redesigned with provider-based system - describe.skip('model selection', () => { - it('should render Model section', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Model')).toBeInTheDocument(); - }); - }); - - it('should render model selection dropdown', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Assert - await waitFor(() => { - const select = screen.getByRole('combobox'); - expect(select).toBeInTheDocument(); - }); - }); - - it('should show model options grouped by provider', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Assert - Check for Anthropic group - await waitFor(() => { - const optgroups = document.querySelectorAll('optgroup'); - expect(optgroups.length).toBeGreaterThan(0); - }); - }); - - it('should disable models without API keys', async () => { - // Arrange - No Google AI API key - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Assert - await waitFor(() => { - const option = screen.getByRole('option', { name: /gemini 3 pro \(no api key\)/i }); - expect(option).toBeDisabled(); - }); - }); - - it('should call setSelectedModel when model is changed', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Act - await waitFor(() => { - expect(screen.getByRole('combobox')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByRole('combobox'), { target: { value: 'anthropic/claude-sonnet-4-5' } }); - - // Assert - await waitFor(() => { - expect(mockSetSelectedModel).toHaveBeenCalledWith({ - provider: 'anthropic', - model: 'anthropic/claude-sonnet-4-5', - }); - }); - }); - - it('should show model updated message after selection', async () => { - // Arrange - const savedKeys: ApiKeyConfig[] = [ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }, - ]; - mockGetApiKeys.mockResolvedValue(savedKeys); - render(); - - // Act - await waitFor(() => { - expect(screen.getByRole('combobox')).toBeInTheDocument(); - }); - fireEvent.change(screen.getByRole('combobox'), { target: { value: 'anthropic/claude-sonnet-4-5' } }); - - // Assert - await waitFor(() => { - expect(screen.getByText(/model updated to/i)).toBeInTheDocument(); - }); - }); - - it('should show warning when selected model has no API key', async () => { - // Arrange - Selected Google AI model but no Google AI key - mockGetSelectedModel.mockResolvedValue({ provider: 'google', model: 'google/gemini-3-pro-preview' }); - mockGetApiKeys.mockResolvedValue([ - { id: 'key-1', provider: 'anthropic', keyPrefix: 'sk-ant-...' }, - ]); - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText(/no api key configured for google/i)).toBeInTheDocument(); - }); - }); - }); - - // SKIP: Old UI tests - SettingsDialog was redesigned with provider-based system - describe.skip('debug mode toggle', () => { - it('should render Developer section', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Developer')).toBeInTheDocument(); - }); - }); - - it('should render Debug Mode toggle', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Debug Mode')).toBeInTheDocument(); - }); - }); - - it('should show debug mode as disabled initially', async () => { - // Arrange - mockGetDebugMode.mockResolvedValue(false); - render(); - - // Assert - await waitFor(() => { - const toggle = screen.getByRole('button', { name: '' }); - expect(toggle.className).toContain('bg-muted'); - }); - }); - - it('should toggle debug mode when clicked', async () => { - // Arrange - mockGetDebugMode.mockResolvedValue(false); - render(); - - // Find the toggle button in the Developer section - await waitFor(() => { - expect(screen.getByText('Debug Mode')).toBeInTheDocument(); - }); - - // Act - Find toggle by its appearance (the switch button) - const developerSection = screen.getByText('Debug Mode').closest('section'); - const toggleButton = developerSection?.querySelector('button[class*="rounded-full"]'); - if (toggleButton) { - fireEvent.click(toggleButton); - } - - // Assert - await waitFor(() => { - expect(mockSetDebugMode).toHaveBeenCalledWith(true); - }); - }); - - it('should show debug mode warning when enabled', async () => { - // Arrange - mockGetDebugMode.mockResolvedValue(true); - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText(/debug mode is enabled/i)).toBeInTheDocument(); - }); - }); - - it('should show loading skeleton while fetching debug setting', async () => { - // Arrange - mockGetDebugMode.mockImplementation( - () => new Promise((resolve) => setTimeout(() => resolve(false), 500)) - ); - render(); - - // Assert - Check for skeleton animation near debug toggle - await waitFor(() => { - const skeletons = document.querySelectorAll('.animate-pulse'); - expect(skeletons.length).toBeGreaterThan(0); - }); - }); - - it('should revert toggle state on save error', async () => { - // Arrange - mockGetDebugMode.mockResolvedValue(false); - mockSetDebugMode.mockRejectedValue(new Error('Save failed')); - render(); - - await waitFor(() => { - expect(screen.getByText('Debug Mode')).toBeInTheDocument(); - }); - - // Act - const developerSection = screen.getByText('Debug Mode').closest('section'); - const toggleButton = developerSection?.querySelector('button[class*="rounded-full"]'); - if (toggleButton) { - fireEvent.click(toggleButton); - } - - // Assert - Mock should have been called and error handled - await waitFor(() => { - expect(mockSetDebugMode).toHaveBeenCalled(); - }); - }); - }); - - // SKIP: Old UI tests - SettingsDialog was redesigned with provider-based system - describe.skip('about section', () => { - it('should render About section', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('About')).toBeInTheDocument(); - }); - }); - - it('should render app name', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Openwork')).toBeInTheDocument(); - }); - }); - - it('should render app version', async () => { - // Arrange - mockGetVersion.mockResolvedValue('2.0.0'); - render(); - - // Assert - await waitFor(() => { - expect(screen.getByText('Version 2.0.0')).toBeInTheDocument(); - }); - }); - - it('should render app logo', async () => { - // Arrange & Act - render(); - - // Assert - await waitFor(() => { - const logo = screen.getByRole('img', { name: /openwork/i }); - expect(logo).toBeInTheDocument(); - }); - }); - - it('should show default version when fetch fails', async () => { - // Arrange - mockGetVersion.mockRejectedValue(new Error('Fetch failed')); - render(); - - // Assert - should show error instead of fallback version - await waitFor(() => { - expect(screen.getByText('Version Error: unavailable')).toBeInTheDocument(); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Sidebar.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Sidebar.integration.test.tsx deleted file mode 100644 index 8a7a3a959..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/Sidebar.integration.test.tsx +++ /dev/null @@ -1,522 +0,0 @@ -/** - * Integration tests for Sidebar component - * Tests rendering with conversations, conversation selection, and settings - * @module __tests__/integration/renderer/components/Sidebar.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import type { Task, TaskStatus } from '@accomplish/shared'; - -// Mock analytics to prevent tracking calls -vi.mock('@/lib/analytics', () => ({ - analytics: { - trackNewTask: vi.fn(), - trackOpenSettings: vi.fn(), - }, -})); - -// Create mock functions outside of mock factory -const mockLoadTasks = vi.fn(); -const mockUpdateTaskStatus = vi.fn(); -const mockAddTaskUpdate = vi.fn(); -const mockListTasks = vi.fn(); -const mockOnTaskStatusChange = vi.fn(); -const mockOnTaskUpdate = vi.fn(); - -// Helper to create mock tasks -function createMockTask( - id: string, - prompt: string = 'Test task', - status: TaskStatus = 'completed' -): Task { - return { - id, - prompt, - status, - messages: [], - createdAt: new Date().toISOString(), - }; -} - -// Mock accomplish API -const mockAccomplish = { - listTasks: mockListTasks.mockResolvedValue([]), - onTaskStatusChange: mockOnTaskStatusChange.mockReturnValue(() => {}), - onTaskUpdate: mockOnTaskUpdate.mockReturnValue(() => {}), - getSelectedModel: vi.fn().mockResolvedValue({ provider: 'anthropic', id: 'claude-3-opus' }), - getOllamaConfig: vi.fn().mockResolvedValue(null), - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateApiKeyForProvider: vi.fn().mockResolvedValue({ valid: true }), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, -})); - -// Create a store state holder for testing -let mockStoreState = { - tasks: [] as Task[], - loadTasks: mockLoadTasks, - updateTaskStatus: mockUpdateTaskStatus, - addTaskUpdate: mockAddTaskUpdate, -}; - -// Mock the task store -vi.mock('@/stores/taskStore', () => ({ - useTaskStore: () => mockStoreState, -})); - -// Mock the SettingsDialog to simplify testing -vi.mock('@/components/layout/SettingsDialog', () => ({ - default: ({ open, onOpenChange }: { open: boolean; onOpenChange: (open: boolean) => void }) => ( - open ? ( -
- -
- ) : null - ), -})); - -// Mock framer-motion to simplify testing animations -vi.mock('framer-motion', () => ({ - motion: { - div: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( -
{children}
- ), - button: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( - - ), - }, - AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}, -})); - -// Need to import after mocks are set up -import Sidebar from '@/components/layout/Sidebar'; - -describe('Sidebar Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset store state - mockStoreState = { - tasks: [], - loadTasks: mockLoadTasks, - updateTaskStatus: mockUpdateTaskStatus, - addTaskUpdate: mockAddTaskUpdate, - }; - }); - - describe('rendering with no conversations', () => { - it('should render the sidebar container', () => { - // Arrange & Act - render( - - - - ); - - // Assert - sidebar should be present (260px width) - const sidebar = document.querySelector('.w-\\[260px\\]'); - expect(sidebar).toBeInTheDocument(); - }); - - it('should render New Task button', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const newTaskButton = screen.getByRole('button', { name: /new task/i }); - expect(newTaskButton).toBeInTheDocument(); - }); - - it('should show empty state message when no conversations', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(screen.getByText(/no conversations yet/i)).toBeInTheDocument(); - }); - - it('should render Settings button', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const settingsButton = screen.getByRole('button', { name: /settings/i }); - expect(settingsButton).toBeInTheDocument(); - }); - - it('should render logo image', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const logo = screen.getByRole('img', { name: /openwork/i }); - expect(logo).toBeInTheDocument(); - }); - - it('should call loadTasks on mount', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(mockLoadTasks).toHaveBeenCalled(); - }); - }); - - describe('rendering with conversations', () => { - it('should render conversation list when tasks exist', () => { - // Arrange - const tasks = [ - createMockTask('task-1', 'Check my email inbox'), - createMockTask('task-2', 'Review calendar'), - ]; - mockStoreState.tasks = tasks; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Check my email inbox')).toBeInTheDocument(); - expect(screen.getByText('Review calendar')).toBeInTheDocument(); - }); - - it('should not show empty state when tasks exist', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'A task')]; - - // Act - render( - - - - ); - - // Assert - expect(screen.queryByText(/no conversations yet/i)).not.toBeInTheDocument(); - }); - - it('should render all tasks in the list', () => { - // Arrange - const tasks = [ - createMockTask('task-1', 'First task'), - createMockTask('task-2', 'Second task'), - createMockTask('task-3', 'Third task'), - ]; - mockStoreState.tasks = tasks; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('First task')).toBeInTheDocument(); - expect(screen.getByText('Second task')).toBeInTheDocument(); - expect(screen.getByText('Third task')).toBeInTheDocument(); - }); - - it('should show running indicator for running tasks', () => { - // Arrange - const tasks = [ - createMockTask('task-1', 'Running task', 'running'), - ]; - mockStoreState.tasks = tasks; - - // Act - render( - - - - ); - - // Assert - Check for spinning loader icon - const taskItem = screen.getByText('Running task').closest('button'); - const spinner = taskItem?.querySelector('.animate-spin-ccw'); - expect(spinner).toBeInTheDocument(); - }); - - it('should show completed indicator for completed tasks', () => { - // Arrange - const tasks = [ - createMockTask('task-1', 'Completed task', 'completed'), - ]; - mockStoreState.tasks = tasks; - - // Act - render( - - - - ); - - // Assert - Check for checkmark icon (CheckCircle2) - const taskItem = screen.getByText('Completed task').closest('button'); - const checkIcon = taskItem?.querySelector('svg'); - expect(checkIcon).toBeInTheDocument(); - }); - }); - - describe('conversation selection', () => { - it('should render conversation items as clickable buttons', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Clickable task')]; - - // Act - render( - - - - ); - - // Assert - const taskButton = screen.getByText('Clickable task').closest('button'); - expect(taskButton).toBeInTheDocument(); - expect(taskButton?.tagName).toBe('BUTTON'); - }); - - it('should navigate to execution page when conversation is clicked', async () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-123', 'Navigate task')]; - - // Act - render( - - - - ); - - const taskButton = screen.getByText('Navigate task').closest('button'); - if (taskButton) { - fireEvent.click(taskButton); - } - - // Assert - Check that the link navigates correctly - // In real scenario, this would change the route - await waitFor(() => { - expect(taskButton).toBeInTheDocument(); - }); - }); - - it('should highlight active conversation', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-123', 'Active task')]; - - // Act - render( - - - - ); - - // Assert - const taskButton = screen.getByText('Active task').closest('button'); - expect(taskButton?.className).toContain('bg-accent'); - }); - - it('should not highlight inactive conversations', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'First task'), - createMockTask('task-2', 'Second task'), - ]; - - // Act - render( - - - - ); - - // Assert - Second task should not be highlighted with the active class - // The component uses 'bg-accent' class for active state, while hover state uses 'hover:bg-accent' - const secondTaskButton = screen.getByText('Second task').closest('button'); - const classNames = (secondTaskButton?.className || '').split(' '); - // Filter to find only exact 'bg-accent' class, not 'hover:bg-accent' - const hasBgAccent = classNames.some(c => c === 'bg-accent'); - expect(hasBgAccent).toBe(false); - }); - }); - - describe('new task button', () => { - it('should navigate to home when New Task is clicked', async () => { - // Arrange - render( - - - - ); - - // Act - const newTaskButton = screen.getByRole('button', { name: /new task/i }); - fireEvent.click(newTaskButton); - - // Assert - Button should be clickable (navigation handled by React Router) - await waitFor(() => { - expect(newTaskButton).toBeInTheDocument(); - }); - }); - - it('should display MessageSquarePlus icon in New Task button', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const newTaskButton = screen.getByRole('button', { name: /new task/i }); - const icon = newTaskButton.querySelector('svg'); - expect(icon).toBeInTheDocument(); - }); - }); - - describe('settings dialog', () => { - it('should open settings dialog when Settings button is clicked', async () => { - // Arrange - render( - - - - ); - - // Act - const settingsButton = screen.getByRole('button', { name: /settings/i }); - fireEvent.click(settingsButton); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('settings-dialog')).toBeInTheDocument(); - }); - }); - - it('should close settings dialog when close is triggered', async () => { - // Arrange - render( - - - - ); - - // Act - Open dialog - const settingsButton = screen.getByRole('button', { name: /settings/i }); - fireEvent.click(settingsButton); - - await waitFor(() => { - expect(screen.getByTestId('settings-dialog')).toBeInTheDocument(); - }); - - // Act - Close dialog - const closeButton = screen.getByRole('button', { name: /close settings/i }); - fireEvent.click(closeButton); - - // Assert - await waitFor(() => { - expect(screen.queryByTestId('settings-dialog')).not.toBeInTheDocument(); - }); - }); - }); - - describe('event subscriptions', () => { - it('should subscribe to task status changes on mount', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(mockOnTaskStatusChange).toHaveBeenCalled(); - }); - - it('should subscribe to task updates on mount', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(mockOnTaskUpdate).toHaveBeenCalled(); - }); - }); - - describe('layout structure', () => { - it('should render border between sections', () => { - // Arrange & Act - render( - - - - ); - - // Assert - Check for border classes - const sidebar = document.querySelector('.w-\\[260px\\]'); - expect(sidebar?.className).toContain('border-r'); - }); - - it('should render with correct height for full screen', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const sidebar = document.querySelector('.h-screen'); - expect(sidebar).toBeInTheDocument(); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/StreamingText.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/StreamingText.integration.test.tsx deleted file mode 100644 index 8e82f31fc..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/StreamingText.integration.test.tsx +++ /dev/null @@ -1,487 +0,0 @@ -/** - * Integration tests for StreamingText component and useStreamingState hook - * Tests text streaming animation, completion state, and different content types - * @module __tests__/integration/renderer/components/StreamingText.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, vi } from 'vitest'; -import { render, screen, act } from '@testing-library/react'; -import { renderHook } from '@testing-library/react'; -import { StreamingText, useStreamingState } from '@/components/ui/streaming-text'; - -describe('StreamingText Integration', () => { - describe('basic rendering', () => { - it('should render with container div', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByText('Hello World')).toBeInTheDocument(); - }); - - it('should render full text when isComplete is true', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('Complete text'); - }); - - it('should render empty initially when not complete', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - Initially empty - expect(screen.getByTestId('content')).toHaveTextContent(''); - }); - - it('should apply custom className', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - const container = document.querySelector('.custom-class'); - expect(container).toBeInTheDocument(); - }); - }); - - describe('text streaming animation', () => { - it('should start with zero characters when streaming', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent(''); - }); - }); - - describe('completion state', () => { - it('should show full text immediately when isComplete is true', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('Immediate complete'); - }); - - it('should stop streaming when isComplete changes to true', () => { - // Arrange - const { rerender } = render( - - {(text) => {text}} - - ); - - // Act - Complete immediately - rerender( - - {(text) => {text}} - - ); - - // Assert - Should immediately show full text - expect(screen.getByTestId('content')).toHaveTextContent('Partial text'); - }); - - it('should not call onComplete when isComplete is initially true', () => { - // Arrange - const onComplete = vi.fn(); - - // Act - render( - - {(text) => {text}} - - ); - - // Assert - onComplete should NOT be called for already complete text - expect(onComplete).not.toHaveBeenCalled(); - }); - }); - - describe('cursor indicator', () => { - it('should show cursor while streaming', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - const cursor = document.querySelector('.animate-pulse'); - expect(cursor).toBeInTheDocument(); - }); - - it('should hide cursor when streaming is complete', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - const cursor = document.querySelector('.animate-pulse'); - expect(cursor).not.toBeInTheDocument(); - }); - }); - - describe('different content types', () => { - it('should handle plain text content', () => { - // Arrange & Act - render( - - {(text) =>

{text}

} -
- ); - - // Assert - expect(screen.getByText('Plain text content')).toBeInTheDocument(); - }); - - it('should handle markdown-style text', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('**Bold** and *italic* text'); - }); - - it('should handle code content', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('const x = 42;'); - }); - - it('should handle multiline content', () => { - // Arrange - const multilineText = `Line 1 -Line 2 -Line 3`; - - // Act - render( - - {(text) =>
{text}
} -
- ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('Line 1'); - expect(screen.getByTestId('content')).toHaveTextContent('Line 2'); - expect(screen.getByTestId('content')).toHaveTextContent('Line 3'); - }); - - it('should handle empty text', () => { - // Arrange & Act - render( - - {(text) => {text || 'empty'}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('empty'); - }); - - it('should handle special characters', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('Special chars: @#$%^&*()'); - }); - - it('should handle unicode characters', () => { - // Arrange & Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content')).toHaveTextContent('Unicode: Hello World'); - }); - - it('should handle long text content', () => { - // Arrange - const longText = 'A'.repeat(1000); - - // Act - render( - - {(text) => {text}} - - ); - - // Assert - expect(screen.getByTestId('content').textContent?.length).toBe(1000); - }); - }); - - describe('render prop flexibility', () => { - it('should pass displayed text to children render prop', () => { - // Arrange - const renderSpy = vi.fn((text: string) => {text}); - - // Act - render( - - {renderSpy} - - ); - - // Assert - expect(renderSpy).toHaveBeenCalledWith('Test'); - }); - - it('should allow custom rendering of text', () => { - // Arrange & Act - render( - - {(text) => ( -
- {text.toUpperCase()} -
- )} -
- ); - - // Assert - expect(screen.getByTestId('custom-render')).toHaveTextContent('CUSTOM'); - }); - - it('should allow wrapping text in complex markup', () => { - // Arrange & Act - render( - - {(text) => ( -
-
Header
-

{text}

-
Footer
-
- )} -
- ); - - // Assert - expect(screen.getByTestId('body')).toHaveTextContent('Wrapped'); - }); - }); -}); - -describe('useStreamingState Hook', () => { - describe('initial state', () => { - it('should return shouldStream as true for latest running assistant message', () => { - // Arrange & Act - const { result } = renderHook(() => - useStreamingState('msg-1', true, true) - ); - - // Assert - expect(result.current.shouldStream).toBe(true); - }); - - it('should return shouldStream as false when not latest assistant message', () => { - // Arrange & Act - const { result } = renderHook(() => - useStreamingState('msg-1', false, true) - ); - - // Assert - expect(result.current.shouldStream).toBe(false); - }); - - it('should return shouldStream as false when task not running', () => { - // Arrange & Act - const { result } = renderHook(() => - useStreamingState('msg-1', true, false) - ); - - // Assert - expect(result.current.shouldStream).toBe(false); - }); - - it('should return isComplete as opposite of shouldStream', () => { - // Arrange & Act - const { result } = renderHook(() => - useStreamingState('msg-1', true, true) - ); - - // Assert - expect(result.current.isComplete).toBe(false); - }); - }); - - describe('streaming completion', () => { - it('should provide onComplete callback', () => { - // Arrange & Act - const { result } = renderHook(() => - useStreamingState('msg-1', true, true) - ); - - // Assert - expect(typeof result.current.onComplete).toBe('function'); - }); - - it('should mark as complete after onComplete is called', () => { - // Arrange - const { result, rerender } = renderHook(() => - useStreamingState('msg-1', true, true) - ); - - // Act - act(() => { - result.current.onComplete(); - }); - - // Trigger re-render - rerender(); - - // Assert - expect(result.current.shouldStream).toBe(false); - expect(result.current.isComplete).toBe(true); - }); - }); - - describe('message ID changes', () => { - it('should reset streaming state when message ID changes', () => { - // Arrange - const { result, rerender } = renderHook( - ({ messageId }) => useStreamingState(messageId, true, true), - { initialProps: { messageId: 'msg-1' } } - ); - - // Act - Complete streaming - act(() => { - result.current.onComplete(); - }); - - // Change message ID - rerender({ messageId: 'msg-2' }); - - // Assert - Should be streaming again - expect(result.current.shouldStream).toBe(true); - }); - }); - - describe('task running state changes', () => { - it('should stop streaming when task stops running', () => { - // Arrange - const { result, rerender } = renderHook( - ({ isRunning }) => useStreamingState('msg-1', true, isRunning), - { initialProps: { isRunning: true } } - ); - - expect(result.current.shouldStream).toBe(true); - - // Act - Stop task - rerender({ isRunning: false }); - - // Assert - expect(result.current.shouldStream).toBe(false); - expect(result.current.isComplete).toBe(true); - }); - }); - - describe('latest message changes', () => { - it('should stop streaming when no longer latest message', () => { - // Arrange - const { result, rerender } = renderHook( - ({ isLatest }) => useStreamingState('msg-1', isLatest, true), - { initialProps: { isLatest: true } } - ); - - expect(result.current.shouldStream).toBe(true); - - // Act - No longer latest - rerender({ isLatest: false }); - - // Assert - expect(result.current.shouldStream).toBe(false); - }); - }); - - describe('edge cases', () => { - it('should handle all flags being false', () => { - // Arrange & Act - const { result } = renderHook(() => - useStreamingState('msg-1', false, false) - ); - - // Assert - expect(result.current.shouldStream).toBe(false); - expect(result.current.isComplete).toBe(true); - }); - - it('should handle rapid state changes', () => { - // Arrange - const { result, rerender } = renderHook( - ({ isLatest, isRunning }) => - useStreamingState('msg-1', isLatest, isRunning), - { initialProps: { isLatest: true, isRunning: true } } - ); - - // Act - Rapid changes - for (let i = 0; i < 10; i++) { - rerender({ isLatest: i % 2 === 0, isRunning: i % 3 === 0 }); - } - - // Assert - Should be in consistent state - expect(typeof result.current.shouldStream).toBe('boolean'); - expect(typeof result.current.isComplete).toBe('boolean'); - }); - - it('should handle empty message ID', () => { - // Arrange & Act - const { result } = renderHook(() => - useStreamingState('', true, true) - ); - - // Assert - Should still work - expect(result.current.shouldStream).toBe(true); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskHistory.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskHistory.integration.test.tsx deleted file mode 100644 index 4ac675448..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskHistory.integration.test.tsx +++ /dev/null @@ -1,791 +0,0 @@ -/** - * Integration tests for TaskHistory component - * Tests task list rendering, selection, deletion, and history clearing - * @module __tests__/integration/renderer/components/TaskHistory.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, fireEvent } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import type { Task, TaskStatus } from '@accomplish/shared'; - -// Create mock functions for task store -const mockLoadTasks = vi.fn(); -const mockDeleteTask = vi.fn(); -const mockClearHistory = vi.fn(); - -// Create a store state holder for testing -let mockStoreState = { - tasks: [] as Task[], - loadTasks: mockLoadTasks, - deleteTask: mockDeleteTask, - clearHistory: mockClearHistory, -}; - -// Mock the task store -vi.mock('@/stores/taskStore', () => ({ - useTaskStore: () => mockStoreState, -})); - -// Helper to create mock tasks -function createMockTask( - id: string, - prompt: string = 'Test task', - status: TaskStatus = 'completed', - createdAt?: string, - messageCount: number = 0 -): Task { - return { - id, - prompt, - status, - messages: Array(messageCount).fill({ - id: 'msg-1', - type: 'assistant', - content: 'Test message', - timestamp: new Date().toISOString(), - }), - createdAt: createdAt || new Date().toISOString(), - }; -} - -// Need to import after mocks are set up -import TaskHistory from '@/components/history/TaskHistory'; - -describe('TaskHistory Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset store state - mockStoreState = { - tasks: [], - loadTasks: mockLoadTasks, - deleteTask: mockDeleteTask, - clearHistory: mockClearHistory, - }; - // Mock window.confirm - vi.spyOn(window, 'confirm').mockImplementation(() => true); - }); - - describe('empty state rendering', () => { - it('should render empty state when no tasks exist', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(screen.getByText(/no tasks yet/i)).toBeInTheDocument(); - }); - - it('should render helpful message in empty state', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(screen.getByText(/start by describing what you want to accomplish/i)).toBeInTheDocument(); - }); - - it('should not render task list in empty state', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const taskItems = document.querySelectorAll('[class*="rounded-card"]'); - expect(taskItems.length).toBe(0); - }); - - it('should not render Clear all button in empty state', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(screen.queryByText(/clear all/i)).not.toBeInTheDocument(); - }); - }); - - describe('task list rendering', () => { - it('should render task list when tasks exist', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'Send email to John'), - createMockTask('task-2', 'Create report'), - ]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Send email to John')).toBeInTheDocument(); - expect(screen.getByText('Create report')).toBeInTheDocument(); - }); - - it('should render Recent Tasks title when showTitle is true', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Test task')]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Recent Tasks')).toBeInTheDocument(); - }); - - it('should not render title when showTitle is false', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Test task')]; - - // Act - render( - - - - ); - - // Assert - expect(screen.queryByText('Recent Tasks')).not.toBeInTheDocument(); - }); - - it('should render task status indicator', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'My test task', 'completed')]; - - // Act - render( - - - - ); - - // Assert - Status label appears in the meta text - const metaText = screen.getByText(/Completed \u00B7/); - expect(metaText).toBeInTheDocument(); - }); - - it('should render message count for each task', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Task with messages', 'completed', undefined, 5)]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText(/5 messages/i)).toBeInTheDocument(); - }); - - it('should call loadTasks on mount', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(mockLoadTasks).toHaveBeenCalled(); - }); - }); - - describe('task status indicators', () => { - it('should show green indicator for completed tasks', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Completed task', 'completed')]; - - // Act - render( - - - - ); - - // Assert - const indicator = document.querySelector('.bg-success'); - expect(indicator).toBeInTheDocument(); - }); - - it('should show blue indicator for running tasks', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Running task', 'running')]; - - // Act - render( - - - - ); - - // Assert - const indicator = document.querySelector('.bg-accent-blue'); - expect(indicator).toBeInTheDocument(); - }); - - it('should show red indicator for failed tasks', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Failed task', 'failed')]; - - // Act - render( - - - - ); - - // Assert - const indicator = document.querySelector('.bg-danger'); - expect(indicator).toBeInTheDocument(); - }); - - it('should show grey indicator for cancelled tasks', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Cancelled task', 'cancelled')]; - - // Act - render( - - - - ); - - // Assert - const indicator = document.querySelector('.bg-text-muted'); - expect(indicator).toBeInTheDocument(); - }); - - it('should show yellow indicator for pending tasks', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Pending task', 'pending')]; - - // Act - render( - - - - ); - - // Assert - const indicator = document.querySelector('.bg-warning'); - expect(indicator).toBeInTheDocument(); - }); - - it('should show yellow indicator for waiting permission tasks', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'My test task', 'waiting_permission')]; - - // Act - render( - - - - ); - - // Assert - Status label appears in the meta text - const indicator = document.querySelector('.bg-warning'); - expect(indicator).toBeInTheDocument(); - const metaText = screen.getByText(/Waiting \u00B7/); - expect(metaText).toBeInTheDocument(); - }); - }); - - describe('task selection', () => { - it('should render tasks as clickable links', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-123', 'Clickable task')]; - - // Act - render( - - - - ); - - // Assert - const link = screen.getByText('Clickable task').closest('a'); - expect(link).toBeInTheDocument(); - expect(link).toHaveAttribute('href', '/execution/task-123'); - }); - - it('should navigate to correct task execution page', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'First task'), - createMockTask('task-2', 'Second task'), - ]; - - // Act - render( - - - - ); - - // Assert - const firstLink = screen.getByText('First task').closest('a'); - const secondLink = screen.getByText('Second task').closest('a'); - expect(firstLink).toHaveAttribute('href', '/execution/task-1'); - expect(secondLink).toHaveAttribute('href', '/execution/task-2'); - }); - }); - - describe('task deletion', () => { - it('should render delete button for each task', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Deletable task')]; - - // Act - render( - - - - ); - - // Assert - const deleteButton = document.querySelector('button'); - expect(deleteButton).toBeInTheDocument(); - }); - - it('should show confirmation dialog when delete is clicked', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Deletable task')]; - const confirmSpy = vi.spyOn(window, 'confirm').mockReturnValue(false); - - // Act - render( - - - - ); - - const taskCard = screen.getByText('Deletable task').closest('a'); - const deleteButton = taskCard?.querySelector('button'); - if (deleteButton) { - fireEvent.click(deleteButton); - } - - // Assert - expect(confirmSpy).toHaveBeenCalledWith('Delete this task?'); - }); - - it('should call deleteTask when confirmation is accepted', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Deletable task')]; - vi.spyOn(window, 'confirm').mockReturnValue(true); - - // Act - render( - - - - ); - - const taskCard = screen.getByText('Deletable task').closest('a'); - const deleteButton = taskCard?.querySelector('button'); - if (deleteButton) { - fireEvent.click(deleteButton); - } - - // Assert - expect(mockDeleteTask).toHaveBeenCalledWith('task-1'); - }); - - it('should not call deleteTask when confirmation is cancelled', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Deletable task')]; - vi.spyOn(window, 'confirm').mockReturnValue(false); - - // Act - render( - - - - ); - - const taskCard = screen.getByText('Deletable task').closest('a'); - const deleteButton = taskCard?.querySelector('button'); - if (deleteButton) { - fireEvent.click(deleteButton); - } - - // Assert - expect(mockDeleteTask).not.toHaveBeenCalled(); - }); - - it('should prevent navigation when delete button is clicked', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Deletable task')]; - vi.spyOn(window, 'confirm').mockReturnValue(true); - - // Act - render( - - - - ); - - const taskCard = screen.getByText('Deletable task').closest('a'); - const deleteButton = taskCard?.querySelector('button'); - if (deleteButton) { - fireEvent.click(deleteButton); - } - - // Assert - Delete should be called but no navigation - expect(mockDeleteTask).toHaveBeenCalled(); - }); - }); - - describe('clear history', () => { - it('should render Clear all button when tasks exist and no limit', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Test task')]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText(/clear all/i)).toBeInTheDocument(); - }); - - it('should not render Clear all button when limit is set', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Test task')]; - - // Act - render( - - - - ); - - // Assert - expect(screen.queryByText(/clear all/i)).not.toBeInTheDocument(); - }); - - it('should show confirmation dialog when Clear all is clicked', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Test task')]; - const confirmSpy = vi.spyOn(window, 'confirm').mockReturnValue(false); - - // Act - render( - - - - ); - - fireEvent.click(screen.getByText(/clear all/i)); - - // Assert - expect(confirmSpy).toHaveBeenCalledWith('Are you sure you want to clear all task history?'); - }); - - it('should call clearHistory when confirmation is accepted', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Test task')]; - vi.spyOn(window, 'confirm').mockReturnValue(true); - - // Act - render( - - - - ); - - fireEvent.click(screen.getByText(/clear all/i)); - - // Assert - expect(mockClearHistory).toHaveBeenCalled(); - }); - - it('should not call clearHistory when confirmation is cancelled', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Test task')]; - vi.spyOn(window, 'confirm').mockReturnValue(false); - - // Act - render( - - - - ); - - fireEvent.click(screen.getByText(/clear all/i)); - - // Assert - expect(mockClearHistory).not.toHaveBeenCalled(); - }); - }); - - describe('limit functionality', () => { - it('should limit displayed tasks when limit prop is provided', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'Task 1'), - createMockTask('task-2', 'Task 2'), - createMockTask('task-3', 'Task 3'), - createMockTask('task-4', 'Task 4'), - createMockTask('task-5', 'Task 5'), - ]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Task 1')).toBeInTheDocument(); - expect(screen.getByText('Task 2')).toBeInTheDocument(); - expect(screen.getByText('Task 3')).toBeInTheDocument(); - expect(screen.queryByText('Task 4')).not.toBeInTheDocument(); - expect(screen.queryByText('Task 5')).not.toBeInTheDocument(); - }); - - it('should show View all link when more tasks exist than limit', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'Task 1'), - createMockTask('task-2', 'Task 2'), - createMockTask('task-3', 'Task 3'), - createMockTask('task-4', 'Task 4'), - ]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText(/view all 4 tasks/i)).toBeInTheDocument(); - }); - - it('should link to history page in View all link', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'Task 1'), - createMockTask('task-2', 'Task 2'), - createMockTask('task-3', 'Task 3'), - ]; - - // Act - render( - - - - ); - - // Assert - const viewAllLink = screen.getByText(/view all/i).closest('a'); - expect(viewAllLink).toHaveAttribute('href', '/history'); - }); - - it('should not show View all link when tasks fit within limit', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'Task 1'), - createMockTask('task-2', 'Task 2'), - ]; - - // Act - render( - - - - ); - - // Assert - expect(screen.queryByText(/view all/i)).not.toBeInTheDocument(); - }); - - it('should show all tasks when no limit is provided', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'Task 1'), - createMockTask('task-2', 'Task 2'), - createMockTask('task-3', 'Task 3'), - createMockTask('task-4', 'Task 4'), - createMockTask('task-5', 'Task 5'), - ]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Task 1')).toBeInTheDocument(); - expect(screen.getByText('Task 2')).toBeInTheDocument(); - expect(screen.getByText('Task 3')).toBeInTheDocument(); - expect(screen.getByText('Task 4')).toBeInTheDocument(); - expect(screen.getByText('Task 5')).toBeInTheDocument(); - }); - }); - - describe('time ago display', () => { - it('should show "just now" for recent tasks', () => { - // Arrange - const now = new Date().toISOString(); - mockStoreState.tasks = [createMockTask('task-1', 'Recent task', 'completed', now)]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText(/just now/i)).toBeInTheDocument(); - }); - - it('should show minutes ago for tasks within an hour', () => { - // Arrange - const thirtyMinutesAgo = new Date(Date.now() - 30 * 60 * 1000).toISOString(); - mockStoreState.tasks = [createMockTask('task-1', 'Old task', 'completed', thirtyMinutesAgo)]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText(/30m ago/i)).toBeInTheDocument(); - }); - - it('should show hours ago for tasks within a day', () => { - // Arrange - const fiveHoursAgo = new Date(Date.now() - 5 * 60 * 60 * 1000).toISOString(); - mockStoreState.tasks = [createMockTask('task-1', 'Older task', 'completed', fiveHoursAgo)]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText(/5h ago/i)).toBeInTheDocument(); - }); - - it('should show days ago for tasks older than a day', () => { - // Arrange - const threeDaysAgo = new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString(); - mockStoreState.tasks = [createMockTask('task-1', 'Very old task', 'completed', threeDaysAgo)]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText(/3d ago/i)).toBeInTheDocument(); - }); - }); - - describe('styling and layout', () => { - it('should render tasks with card styling', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Styled task')]; - - // Act - render( - - - - ); - - // Assert - const taskCard = screen.getByText('Styled task').closest('a'); - expect(taskCard?.className).toContain('rounded-card'); - }); - - it('should render tasks with hover effect', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'Hover task')]; - - // Act - render( - - - - ); - - // Assert - const taskCard = screen.getByText('Hover task').closest('a'); - expect(taskCard?.className).toContain('hover:shadow-card-hover'); - }); - - it('should truncate long task prompts', () => { - // Arrange - mockStoreState.tasks = [createMockTask('task-1', 'This is a very long task prompt that should be truncated')]; - - // Act - render( - - - - ); - - // Assert - const promptElement = screen.getByText(/this is a very long task prompt/i); - expect(promptElement.className).toContain('truncate'); - }); - - it('should render tasks in a vertical list', () => { - // Arrange - mockStoreState.tasks = [ - createMockTask('task-1', 'Task 1'), - createMockTask('task-2', 'Task 2'), - ]; - - // Act - render( - - - - ); - - // Assert - const container = document.querySelector('.space-y-2'); - expect(container).toBeInTheDocument(); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskInputBar.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskInputBar.integration.test.tsx deleted file mode 100644 index 0abd2051c..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskInputBar.integration.test.tsx +++ /dev/null @@ -1,526 +0,0 @@ -/** - * Integration tests for TaskInputBar component - * Tests component rendering and user interactions with mocked window.accomplish API - * @module __tests__/integration/renderer/components/TaskInputBar.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, fireEvent } from '@testing-library/react'; -import TaskInputBar from '@/components/landing/TaskInputBar'; - -// Mock analytics to prevent tracking calls -vi.mock('@/lib/analytics', () => ({ - analytics: { - trackSubmitTask: vi.fn(), - }, -})); - -// Mock accomplish API -const mockAccomplish = { - logEvent: vi.fn().mockResolvedValue(undefined), - getSelectedModel: vi.fn().mockResolvedValue({ provider: 'anthropic', id: 'claude-3-opus' }), - getOllamaConfig: vi.fn().mockResolvedValue(null), - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateApiKeyForProvider: vi.fn().mockResolvedValue({ valid: true }), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, -})); - -describe('TaskInputBar Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - describe('rendering', () => { - it('should render with empty state', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const textarea = screen.getByRole('textbox'); - expect(textarea).toBeInTheDocument(); - expect(textarea).toHaveValue(''); - }); - - it('should render with default placeholder', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const textarea = screen.getByPlaceholderText('Assign a task or ask anything'); - expect(textarea).toBeInTheDocument(); - }); - - it('should render with custom placeholder', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - const customPlaceholder = 'Enter your task here'; - - // Act - render( - - ); - - // Assert - const textarea = screen.getByPlaceholderText(customPlaceholder); - expect(textarea).toBeInTheDocument(); - }); - - it('should render with provided value', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - const taskValue = 'Review my inbox for urgent messages'; - - // Act - render( - - ); - - // Assert - const textarea = screen.getByRole('textbox'); - expect(textarea).toHaveValue(taskValue); - }); - - it('should render submit button', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const submitButton = screen.getByRole('button', { name: /submit/i }); - expect(submitButton).toBeInTheDocument(); - }); - }); - - describe('user input handling', () => { - it('should call onChange when user types', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - render( - - ); - - // Act - const textarea = screen.getByRole('textbox'); - fireEvent.change(textarea, { target: { value: 'New task input' } }); - - // Assert - expect(onChange).toHaveBeenCalledWith('New task input'); - }); - - it('should call onChange with each input change', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - const { rerender } = render( - - ); - - // Act - First change - const textarea = screen.getByRole('textbox'); - fireEvent.change(textarea, { target: { value: 'First' } }); - - // Rerender with updated value - rerender( - - ); - - // Act - Second change - fireEvent.change(textarea, { target: { value: 'First input' } }); - - // Assert - expect(onChange).toHaveBeenCalledTimes(2); - expect(onChange).toHaveBeenNthCalledWith(1, 'First'); - expect(onChange).toHaveBeenNthCalledWith(2, 'First input'); - }); - }); - - describe('submit button behavior', () => { - it('should disable submit button when value is empty', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const submitButton = screen.getByRole('button', { name: /submit/i }); - expect(submitButton).toBeDisabled(); - }); - - it('should disable submit button when value is only whitespace', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const submitButton = screen.getByRole('button', { name: /submit/i }); - expect(submitButton).toBeDisabled(); - }); - - it('should enable submit button when value has content', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const submitButton = screen.getByRole('button', { name: /submit/i }); - expect(submitButton).not.toBeDisabled(); - }); - - it('should call onSubmit when submit button is clicked', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - render( - - ); - - // Act - const submitButton = screen.getByRole('button', { name: /submit/i }); - fireEvent.click(submitButton); - - // Assert - expect(onSubmit).toHaveBeenCalledTimes(1); - }); - - it('should call onSubmit when Enter is pressed without Shift', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - render( - - ); - - // Act - const textarea = screen.getByRole('textbox'); - fireEvent.keyDown(textarea, { key: 'Enter', shiftKey: false }); - - // Assert - expect(onSubmit).toHaveBeenCalledTimes(1); - }); - - it('should not call onSubmit when Shift+Enter is pressed', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - render( - - ); - - // Act - const textarea = screen.getByRole('textbox'); - fireEvent.keyDown(textarea, { key: 'Enter', shiftKey: true }); - - // Assert - expect(onSubmit).not.toHaveBeenCalled(); - }); - - it('should not submit when clicking disabled button', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - render( - - ); - - // Act - const submitButton = screen.getByRole('button', { name: /submit/i }); - fireEvent.click(submitButton); - - // Assert - expect(onSubmit).not.toHaveBeenCalled(); - }); - }); - - describe('loading state', () => { - it('should disable textarea when loading', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const textarea = screen.getByRole('textbox'); - expect(textarea).toBeDisabled(); - }); - - it('should disable submit button when loading', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const submitButton = screen.getByRole('button', { name: /submit/i }); - expect(submitButton).toBeDisabled(); - }); - - it('should show loading spinner in submit button when loading', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - Check for the animate-spin class on the loader icon - const submitButton = screen.getByRole('button', { name: /submit/i }); - const spinner = submitButton.querySelector('.animate-spin'); - expect(spinner).toBeInTheDocument(); - }); - - it('should have disabled textarea that prevents user input when loading', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - render( - - ); - - // Assert - textarea is disabled, preventing real user interaction - // Note: In jsdom, keydown events still fire on disabled elements, - // but in a real browser, disabled elements don't receive keyboard input - const textarea = screen.getByRole('textbox'); - expect(textarea).toBeDisabled(); - }); - }); - - describe('disabled state', () => { - it('should disable textarea when disabled prop is true', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const textarea = screen.getByRole('textbox'); - expect(textarea).toBeDisabled(); - }); - - it('should disable submit button when disabled prop is true', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const submitButton = screen.getByRole('button', { name: /submit/i }); - expect(submitButton).toBeDisabled(); - }); - }); - - describe('large variant', () => { - it('should apply large text style when large prop is true', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const textarea = screen.getByRole('textbox'); - expect(textarea.className).toContain('text-[20px]'); - }); - - it('should apply default text size when large prop is false', () => { - // Arrange - const onChange = vi.fn(); - const onSubmit = vi.fn(); - - // Act - render( - - ); - - // Assert - const textarea = screen.getByRole('textbox'); - expect(textarea.className).toContain('text-sm'); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskLauncher.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskLauncher.integration.test.tsx deleted file mode 100644 index a4ca005bc..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/components/TaskLauncher.integration.test.tsx +++ /dev/null @@ -1,1122 +0,0 @@ -/** - * Integration tests for TaskLauncher and TaskLauncherItem components - * Tests rendering, filtering, keyboard navigation, and task selection - * @module __tests__/integration/renderer/components/TaskLauncher.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import type { Task, TaskStatus } from '@accomplish/shared'; - -// Mock analytics to prevent tracking calls -vi.mock('@/lib/analytics', () => ({ - analytics: { - trackNewTask: vi.fn(), - }, -})); - -// Create mock functions outside of mock factory -const mockStartTask = vi.fn(); -const mockCloseLauncher = vi.fn(); -const mockHasAnyApiKey = vi.fn(); - -// Helper to create mock tasks -function createMockTask( - id: string, - prompt: string = 'Test task', - status: TaskStatus = 'completed', - createdAt?: string -): Task { - return { - id, - prompt, - status, - messages: [], - createdAt: createdAt || new Date().toISOString(), - }; -} - -// Mock accomplish API -const mockAccomplish = { - hasAnyApiKey: mockHasAnyApiKey, - getSelectedModel: vi.fn().mockResolvedValue({ provider: 'anthropic', id: 'claude-3-opus' }), - getOllamaConfig: vi.fn().mockResolvedValue(null), - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateApiKeyForProvider: vi.fn().mockResolvedValue({ valid: true }), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, -})); - -// Create a store state holder for testing -let mockStoreState = { - isLauncherOpen: false, - closeLauncher: mockCloseLauncher, - tasks: [] as Task[], - startTask: mockStartTask, -}; - -// Mock the task store -vi.mock('@/stores/taskStore', () => ({ - useTaskStore: () => mockStoreState, -})); - -// Mock framer-motion to simplify testing animations -vi.mock('framer-motion', () => ({ - motion: { - div: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( -
{children}
- ), - }, - AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}, -})); - -// Need to import after mocks are set up -import TaskLauncher from '@/components/TaskLauncher/TaskLauncher'; -import TaskLauncherItem from '@/components/TaskLauncher/TaskLauncherItem'; - -describe('TaskLauncherItem', () => { - const mockOnClick = vi.fn(); - - beforeEach(() => { - vi.clearAllMocks(); - }); - - describe('rendering', () => { - it('should render task prompt', () => { - // Arrange - const task = createMockTask('task-1', 'Check my email inbox'); - - // Act - render(); - - // Assert - expect(screen.getByText('Check my email inbox')).toBeInTheDocument(); - }); - - it('should render task with truncated long prompt', () => { - // Arrange - const longPrompt = 'This is a very long task prompt that should be truncated when displayed in the UI to prevent overflow'; - const task = createMockTask('task-1', longPrompt); - - // Act - render(); - - // Assert - const promptElement = screen.getByText(longPrompt); - expect(promptElement.className).toContain('truncate'); - }); - }); - - describe('status icons', () => { - it('should show spinning loader for running tasks', () => { - // Arrange - const task = createMockTask('task-1', 'Running task', 'running'); - - // Act - const { container } = render(); - - // Assert - Check for spinning loader icon - const spinner = container.querySelector('.animate-spin'); - expect(spinner).toBeInTheDocument(); - expect(spinner?.getAttribute('class')).toContain('text-primary'); - }); - - it('should show checkmark for completed tasks', () => { - // Arrange - const task = createMockTask('task-1', 'Completed task', 'completed'); - - // Act - const { container } = render(); - - // Assert - CheckCircle2 icon should have green color - const icon = container.querySelector('.text-green-500'); - expect(icon).toBeInTheDocument(); - }); - - it('should show X icon for failed tasks', () => { - // Arrange - const task = createMockTask('task-1', 'Failed task', 'failed'); - - // Act - const { container } = render(); - - // Assert - XCircle icon should have destructive color - const icon = container.querySelector('.text-destructive'); - expect(icon).toBeInTheDocument(); - }); - - it('should show alert icon for cancelled tasks', () => { - // Arrange - const task = createMockTask('task-1', 'Cancelled task', 'cancelled'); - - // Act - const { container } = render(); - - // Assert - AlertCircle icon should have yellow color - const icon = container.querySelector('.text-yellow-500'); - expect(icon).toBeInTheDocument(); - }); - - it('should show alert icon for interrupted tasks', () => { - // Arrange - const task = createMockTask('task-1', 'Interrupted task', 'interrupted'); - - // Act - const { container } = render(); - - // Assert - AlertCircle icon should have yellow color - const icon = container.querySelector('.text-yellow-500'); - expect(icon).toBeInTheDocument(); - }); - }); - - describe('relative date formatting', () => { - it('should show "Today" for tasks created today', () => { - // Arrange - const today = new Date(); - const task = createMockTask('task-1', 'Today task', 'completed', today.toISOString()); - - // Act - render(); - - // Assert - expect(screen.getByText('Today')).toBeInTheDocument(); - }); - - it('should show "Yesterday" for tasks created yesterday', () => { - // Arrange - const yesterday = new Date(); - yesterday.setDate(yesterday.getDate() - 1); - const task = createMockTask('task-1', 'Yesterday task', 'completed', yesterday.toISOString()); - - // Act - render(); - - // Assert - expect(screen.getByText('Yesterday')).toBeInTheDocument(); - }); - - it('should show weekday name for tasks within last 7 days', () => { - // Arrange - const twoDaysAgo = new Date(); - twoDaysAgo.setDate(twoDaysAgo.getDate() - 2); - const task = createMockTask('task-1', 'Recent task', 'completed', twoDaysAgo.toISOString()); - - // Act - render(); - - // Assert - Should show weekday name (e.g., "Monday", "Tuesday") - const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - const expectedWeekday = weekdays[twoDaysAgo.getDay()]; - expect(screen.getByText(expectedWeekday)).toBeInTheDocument(); - }); - - it('should show month and day for tasks older than 7 days', () => { - // Arrange - const tenDaysAgo = new Date(); - tenDaysAgo.setDate(tenDaysAgo.getDate() - 10); - const task = createMockTask('task-1', 'Old task', 'completed', tenDaysAgo.toISOString()); - - // Act - render(); - - // Assert - Should show format like "Jan 5" - const expectedDate = tenDaysAgo.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }); - expect(screen.getByText(expectedDate)).toBeInTheDocument(); - }); - }); - - describe('selection state', () => { - it('should highlight when isSelected is true', () => { - // Arrange - const task = createMockTask('task-1', 'Selected task'); - - // Act - const { container } = render(); - - // Assert - const button = container.querySelector('button'); - expect(button?.className).toContain('bg-primary'); - expect(button?.className).toContain('text-primary-foreground'); - }); - - it('should not highlight when isSelected is false', () => { - // Arrange - const task = createMockTask('task-1', 'Unselected task'); - - // Act - const { container } = render(); - - // Assert - const button = container.querySelector('button'); - expect(button?.className).toContain('text-foreground'); - expect(button?.className).toContain('hover:bg-accent'); - }); - - it('should apply different date text color when selected', () => { - // Arrange - const task = createMockTask('task-1', 'Task'); - - // Act - const { container } = render(); - - // Assert - Date text should use primary-foreground opacity - const dateElement = container.querySelector('.text-primary-foreground\\/70'); - expect(dateElement).toBeInTheDocument(); - }); - - it('should apply muted date text color when not selected', () => { - // Arrange - const task = createMockTask('task-1', 'Task'); - - // Act - const { container } = render(); - - // Assert - Date text should use muted foreground - const dateElement = container.querySelector('.text-muted-foreground'); - expect(dateElement).toBeInTheDocument(); - }); - }); - - describe('interaction', () => { - it('should call onClick when clicked', () => { - // Arrange - const task = createMockTask('task-1', 'Clickable task'); - - // Act - render(); - const button = screen.getByRole('button'); - fireEvent.click(button); - - // Assert - expect(mockOnClick).toHaveBeenCalledTimes(1); - }); - - it('should be a button element', () => { - // Arrange - const task = createMockTask('task-1', 'Task'); - - // Act - render(); - - // Assert - const button = screen.getByRole('button'); - expect(button.tagName).toBe('BUTTON'); - }); - }); -}); - -describe('TaskLauncher', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset store state - mockStoreState = { - isLauncherOpen: false, - closeLauncher: mockCloseLauncher, - tasks: [], - startTask: mockStartTask, - }; - // Set up default provider settings with a ready provider - mockAccomplish.getProviderSettings.mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }); - }); - - describe('opening and closing', () => { - it('should not render when isLauncherOpen is false', () => { - // Arrange - mockStoreState.isLauncherOpen = false; - - // Act - render( - - - - ); - - // Assert - expect(screen.queryByPlaceholderText('Search tasks...')).not.toBeInTheDocument(); - }); - - it('should render when isLauncherOpen is true', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByPlaceholderText('Search tasks...')).toBeInTheDocument(); - }); - - it('should show search input when open', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - const searchInput = screen.getByPlaceholderText('Search tasks...'); - expect(searchInput).toBeInTheDocument(); - expect(searchInput.tagName).toBe('INPUT'); - }); - - it('should show close button when open', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - const closeButton = screen.getByRole('button', { name: /close/i }); - expect(closeButton).toBeInTheDocument(); - }); - - it('should call closeLauncher when Escape is pressed', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.keyDown(searchInput, { key: 'Escape' }); - - // Assert - May be called more than once due to Dialog component - expect(mockCloseLauncher).toHaveBeenCalled(); - }); - - it('should call closeLauncher when close button is clicked', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - const closeButton = screen.getByRole('button', { name: /close/i }); - fireEvent.click(closeButton); - - // Assert - expect(mockCloseLauncher).toHaveBeenCalledTimes(1); - }); - }); - - describe('new task option', () => { - it('should show "New task" option', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('New task')).toBeInTheDocument(); - }); - - it('should show search query in new task option when search has text', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'my new task' } }); - - // Assert - expect(screen.getByText(/"my new task"/)).toBeInTheDocument(); - }); - - it('should not show search query preview when search is empty', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - expect(screen.queryByText(/—/)).not.toBeInTheDocument(); - }); - - it('should show Plus icon in new task option', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - const { container } = render( - - - - ); - - // Assert - Plus icon should be present - const newTaskButton = screen.getByText('New task').closest('button'); - const icon = newTaskButton?.querySelector('svg'); - expect(icon).toBeInTheDocument(); - }); - }); - - describe('task filtering', () => { - it('should show "Last 7 days" section when no search query', () => { - // Arrange - const today = new Date(); - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Recent task', 'completed', today.toISOString()), - ]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Last 7 days')).toBeInTheDocument(); - }); - - it('should show "Results" section when searching', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Check email'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'email' } }); - - // Assert - expect(screen.getByText('Results')).toBeInTheDocument(); - }); - - it('should filter tasks by search query', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Check my email inbox'), - createMockTask('task-2', 'Review calendar'), - createMockTask('task-3', 'Send email to team'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'email' } }); - - // Assert - expect(screen.getByText('Check my email inbox')).toBeInTheDocument(); - expect(screen.getByText('Send email to team')).toBeInTheDocument(); - expect(screen.queryByText('Review calendar')).not.toBeInTheDocument(); - }); - - it('should be case-insensitive when filtering', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Check my EMAIL inbox'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'email' } }); - - // Assert - expect(screen.getByText('Check my EMAIL inbox')).toBeInTheDocument(); - }); - - it('should show "No tasks found" when search has no results', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Check email'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'nonexistent' } }); - - // Assert - expect(screen.getByText('No tasks found')).toBeInTheDocument(); - }); - - it('should only show tasks from last 7 days when no search', () => { - // Arrange - const today = new Date(); - const fiveDaysAgo = new Date(); - fiveDaysAgo.setDate(today.getDate() - 5); - const tenDaysAgo = new Date(); - tenDaysAgo.setDate(today.getDate() - 10); - - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Recent task', 'completed', fiveDaysAgo.toISOString()), - createMockTask('task-2', 'Old task', 'completed', tenDaysAgo.toISOString()), - ]; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Recent task')).toBeInTheDocument(); - expect(screen.queryByText('Old task')).not.toBeInTheDocument(); - }); - - it('should show all matching tasks regardless of age when searching', () => { - // Arrange - const tenDaysAgo = new Date(); - tenDaysAgo.setDate(tenDaysAgo.getDate() - 10); - - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Old email task', 'completed', tenDaysAgo.toISOString()), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'email' } }); - - // Assert - expect(screen.getByText('Old email task')).toBeInTheDocument(); - }); - - it('should limit results to 10 tasks', () => { - // Arrange - const today = new Date(); - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = Array.from({ length: 15 }, (_, i) => - createMockTask(`task-${i}`, `Task ${i}`, 'completed', today.toISOString()) - ); - - // Act - render( - - - - ); - - // Assert - Should show 10 tasks maximum - // Check for task prompts (Task 0 through Task 9) - expect(screen.getByText('Task 0')).toBeInTheDocument(); - expect(screen.getByText('Task 9')).toBeInTheDocument(); - expect(screen.queryByText('Task 10')).not.toBeInTheDocument(); - }); - }); - - describe('keyboard navigation', () => { - it('should start with first item selected', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - const { container } = render( - - - - ); - - // Assert - "New task" should be selected (has bg-primary) - const newTaskButton = screen.getByText('New task').closest('button'); - expect(newTaskButton?.className).toContain('bg-primary'); - }); - - it('should move selection down with ArrowDown', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'First task'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.keyDown(searchInput, { key: 'ArrowDown' }); - - // Assert - First task should now be selected - const taskButton = screen.getByText('First task').closest('button'); - expect(taskButton?.className).toContain('bg-primary'); - }); - - it('should move selection up with ArrowUp', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'First task'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.keyDown(searchInput, { key: 'ArrowDown' }); // Move to first task - fireEvent.keyDown(searchInput, { key: 'ArrowUp' }); // Move back to New task - - // Assert - "New task" should be selected again - const newTaskButton = screen.getByText('New task').closest('button'); - expect(newTaskButton?.className).toContain('bg-primary'); - }); - - it('should not move selection above first item', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.keyDown(searchInput, { key: 'ArrowUp' }); // Try to move up from first item - - // Assert - "New task" should still be selected - const newTaskButton = screen.getByText('New task').closest('button'); - expect(newTaskButton?.className).toContain('bg-primary'); - }); - - it('should not move selection below last item', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Only task'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.keyDown(searchInput, { key: 'ArrowDown' }); // Move to task - fireEvent.keyDown(searchInput, { key: 'ArrowDown' }); // Try to move past last item - - // Assert - Last task should still be selected - const taskButton = screen.getByText('Only task').closest('button'); - expect(taskButton?.className).toContain('bg-primary'); - }); - - it('should reset selection when reopened', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-1', 'Task'), - ]; - - // Act - const { rerender } = render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.keyDown(searchInput, { key: 'ArrowDown' }); // Move to task - - // Close and reopen - mockStoreState.isLauncherOpen = false; - rerender( - - - - ); - - mockStoreState.isLauncherOpen = true; - rerender( - - - - ); - - // Assert - Selection should be back at first item - const newTaskButton = screen.getByText('New task').closest('button'); - expect(newTaskButton?.className).toContain('bg-primary'); - }); - }); - - describe('task selection', () => { - it('should navigate to home when New task is selected with empty search', async () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - const newTaskButton = screen.getByText('New task').closest('button'); - if (newTaskButton) { - fireEvent.click(newTaskButton); - } - - // Assert - await waitFor(() => { - expect(mockCloseLauncher).toHaveBeenCalled(); - }); - }); - - it('should start new task when New task is selected with search text', async () => { - // Arrange - mockStoreState.isLauncherOpen = true; - const mockTask = createMockTask('new-task', 'Test prompt'); - mockStartTask.mockResolvedValue(mockTask); - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'Test prompt' } }); - - const newTaskButton = screen.getByText('New task').closest('button'); - if (newTaskButton) { - fireEvent.click(newTaskButton); - } - - // Assert - await waitFor(() => { - expect(mockAccomplish.getProviderSettings).toHaveBeenCalled(); - expect(mockCloseLauncher).toHaveBeenCalled(); - expect(mockStartTask).toHaveBeenCalledWith( - expect.objectContaining({ - prompt: 'Test prompt', - }) - ); - }); - }); - - it('should navigate to home if no provider is ready when starting new task', async () => { - // Arrange - No ready provider - mockStoreState.isLauncherOpen = true; - mockAccomplish.getProviderSettings.mockResolvedValue({ - activeProviderId: null, - connectedProviders: {}, - debugMode: false, - }); - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'Test prompt' } }); - - const newTaskButton = screen.getByText('New task').closest('button'); - if (newTaskButton) { - fireEvent.click(newTaskButton); - } - - // Assert - await waitFor(() => { - expect(mockAccomplish.getProviderSettings).toHaveBeenCalled(); - expect(mockCloseLauncher).toHaveBeenCalled(); - expect(mockStartTask).not.toHaveBeenCalled(); - }); - }); - - it('should navigate to task when task item is clicked', async () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-123', 'Existing task'), - ]; - - // Act - render( - - - - ); - - const taskButton = screen.getByText('Existing task').closest('button'); - if (taskButton) { - fireEvent.click(taskButton); - } - - // Assert - await waitFor(() => { - expect(mockCloseLauncher).toHaveBeenCalled(); - }); - }); - - it('should navigate to task when Enter is pressed on selected task', async () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = [ - createMockTask('task-123', 'Keyboard task'), - ]; - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.keyDown(searchInput, { key: 'ArrowDown' }); // Move to task - fireEvent.keyDown(searchInput, { key: 'Enter' }); // Select task - - // Assert - await waitFor(() => { - expect(mockCloseLauncher).toHaveBeenCalled(); - }); - }); - }); - - describe('UI elements', () => { - it('should show Search icon', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - Search icon should be present - // Check that the search input exists (which has the Search icon next to it) - const searchInput = screen.getByPlaceholderText('Search tasks...'); - expect(searchInput).toBeInTheDocument(); - }); - - it('should show keyboard hints in footer', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - expect(screen.getByText('Navigate')).toBeInTheDocument(); - expect(screen.getByText('Select')).toBeInTheDocument(); - expect(screen.getByText('Close')).toBeInTheDocument(); - }); - - it('should render overlay when open', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - render( - - - - ); - - // Assert - When open, the dialog content should be visible - expect(screen.getByPlaceholderText('Search tasks...')).toBeInTheDocument(); - expect(screen.getByText('New task')).toBeInTheDocument(); - }); - }); - - describe('edge cases', () => { - it('should handle empty tasks array', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - mockStoreState.tasks = []; - - // Act - render( - - - - ); - - // Assert - Should show New task and no error - expect(screen.getByText('New task')).toBeInTheDocument(); - expect(screen.queryByText('Last 7 days')).not.toBeInTheDocument(); - }); - - it('should trim whitespace from search query', async () => { - // Arrange - mockStoreState.isLauncherOpen = true; - const mockTask = createMockTask('new-task', 'Trimmed prompt'); - mockStartTask.mockResolvedValue(mockTask); - - // Act - render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: ' Trimmed prompt ' } }); - - const newTaskButton = screen.getByText('New task').closest('button'); - if (newTaskButton) { - fireEvent.click(newTaskButton); - } - - // Assert - await waitFor(() => { - expect(mockStartTask).toHaveBeenCalledWith( - expect.objectContaining({ - prompt: 'Trimmed prompt', - }) - ); - }); - }); - - it('should clear search when reopened', () => { - // Arrange - mockStoreState.isLauncherOpen = true; - - // Act - const { rerender } = render( - - - - ); - - const searchInput = screen.getByPlaceholderText('Search tasks...'); - fireEvent.change(searchInput, { target: { value: 'some search' } }); - - // Close and reopen - mockStoreState.isLauncherOpen = false; - rerender( - - - - ); - - mockStoreState.isLauncherOpen = true; - rerender( - - - - ); - - // Assert - Search should be cleared - const newSearchInput = screen.getByPlaceholderText('Search tasks...'); - expect(newSearchInput).toHaveValue(''); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Execution.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Execution.integration.test.tsx deleted file mode 100644 index 7b213d2a7..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Execution.integration.test.tsx +++ /dev/null @@ -1,1380 +0,0 @@ -/** - * Integration tests for Execution page - * Tests rendering with active task, message display, and permission dialog - * @module __tests__/integration/renderer/pages/Execution.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { MemoryRouter, Routes, Route } from 'react-router-dom'; -import type { Task, TaskStatus, TaskMessage, PermissionRequest } from '@accomplish/shared'; - -// Create mock functions -const mockLoadTaskById = vi.fn(); -const mockAddTaskUpdate = vi.fn(); -const mockAddTaskUpdateBatch = vi.fn(); -const mockUpdateTaskStatus = vi.fn(); -const mockSetPermissionRequest = vi.fn(); -const mockRespondToPermission = vi.fn(); -const mockSendFollowUp = vi.fn(); -const mockCancelTask = vi.fn(); -const mockInterruptTask = vi.fn(); -const mockOnTaskUpdate = vi.fn(); -const mockOnTaskUpdateBatch = vi.fn(); -const mockOnPermissionRequest = vi.fn(); -const mockOnTaskStatusChange = vi.fn(); - -// Helper to create mock task -function createMockTask( - id: string, - prompt: string = 'Test task', - status: TaskStatus = 'running', - messages: TaskMessage[] = [] -): Task { - return { - id, - prompt, - status, - messages, - createdAt: new Date().toISOString(), - }; -} - -// Helper to create mock message -function createMockMessage( - id: string, - type: 'assistant' | 'user' | 'tool' | 'system' = 'assistant', - content: string = 'Test message' -): TaskMessage { - return { - id, - type, - content, - timestamp: new Date().toISOString(), - }; -} - -// Mock accomplish API -const mockAccomplish = { - onTaskUpdate: mockOnTaskUpdate.mockReturnValue(() => {}), - onTaskUpdateBatch: mockOnTaskUpdateBatch.mockReturnValue(() => {}), - onPermissionRequest: mockOnPermissionRequest.mockReturnValue(() => {}), - onTaskStatusChange: mockOnTaskStatusChange.mockReturnValue(() => {}), - onDebugLog: vi.fn().mockReturnValue(() => {}), - onDebugModeChange: vi.fn().mockReturnValue(() => {}), - getSelectedModel: vi.fn().mockResolvedValue({ provider: 'anthropic', id: 'claude-3-opus' }), - getOllamaConfig: vi.fn().mockResolvedValue(null), - getDebugMode: vi.fn().mockResolvedValue(false), - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateApiKeyForProvider: vi.fn().mockResolvedValue({ valid: true }), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, -})); - -// Mock store state holder -let mockStoreState: { - currentTask: Task | null; - loadTaskById: typeof mockLoadTaskById; - isLoading: boolean; - error: string | null; - addTaskUpdate: typeof mockAddTaskUpdate; - addTaskUpdateBatch: typeof mockAddTaskUpdateBatch; - updateTaskStatus: typeof mockUpdateTaskStatus; - setPermissionRequest: typeof mockSetPermissionRequest; - permissionRequest: PermissionRequest | null; - respondToPermission: typeof mockRespondToPermission; - sendFollowUp: typeof mockSendFollowUp; - cancelTask: typeof mockCancelTask; - interruptTask: typeof mockInterruptTask; - setupProgress: string | null; - setupProgressTaskId: string | null; - setupDownloadStep: number; -} = { - currentTask: null, - loadTaskById: mockLoadTaskById, - isLoading: false, - error: null, - addTaskUpdate: mockAddTaskUpdate, - addTaskUpdateBatch: mockAddTaskUpdateBatch, - updateTaskStatus: mockUpdateTaskStatus, - setPermissionRequest: mockSetPermissionRequest, - permissionRequest: null, - respondToPermission: mockRespondToPermission, - sendFollowUp: mockSendFollowUp, - cancelTask: mockCancelTask, - interruptTask: mockInterruptTask, - setupProgress: null, - setupProgressTaskId: null, - setupDownloadStep: 1, -}; - -// Mock the task store -vi.mock('@/stores/taskStore', () => ({ - useTaskStore: () => mockStoreState, -})); - -// Mock framer-motion for simpler testing -vi.mock('framer-motion', () => ({ - motion: { - div: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( -
{children}
- ), - button: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( - - ), - }, - AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}, -})); - -// Mock StreamingText component -vi.mock('@/components/ui/streaming-text', () => ({ - StreamingText: ({ text, children }: { text: string; children: (text: string) => React.ReactNode }) => ( - <>{children(text)} - ), -})); - -// Mock openwork icon -vi.mock('/assets/openwork-icon.png', () => ({ default: 'openwork-icon.png' })); - -// Import after mocks -import ExecutionPage from '@/pages/Execution'; - -// Wrapper component for routing tests -function renderWithRouter(taskId: string = 'task-123') { - return render( - - - } /> - Home Page} /> - - - ); -} - -describe('Execution Page Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset store state - mockStoreState = { - currentTask: null, - loadTaskById: mockLoadTaskById, - isLoading: false, - error: null, - addTaskUpdate: mockAddTaskUpdate, - addTaskUpdateBatch: mockAddTaskUpdateBatch, - updateTaskStatus: mockUpdateTaskStatus, - setPermissionRequest: mockSetPermissionRequest, - permissionRequest: null, - respondToPermission: mockRespondToPermission, - sendFollowUp: mockSendFollowUp, - cancelTask: mockCancelTask, - interruptTask: mockInterruptTask, - setupProgress: null, - setupProgressTaskId: null, - setupDownloadStep: 1, - }; - }); - - describe('rendering with active task', () => { - it('should call loadTaskById on mount', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(mockLoadTaskById).toHaveBeenCalledWith('task-123'); - }); - - it('should display loading spinner when no task loaded yet', () => { - // Arrange - no current task - - // Act - renderWithRouter('task-123'); - - // Assert - const spinner = document.querySelector('.animate-spin-ccw'); - expect(spinner).toBeInTheDocument(); - }); - - it('should display task prompt in header', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Review my email inbox'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Review my email inbox')).toBeInTheDocument(); - }); - - it('should display running status badge for running task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Running task', 'running'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Running')).toBeInTheDocument(); - }); - - it('should display completed status badge for completed task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Done task', 'completed'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Completed')).toBeInTheDocument(); - }); - - it('should display failed status badge for failed task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Failed task', 'failed'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Failed')).toBeInTheDocument(); - }); - - it('should display cancelled status badge for cancelled task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Cancelled task', 'cancelled'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Cancelled')).toBeInTheDocument(); - }); - - it('should display queued status badge for queued task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Queued task', 'queued'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Queued')).toBeInTheDocument(); - }); - - it('should display stopped status badge for interrupted task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Stopped task', 'interrupted'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Stopped')).toBeInTheDocument(); - }); - - it('should render back button', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123'); - - // Act - renderWithRouter('task-123'); - - // Assert - Look for the back arrow button - const buttons = screen.getAllByRole('button'); - const backButton = buttons.find(btn => btn.querySelector('svg')); - expect(backButton).toBeInTheDocument(); - }); - - it('should not render cancel button (removed from UI)', () => { - // Arrange - Cancel button was removed, only Stop button remains - mockStoreState.currentTask = createMockTask('task-123', 'Running', 'running'); - - // Act - renderWithRouter('task-123'); - - // Assert - Cancel button should not exist - expect(screen.queryByRole('button', { name: /cancel/i })).not.toBeInTheDocument(); - }); - }); - - describe('message display', () => { - it('should display user messages', () => { - // Arrange - const messages = [ - createMockMessage('msg-1', 'user', 'Check my inbox'), - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Check my inbox')).toBeInTheDocument(); - }); - - it('should display assistant messages', () => { - // Arrange - const messages = [ - createMockMessage('msg-1', 'assistant', 'I will check your inbox now.'), - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('I will check your inbox now.')).toBeInTheDocument(); - }); - - it('should display tool messages with tool name', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Reading files', - toolName: 'Read', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Reading files')).toBeInTheDocument(); - }); - - it('should display multiple messages in order', () => { - // Arrange - const messages = [ - createMockMessage('msg-1', 'user', 'First message'), - createMockMessage('msg-2', 'assistant', 'Second message'), - createMockMessage('msg-3', 'user', 'Third message'), - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('First message')).toBeInTheDocument(); - expect(screen.getByText('Second message')).toBeInTheDocument(); - expect(screen.getByText('Third message')).toBeInTheDocument(); - }); - - it('should show "Thinking..." indicator when running without tool', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', []); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Thinking...')).toBeInTheDocument(); - }); - - it('should display message timestamps', () => { - // Arrange - const timestamp = new Date().toISOString(); - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'assistant', - content: 'Test message', - timestamp, - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'completed', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - Check that a time is displayed - const timeRegex = /\d{1,2}:\d{2}:\d{2}/; - const timeElements = screen.getAllByText(timeRegex); - expect(timeElements.length).toBeGreaterThan(0); - }); - }); - - describe('permission dialog', () => { - it('should display permission dialog when permission request exists', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'tool', - toolName: 'Bash', - toolInput: { command: 'rm -rf /' }, - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Permission Required')).toBeInTheDocument(); - }); - - it('should display tool name in permission dialog', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'tool', - toolName: 'Bash', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText(/tool:\s*bash/i)).toBeInTheDocument(); - }); - - it('should render Allow and Deny buttons in permission dialog', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'tool', - toolName: 'Write', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByRole('button', { name: /allow/i })).toBeInTheDocument(); - expect(screen.getByRole('button', { name: /deny/i })).toBeInTheDocument(); - }); - - it('should call respondToPermission with allow when Allow is clicked', async () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'tool', - toolName: 'Write', - createdAt: new Date().toISOString(), - }; - - renderWithRouter('task-123'); - - // Act - const allowButton = screen.getByRole('button', { name: /allow/i }); - fireEvent.click(allowButton); - - // Assert - await waitFor(() => { - expect(mockRespondToPermission).toHaveBeenCalledWith({ - requestId: 'perm-1', - taskId: 'task-123', - decision: 'allow', - }); - }); - }); - - it('should call respondToPermission with deny when Deny is clicked', async () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'tool', - toolName: 'Write', - createdAt: new Date().toISOString(), - }; - - renderWithRouter('task-123'); - - // Act - const denyButton = screen.getByRole('button', { name: /deny/i }); - fireEvent.click(denyButton); - - // Assert - await waitFor(() => { - expect(mockRespondToPermission).toHaveBeenCalledWith({ - requestId: 'perm-1', - taskId: 'task-123', - decision: 'deny', - }); - }); - }); - - it('should display file permission specific UI for file type', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'file', - fileOperation: 'create', - filePath: '/path/to/file.txt', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('File Permission Required')).toBeInTheDocument(); - expect(screen.getByText('CREATE')).toBeInTheDocument(); - expect(screen.getByText('/path/to/file.txt')).toBeInTheDocument(); - }); - }); - - describe('error state', () => { - it('should display error message when error exists', () => { - // Arrange - mockStoreState.error = 'Task not found'; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Task not found')).toBeInTheDocument(); - }); - - it('should display Go Home button on error', () => { - // Arrange - mockStoreState.error = 'Something went wrong'; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByRole('button', { name: /go home/i })).toBeInTheDocument(); - }); - }); - - describe('task controls', () => { - it('should call interruptTask when Stop button is clicked', async () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Running', 'running'); - - renderWithRouter('task-123'); - - // Act - Find the stop button (square icon) - const stopButton = screen.getByTitle(/stop agent/i); - fireEvent.click(stopButton); - - // Assert - await waitFor(() => { - expect(mockInterruptTask).toHaveBeenCalled(); - }); - }); - }); - - describe('follow-up input', () => { - it('should show follow-up input for completed task with session', () => { - // Arrange - const task = createMockTask('task-123', 'Done', 'completed'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByPlaceholderText(/give new instructions/i)).toBeInTheDocument(); - }); - - it('should show follow-up input for interrupted task with session', () => { - // Arrange - const task = createMockTask('task-123', 'Stopped', 'interrupted'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByPlaceholderText(/give new instructions/i)).toBeInTheDocument(); - }); - - it('should show "Start New Task" button for completed task without session', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Done', 'completed'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByRole('button', { name: /start new task/i })).toBeInTheDocument(); - }); - - it('should call sendFollowUp when follow-up is submitted', async () => { - // Arrange - const task = createMockTask('task-123', 'Done', 'completed'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - renderWithRouter('task-123'); - - // Act - const input = screen.getByPlaceholderText(/give new instructions/i); - fireEvent.change(input, { target: { value: 'Continue with the next step' } }); - - const sendButton = screen.getByRole('button', { name: /send/i }); - fireEvent.click(sendButton); - - // Assert - await waitFor(() => { - expect(mockSendFollowUp).toHaveBeenCalledWith('Continue with the next step'); - }); - }); - - it('should call sendFollowUp when Enter is pressed', async () => { - // Arrange - const task = createMockTask('task-123', 'Done', 'completed'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - renderWithRouter('task-123'); - - // Act - const input = screen.getByPlaceholderText(/give new instructions/i); - fireEvent.change(input, { target: { value: 'Do more work' } }); - fireEvent.keyDown(input, { key: 'Enter', shiftKey: false }); - - // Assert - await waitFor(() => { - expect(mockSendFollowUp).toHaveBeenCalledWith('Do more work'); - }); - }); - - it('should disable follow-up input when loading', () => { - // Arrange - const task = createMockTask('task-123', 'Done', 'completed'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - mockStoreState.isLoading = true; - - // Act - renderWithRouter('task-123'); - - // Assert - const input = screen.getByPlaceholderText(/give new instructions/i); - expect(input).toBeDisabled(); - }); - - it('should disable send button when follow-up is empty', () => { - // Arrange - const task = createMockTask('task-123', 'Done', 'completed'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - const sendButton = screen.getByRole('button', { name: /send/i }); - expect(sendButton).toBeDisabled(); - }); - }); - - describe('queued state', () => { - it('should show waiting message for queued task without messages', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Queued task', 'queued'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText(/waiting for another task/i)).toBeInTheDocument(); - }); - - it('should show inline waiting indicator for queued task with messages', () => { - // Arrange - const messages = [ - createMockMessage('msg-1', 'user', 'Previous message'), - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Queued', 'queued', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Previous message')).toBeInTheDocument(); - expect(screen.getByText(/waiting for another task/i)).toBeInTheDocument(); - }); - }); - - describe('event subscriptions', () => { - it('should subscribe to task updates on mount', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(mockOnTaskUpdate).toHaveBeenCalled(); - }); - - it('should subscribe to task update batches on mount', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(mockOnTaskUpdateBatch).toHaveBeenCalled(); - }); - - it('should subscribe to permission requests on mount', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(mockOnPermissionRequest).toHaveBeenCalled(); - }); - - it('should subscribe to task status changes on mount', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(mockOnTaskStatusChange).toHaveBeenCalled(); - }); - }); - - describe('browser installation modal', () => { - it('should show download modal when setupProgress contains "download"', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = 'Downloading Chromium 50%'; - mockStoreState.setupProgressTaskId = 'task-123'; - mockStoreState.setupDownloadStep = 1; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Chrome not installed')).toBeInTheDocument(); - expect(screen.getByText('Installing browser for automation...')).toBeInTheDocument(); - expect(screen.getByText('Downloading...')).toBeInTheDocument(); - }); - - it('should show download modal when setupProgress contains "% of"', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = '50% of 160 MB'; - mockStoreState.setupProgressTaskId = 'task-123'; - mockStoreState.setupDownloadStep = 1; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Chrome not installed')).toBeInTheDocument(); - }); - - it('should calculate overall progress for step 1 (Chromium)', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = 'Downloading 50%'; - mockStoreState.setupProgressTaskId = 'task-123'; - mockStoreState.setupDownloadStep = 1; - - // Act - renderWithRouter('task-123'); - - // Assert - 50% * 0.64 = 32% - expect(screen.getByText('32%')).toBeInTheDocument(); - }); - - it('should calculate overall progress for step 2 (FFMPEG)', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = 'Downloading 50%'; - mockStoreState.setupProgressTaskId = 'task-123'; - mockStoreState.setupDownloadStep = 2; - - // Act - renderWithRouter('task-123'); - - // Assert - 64 + Math.round(50 * 0.01) = 64 + 1 = 65% - expect(screen.getByText('65%')).toBeInTheDocument(); - }); - - it('should calculate overall progress for step 3 (Headless)', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = 'Downloading 50%'; - mockStoreState.setupProgressTaskId = 'task-123'; - mockStoreState.setupDownloadStep = 3; - - // Act - renderWithRouter('task-123'); - - // Assert - 65 + Math.round(50 * 0.35) = 65 + 18 = 83% - expect(screen.getByText('83%')).toBeInTheDocument(); - }); - - it('should not show download modal for different task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = 'Downloading 50%'; - mockStoreState.setupProgressTaskId = 'different-task'; - mockStoreState.setupDownloadStep = 1; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.queryByText('Chrome not installed')).not.toBeInTheDocument(); - }); - - it('should not show download modal when setupProgress is null', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = null; - mockStoreState.setupProgressTaskId = 'task-123'; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.queryByText('Chrome not installed')).not.toBeInTheDocument(); - }); - - it('should show one-time setup message', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.setupProgress = 'Downloading 50%'; - mockStoreState.setupProgressTaskId = 'task-123'; - mockStoreState.setupDownloadStep = 1; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText(/one-time setup/i)).toBeInTheDocument(); - expect(screen.getByText(/~250 MB total/i)).toBeInTheDocument(); - }); - }); - - describe('file permission dialog details', () => { - it('should show target path for rename/move operations', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'file', - fileOperation: 'rename', - filePath: '/path/to/old.txt', - targetPath: '/path/to/new.txt', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('/path/to/old.txt')).toBeInTheDocument(); - expect(screen.getByText(/new\.txt/)).toBeInTheDocument(); - }); - - it('should show content preview for file operations', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'file', - fileOperation: 'create', - filePath: '/path/to/file.txt', - contentPreview: 'This is the file content preview...', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Preview content')).toBeInTheDocument(); - }); - - it('should show delete operation warning UI', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'file', - fileOperation: 'delete', - filePath: '/path/to/file.txt', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - delete operations show warning UI with title and button, not a badge - expect(screen.getByText('File Deletion Warning')).toBeInTheDocument(); - expect(screen.getByText('Delete')).toBeInTheDocument(); - }); - - it('should show overwrite operation badge', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'file', - fileOperation: 'overwrite', - filePath: '/path/to/file.txt', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('OVERWRITE')).toBeInTheDocument(); - }); - - it('should show modify operation badge', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'file', - fileOperation: 'modify', - filePath: '/path/to/file.txt', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('MODIFY')).toBeInTheDocument(); - }); - - it('should show move operation badge', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'file', - fileOperation: 'move', - filePath: '/path/to/file.txt', - targetPath: '/new/path/file.txt', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('MOVE')).toBeInTheDocument(); - }); - - it('should show tool name in tool permission dialog', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running'); - mockStoreState.permissionRequest = { - id: 'perm-1', - taskId: 'task-123', - type: 'tool', - toolName: 'Bash', - createdAt: new Date().toISOString(), - }; - - // Act - renderWithRouter('task-123'); - - // Assert - Tool permission UI shows "Allow {toolName}?" - expect(screen.getByText('Allow Bash?')).toBeInTheDocument(); - }); - }); - - describe('task complete states', () => { - it('should navigate home when clicking Start New Task for failed task without session', async () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Failed', 'failed'); - - // Act - renderWithRouter('task-123'); - - // Assert - const startNewButton = screen.getByRole('button', { name: /start new task/i }); - expect(startNewButton).toBeInTheDocument(); - - // Click the button - it should navigate to home - fireEvent.click(startNewButton); - - // Verify navigation happened by checking for Home Page text - await waitFor(() => { - expect(screen.getByText('Home Page')).toBeInTheDocument(); - }); - }); - - it('should show follow-up input for interrupted task', () => { - // Arrange - interrupted task without session still shows follow-up - mockStoreState.currentTask = createMockTask('task-123', 'Stopped', 'interrupted'); - - // Act - renderWithRouter('task-123'); - - // Assert - canFollowUp is true for interrupted status - // Look for the retry placeholder text - expect(screen.getByPlaceholderText(/send a new instruction to retry/i)).toBeInTheDocument(); - }); - - it('should show task cancelled message for cancelled task', () => { - // Arrange - mockStoreState.currentTask = createMockTask('task-123', 'Cancelled', 'cancelled'); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText(/task cancelled/i)).toBeInTheDocument(); - }); - - it('should show Continue button for interrupted task with session and messages', () => { - // Arrange - const messages = [ - createMockMessage('msg-1', 'assistant', 'I was working on something'), - ]; - const task = createMockTask('task-123', 'Stopped', 'interrupted', messages); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByRole('button', { name: /continue/i })).toBeInTheDocument(); - }); - - it('should show Done Continue button for completed task with session when waiting for user', () => { - // Arrange - message must contain a "waiting for user" pattern to show Done, Continue button - const messages = [ - createMockMessage('msg-1', 'assistant', 'Please log in to your account. Let me know when you are done.'), - ]; - const task = createMockTask('task-123', 'Done', 'completed', messages); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - button shows because isWaitingForUser() returns true for this message - expect(screen.getByRole('button', { name: /done, continue/i })).toBeInTheDocument(); - }); - - it('should call sendFollowUp with continue when Continue button is clicked', async () => { - // Arrange - const messages = [ - createMockMessage('msg-1', 'assistant', 'I was working on something'), - ]; - const task = createMockTask('task-123', 'Stopped', 'interrupted', messages); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - renderWithRouter('task-123'); - - // Act - const continueButton = screen.getByRole('button', { name: /continue/i }); - fireEvent.click(continueButton); - - // Assert - await waitFor(() => { - expect(mockSendFollowUp).toHaveBeenCalledWith('continue'); - }); - }); - }); - - describe('system messages', () => { - it('should display system messages with System label', () => { - // Arrange - const messages = [ - createMockMessage('msg-1', 'system', 'System initialization complete'), - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('System')).toBeInTheDocument(); - expect(screen.getByText('System initialization complete')).toBeInTheDocument(); - }); - }); - - describe('default status badge', () => { - it('should display raw status for unknown status', () => { - // Arrange - const task = createMockTask('task-123', 'Task', 'unknown' as TaskStatus); - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('unknown')).toBeInTheDocument(); - }); - }); - - describe('tool message icons', () => { - it('should display Glob tool with search icon label', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Finding files', - toolName: 'Glob', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Finding files')).toBeInTheDocument(); - }); - - it('should display Grep tool with search label', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Searching code', - toolName: 'Grep', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Searching code')).toBeInTheDocument(); - }); - - it('should display Write tool', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Writing file', - toolName: 'Write', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Writing file')).toBeInTheDocument(); - }); - - it('should display Edit tool', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Editing file', - toolName: 'Edit', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Editing file')).toBeInTheDocument(); - }); - - it('should display Task agent tool', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Running agent', - toolName: 'Task', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Running agent')).toBeInTheDocument(); - }); - - it('should display dev_browser_execute tool', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Executing browser action', - toolName: 'dev_browser_execute', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('Executing browser action')).toBeInTheDocument(); - }); - - it('should display unknown tool with fallback icon', () => { - // Arrange - const messages: TaskMessage[] = [ - { - id: 'msg-1', - type: 'tool', - content: 'Unknown operation', - toolName: 'CustomTool', - timestamp: new Date().toISOString(), - }, - ]; - mockStoreState.currentTask = createMockTask('task-123', 'Task', 'running', messages); - - // Act - renderWithRouter('task-123'); - - // Assert - expect(screen.getByText('CustomTool')).toBeInTheDocument(); - }); - }); - - - describe('follow-up placeholder text variations', () => { - it('should show follow-up input for interrupted task even without session', () => { - // Arrange - const task = createMockTask('task-123', 'Stopped', 'interrupted'); - // No sessionId - but canFollowUp is true for interrupted status - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - for interrupted, follow-up input is shown even without session - // The placeholder says "Send a new instruction to retry..." - const input = screen.getByPlaceholderText(/send a new instruction to retry/i); - expect(input).toBeInTheDocument(); - }); - - it('should show retry placeholder for interrupted task with session', () => { - // Arrange - const task = createMockTask('task-123', 'Stopped', 'interrupted'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - // Act - renderWithRouter('task-123'); - - // Assert - const input = screen.getByPlaceholderText(/give new instructions/i); - expect(input).toBeInTheDocument(); - }); - }); - - describe('error navigation', () => { - it('should navigate home when Go Home button is clicked', async () => { - // Arrange - mockStoreState.error = 'Task not found'; - - // Act - renderWithRouter('task-123'); - - const goHomeButton = screen.getByRole('button', { name: /go home/i }); - fireEvent.click(goHomeButton); - - // Assert - await waitFor(() => { - expect(screen.getByText('Home Page')).toBeInTheDocument(); - }); - }); - }); - - describe('follow-up input empty check', () => { - it('should not call sendFollowUp when follow-up is only whitespace', async () => { - // Arrange - const task = createMockTask('task-123', 'Done', 'completed'); - task.sessionId = 'session-abc'; - mockStoreState.currentTask = task; - - renderWithRouter('task-123'); - - // Act - const input = screen.getByPlaceholderText(/give new instructions/i); - fireEvent.change(input, { target: { value: ' ' } }); - fireEvent.keyDown(input, { key: 'Enter', shiftKey: false }); - - // Assert - await waitFor(() => { - expect(mockSendFollowUp).not.toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Home.integration.test.tsx b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Home.integration.test.tsx deleted file mode 100644 index 2282232e8..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/pages/Home.integration.test.tsx +++ /dev/null @@ -1,594 +0,0 @@ -/** - * Integration tests for Home page - * Tests initial render, task input integration, and loading state - * @module __tests__/integration/renderer/pages/Home.integration.test - * @vitest-environment jsdom - */ - -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import type { Task, TaskStatus } from '@accomplish/shared'; - -// Mock analytics to prevent tracking calls -vi.mock('@/lib/analytics', () => ({ - analytics: { - trackSubmitTask: vi.fn(), - }, -})); - -// Create mock functions -const mockStartTask = vi.fn(); -const mockAddTaskUpdate = vi.fn(); -const mockSetPermissionRequest = vi.fn(); -const mockHasAnyApiKey = vi.fn(); -const mockOnTaskUpdate = vi.fn(); -const mockOnPermissionRequest = vi.fn(); -const mockLogEvent = vi.fn(); - -// Helper to create a mock task -function createMockTask( - id: string, - prompt: string = 'Test task', - status: TaskStatus = 'running' -): Task { - return { - id, - prompt, - status, - messages: [], - createdAt: new Date().toISOString(), - }; -} - -// Mock accomplish API -const mockAccomplish = { - hasAnyApiKey: mockHasAnyApiKey, - getSelectedModel: vi.fn().mockResolvedValue({ provider: 'anthropic', id: 'claude-3-opus' }), - getOllamaConfig: vi.fn().mockResolvedValue(null), - onTaskUpdate: mockOnTaskUpdate.mockReturnValue(() => {}), - onPermissionRequest: mockOnPermissionRequest.mockReturnValue(() => {}), - logEvent: mockLogEvent.mockResolvedValue(undefined), - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateApiKeyForProvider: vi.fn().mockResolvedValue({ valid: true }), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, -})); - -// Mock store state holder -let mockStoreState = { - startTask: mockStartTask, - isLoading: false, - addTaskUpdate: mockAddTaskUpdate, - setPermissionRequest: mockSetPermissionRequest, -}; - -// Mock the task store -vi.mock('@/stores/taskStore', () => ({ - useTaskStore: () => mockStoreState, -})); - -// Mock framer-motion for simpler testing -vi.mock('framer-motion', () => ({ - motion: { - h1: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( -

{children}

- ), - div: ({ children, ...props }: { children: React.ReactNode; [key: string]: unknown }) => ( -
{children}
- ), - button: ({ children, onClick, ...props }: { children: React.ReactNode; onClick?: () => void; [key: string]: unknown }) => ( - - ), - }, - AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}, -})); - -// Mock SettingsDialog -vi.mock('@/components/layout/SettingsDialog', () => ({ - default: ({ open, onOpenChange, onApiKeySaved }: { - open: boolean; - onOpenChange: (open: boolean) => void; - onApiKeySaved?: () => void; - }) => ( - open ? ( -
- - {onApiKeySaved && ( - - )} -
- ) : null - ), -})); - -// Import after mocks -import HomePage from '@/pages/Home'; - -// Mock images -vi.mock('/assets/usecases/calendar-prep-notes.png', () => ({ default: 'calendar.png' })); -vi.mock('/assets/usecases/inbox-promo-cleanup.png', () => ({ default: 'inbox.png' })); -vi.mock('/assets/usecases/competitor-pricing-deck.png', () => ({ default: 'competitor.png' })); -vi.mock('/assets/usecases/notion-api-audit.png', () => ({ default: 'notion.png' })); -vi.mock('/assets/usecases/staging-vs-prod-visual.png', () => ({ default: 'staging.png' })); -vi.mock('/assets/usecases/prod-broken-links.png', () => ({ default: 'broken-links.png' })); -vi.mock('/assets/usecases/stock-portfolio-alerts.png', () => ({ default: 'stock.png' })); -vi.mock('/assets/usecases/job-application-automation.png', () => ({ default: 'job.png' })); -vi.mock('/assets/usecases/event-calendar-builder.png', () => ({ default: 'event.png' })); - -describe('Home Page Integration', () => { - beforeEach(() => { - vi.clearAllMocks(); - // Reset store state - mockStoreState = { - startTask: mockStartTask, - isLoading: false, - addTaskUpdate: mockAddTaskUpdate, - setPermissionRequest: mockSetPermissionRequest, - }; - // Default to having API key (legacy) - mockHasAnyApiKey.mockResolvedValue(true); - // Default to having a ready provider (new provider settings) - mockAccomplish.getProviderSettings.mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }); - }); - - describe('initial render', () => { - it('should render the main heading', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(screen.getByRole('heading', { name: /what will you accomplish today/i })).toBeInTheDocument(); - }); - - it('should render the task input bar', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const textarea = screen.getByPlaceholderText(/describe a task and let ai handle the rest/i); - expect(textarea).toBeInTheDocument(); - }); - - it('should render submit button', () => { - // Arrange & Act - render( - - - - ); - - // Assert - const submitButton = screen.getByTitle('Submit'); - expect(submitButton).toBeInTheDocument(); - }); - - it('should render example prompts section', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(screen.getByText(/example prompts/i)).toBeInTheDocument(); - }); - - it('should render use case example cards', async () => { - // Arrange & Act - render( - - - - ); - - // Assert - Check for some example use cases (expanded by default) - await waitFor(() => { - expect(screen.getByText('Calendar Prep Notes')).toBeInTheDocument(); - expect(screen.getByText('Inbox Promo Cleanup')).toBeInTheDocument(); - }); - }); - - it('should subscribe to task events on mount', () => { - // Arrange & Act - render( - - - - ); - - // Assert - expect(mockOnTaskUpdate).toHaveBeenCalled(); - expect(mockOnPermissionRequest).toHaveBeenCalled(); - }); - }); - - describe('task input integration', () => { - it('should update input value when user types', () => { - // Arrange - render( - - - - ); - - // Act - const textarea = screen.getByPlaceholderText(/describe a task/i); - fireEvent.change(textarea, { target: { value: 'Check my calendar' } }); - - // Assert - expect(textarea).toHaveValue('Check my calendar'); - }); - - it('should check for provider settings before submitting task', async () => { - // Arrange - render( - - - - ); - - // Act - const textarea = screen.getByPlaceholderText(/describe a task/i); - fireEvent.change(textarea, { target: { value: 'Submit this task' } }); - - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - // Assert - should check provider settings (via isE2EMode and getProviderSettings) - await waitFor(() => { - expect(mockAccomplish.isE2EMode).toHaveBeenCalled(); - }); - }); - - it('should open settings dialog when no provider is ready', async () => { - // Arrange - Set up mock to return no ready providers - mockAccomplish.getProviderSettings.mockResolvedValue({ - activeProviderId: null, - connectedProviders: {}, - debugMode: false, - }); - - render( - - - - ); - - // Act - const textarea = screen.getByPlaceholderText(/describe a task/i); - fireEvent.change(textarea, { target: { value: 'Submit without provider' } }); - - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - // Assert - await waitFor(() => { - expect(screen.getByTestId('settings-dialog')).toBeInTheDocument(); - }); - }); - - it('should start task when API key exists', async () => { - // Arrange - const mockTask = createMockTask('task-123', 'My task', 'running'); - mockStartTask.mockResolvedValue(mockTask); - mockHasAnyApiKey.mockResolvedValue(true); - - render( - - - - ); - - // Act - const textarea = screen.getByPlaceholderText(/describe a task/i); - fireEvent.change(textarea, { target: { value: 'My task' } }); - - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - // Assert - await waitFor(() => { - expect(mockStartTask).toHaveBeenCalled(); - }); - }); - - it('should not submit empty task', async () => { - // Arrange - render( - - - - ); - - // Act - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - // Assert - empty tasks return early, no provider check or task start - await waitFor(() => { - expect(mockAccomplish.isE2EMode).not.toHaveBeenCalled(); - expect(mockStartTask).not.toHaveBeenCalled(); - }); - }); - - it('should not submit whitespace-only task', async () => { - // Arrange - render( - - - - ); - - // Act - const textarea = screen.getByPlaceholderText(/describe a task/i); - fireEvent.change(textarea, { target: { value: ' ' } }); - - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - // Assert - whitespace-only input should not trigger any API calls - await waitFor(() => { - expect(mockAccomplish.isE2EMode).not.toHaveBeenCalled(); - expect(mockStartTask).not.toHaveBeenCalled(); - }); - }); - - it('should execute task after configuring provider in settings', async () => { - // Arrange - No ready provider initially - mockAccomplish.getProviderSettings.mockResolvedValue({ - activeProviderId: null, - connectedProviders: {}, - debugMode: false, - }); - const mockTask = createMockTask('task-123', 'My task', 'running'); - mockStartTask.mockResolvedValue(mockTask); - - render( - - - - ); - - // Act - Submit to open settings - const textarea = screen.getByPlaceholderText(/describe a task/i); - fireEvent.change(textarea, { target: { value: 'My task' } }); - - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - // Wait for dialog - await waitFor(() => { - expect(screen.getByTestId('settings-dialog')).toBeInTheDocument(); - }); - - // Simulate saving API key (which triggers onApiKeySaved callback) - const saveButton = screen.getByRole('button', { name: /save api key/i }); - fireEvent.click(saveButton); - - // Assert - Task should be started after provider is configured - await waitFor(() => { - expect(mockStartTask).toHaveBeenCalled(); - }); - }); - }); - - describe('loading state', () => { - it('should disable input when loading', () => { - // Arrange - mockStoreState.isLoading = true; - - // Act - render( - - - - ); - - // Assert - const textarea = screen.getByPlaceholderText(/describe a task/i); - expect(textarea).toBeDisabled(); - }); - - it('should disable submit button when loading', () => { - // Arrange - mockStoreState.isLoading = true; - - // Act - render( - - - - ); - - // Assert - const submitButton = screen.getByTitle('Submit'); - expect(submitButton).toBeDisabled(); - }); - - it('should not submit when already loading', async () => { - // Arrange - mockStoreState.isLoading = true; - - render( - - - - ); - - // The textarea is disabled, so we can't really type, but test submit - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - // Assert - await waitFor(() => { - expect(mockStartTask).not.toHaveBeenCalled(); - }); - }); - }); - - describe('example prompts', () => { - it('should populate input when example is clicked', async () => { - // Arrange - render( - - - - ); - - // Act - Click on Calendar Prep Notes example (expanded by default) - await waitFor(() => { - expect(screen.getByText('Calendar Prep Notes')).toBeInTheDocument(); - }); - const exampleButton = screen.getByText('Calendar Prep Notes').closest('button'); - expect(exampleButton).toBeInTheDocument(); - fireEvent.click(exampleButton!); - - // Assert - The textarea should now contain text related to the example - await waitFor(() => { - const textarea = screen.getByPlaceholderText(/describe a task/i) as HTMLTextAreaElement; - expect(textarea.value.length).toBeGreaterThan(0); - expect(textarea.value.toLowerCase()).toContain('calendar'); - }); - }); - - it('should be able to toggle example prompts visibility', async () => { - // Arrange - render( - - - - ); - - // Assert - Examples should be visible initially (expanded by default) - await waitFor(() => { - expect(screen.getByText('Calendar Prep Notes')).toBeInTheDocument(); - }); - - // Act - Toggle examples off - const toggleButton = screen.getByText(/example prompts/i).closest('button'); - fireEvent.click(toggleButton!); - - // Assert - Examples should be hidden now - await waitFor(() => { - expect(screen.queryByText('Calendar Prep Notes')).not.toBeInTheDocument(); - }); - - // Act - Toggle examples on again - fireEvent.click(toggleButton!); - - // Assert - Examples should be visible again - await waitFor(() => { - expect(screen.getByText('Calendar Prep Notes')).toBeInTheDocument(); - }); - }); - - it('should render all nine example use cases', async () => { - // Arrange & Act - render( - - - - ); - - // Assert - examples are expanded by default - const expectedExamples = [ - 'Calendar Prep Notes', - 'Inbox Promo Cleanup', - 'Competitor Pricing Deck', - 'Notion API Audit', - 'Staging vs Prod Visual Check', - 'Production Broken Links', - 'Portfolio Monitoring', - 'Job Application Automation', - 'Event Calendar Builder', - ]; - - await waitFor(() => { - expectedExamples.forEach(example => { - expect(screen.getByText(example)).toBeInTheDocument(); - }); - }); - }); - }); - - describe('settings dialog interaction', () => { - it('should close settings dialog without executing when cancelled', async () => { - // Arrange - No ready provider - mockAccomplish.getProviderSettings.mockResolvedValue({ - activeProviderId: null, - connectedProviders: {}, - debugMode: false, - }); - - render( - - - - ); - - // Act - Open settings via submit - const textarea = screen.getByPlaceholderText(/describe a task/i); - fireEvent.change(textarea, { target: { value: 'My task' } }); - - const submitButton = screen.getByTitle('Submit'); - fireEvent.click(submitButton); - - await waitFor(() => { - expect(screen.getByTestId('settings-dialog')).toBeInTheDocument(); - }); - - // Close without saving - const closeButton = screen.getByRole('button', { name: /close/i }); - fireEvent.click(closeButton); - - // Assert - await waitFor(() => { - expect(screen.queryByTestId('settings-dialog')).not.toBeInTheDocument(); - expect(mockStartTask).not.toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/taskStore.integration.test.ts b/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/taskStore.integration.test.ts deleted file mode 100644 index 135d5d2b5..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/integration/renderer/taskStore.integration.test.ts +++ /dev/null @@ -1,869 +0,0 @@ -/** - * Integration tests for taskStore (Zustand) - * Tests store actions with mocked window.accomplish API - * @module __tests__/integration/renderer/taskStore.integration.test - */ - -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; -import type { Task, TaskConfig, TaskStatus, TaskMessage, TaskResult } from '@accomplish/shared'; - -// Helper to create a mock task -function createMockTask(id: string, prompt: string = 'Test task', status: TaskStatus = 'pending'): Task { - return { - id, - prompt, - status, - messages: [], - createdAt: new Date().toISOString(), - }; -} - -// Helper to create a mock message -function createMockMessage( - id: string, - type: 'assistant' | 'user' | 'tool' | 'system' = 'assistant', - content: string = 'Test message' -): TaskMessage { - return { - id, - type, - content, - timestamp: new Date().toISOString(), - }; -} - -// Mock accomplish API -const mockAccomplish = { - startTask: vi.fn(), - cancelTask: vi.fn(), - interruptTask: vi.fn(), - resumeSession: vi.fn(), - respondToPermission: vi.fn(), - listTasks: vi.fn(), - getTask: vi.fn(), - deleteTask: vi.fn(), - clearTaskHistory: vi.fn(), - logEvent: vi.fn().mockResolvedValue(undefined), - getSelectedModel: vi.fn().mockResolvedValue({ provider: 'anthropic', id: 'claude-3-opus' }), - getOllamaConfig: vi.fn().mockResolvedValue(null), - isE2EMode: vi.fn().mockResolvedValue(false), - getProviderSettings: vi.fn().mockResolvedValue({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - }), - // Provider settings methods - setActiveProvider: vi.fn().mockResolvedValue(undefined), - setConnectedProvider: vi.fn().mockResolvedValue(undefined), - removeConnectedProvider: vi.fn().mockResolvedValue(undefined), - setProviderDebugMode: vi.fn().mockResolvedValue(undefined), - validateApiKeyForProvider: vi.fn().mockResolvedValue({ valid: true }), - validateBedrockCredentials: vi.fn().mockResolvedValue({ valid: true }), - saveBedrockCredentials: vi.fn().mockResolvedValue(undefined), -}; - -// Mock the accomplish module -vi.mock('@/lib/accomplish', () => ({ - getAccomplish: () => mockAccomplish, -})); - -// Mock window.accomplish for global subscriptions -const mockOnTaskProgress = vi.fn(); -const mockOnTaskUpdate = vi.fn(); - -vi.stubGlobal('window', { - accomplish: { - onTaskProgress: mockOnTaskProgress, - onTaskUpdate: mockOnTaskUpdate, - }, -}); - -describe('taskStore Integration', () => { - beforeEach(async () => { - vi.clearAllMocks(); - vi.resetModules(); - }); - - afterEach(async () => { - // Reset store state - try { - const { useTaskStore } = await import('@/stores/taskStore'); - useTaskStore.setState({ - currentTask: null, - isLoading: false, - error: null, - tasks: [], - permissionRequest: null, - setupProgress: null, - setupProgressTaskId: null, - setupDownloadStep: 1, - }); - } catch { - // Store may not be loaded - } - }); - - describe('initial state', () => { - it('should have null currentTask initially', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask).toBeNull(); - }); - - it('should have isLoading as false initially', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - const state = useTaskStore.getState(); - - // Assert - expect(state.isLoading).toBe(false); - }); - - it('should have null error initially', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - const state = useTaskStore.getState(); - - // Assert - expect(state.error).toBeNull(); - }); - - it('should have empty tasks array initially', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - const state = useTaskStore.getState(); - - // Assert - expect(state.tasks).toEqual([]); - }); - - it('should have null permissionRequest initially', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - const state = useTaskStore.getState(); - - // Assert - expect(state.permissionRequest).toBeNull(); - }); - - it('should have setupDownloadStep as 1 initially', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - const state = useTaskStore.getState(); - - // Assert - expect(state.setupDownloadStep).toBe(1); - }); - }); - - describe('startTask', () => { - it('should call startTask API and update state on success', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const mockTask = createMockTask('task-123', 'Test prompt', 'running'); - mockAccomplish.startTask.mockResolvedValueOnce(mockTask); - - const config: TaskConfig = { prompt: 'Test prompt' }; - - // Act - const result = await useTaskStore.getState().startTask(config); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.startTask).toHaveBeenCalledWith(config); - expect(result).toEqual(mockTask); - expect(state.currentTask).toEqual(mockTask); - expect(state.isLoading).toBe(false); - expect(state.tasks).toContainEqual(mockTask); - }); - - it('should set isLoading to true for queued tasks', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const mockTask = createMockTask('task-123', 'Test prompt', 'queued'); - mockAccomplish.startTask.mockResolvedValueOnce(mockTask); - - // Act - await useTaskStore.getState().startTask({ prompt: 'Test prompt' }); - const state = useTaskStore.getState(); - - // Assert - expect(state.isLoading).toBe(true); - }); - - it('should set error state on failure', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - mockAccomplish.startTask.mockRejectedValueOnce(new Error('API Error')); - - // Act - const result = await useTaskStore.getState().startTask({ prompt: 'Test prompt' }); - const state = useTaskStore.getState(); - - // Assert - expect(result).toBeNull(); - expect(state.error).toBe('API Error'); - expect(state.isLoading).toBe(false); - }); - - it('should handle non-Error exceptions gracefully', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - mockAccomplish.startTask.mockRejectedValueOnce('String error'); - - // Act - const result = await useTaskStore.getState().startTask({ prompt: 'Test' }); - const state = useTaskStore.getState(); - - // Assert - expect(result).toBeNull(); - expect(state.error).toBe('Failed to start task'); - }); - - it('should add task to tasks list', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const mockTask = createMockTask('task-123', 'Test', 'running'); - mockAccomplish.startTask.mockResolvedValueOnce(mockTask); - - // Set existing tasks - useTaskStore.setState({ tasks: [createMockTask('existing-task')] }); - - // Act - await useTaskStore.getState().startTask({ prompt: 'Test' }); - const state = useTaskStore.getState(); - - // Assert - expect(state.tasks).toHaveLength(2); - expect(state.tasks[0].id).toBe('task-123'); // New task should be first - }); - - it('should update existing task if same ID', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const existingTask = createMockTask('task-123', 'Old prompt', 'pending'); - const updatedTask = createMockTask('task-123', 'New prompt', 'running'); - mockAccomplish.startTask.mockResolvedValueOnce(updatedTask); - - useTaskStore.setState({ tasks: [existingTask] }); - - // Act - await useTaskStore.getState().startTask({ prompt: 'New prompt', taskId: 'task-123' }); - const state = useTaskStore.getState(); - - // Assert - expect(state.tasks).toHaveLength(1); - expect(state.tasks[0].prompt).toBe('New prompt'); - }); - }); - - describe('sendFollowUp', () => { - it('should set error when no active task', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - await useTaskStore.getState().sendFollowUp('Follow up message'); - const state = useTaskStore.getState(); - - // Assert - expect(state.error).toBe('No active task to continue'); - }); - - it('should set error when task has no session', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const taskWithoutSession = createMockTask('task-123', 'Test', 'completed'); - useTaskStore.setState({ currentTask: taskWithoutSession }); - - // Act - await useTaskStore.getState().sendFollowUp('Follow up'); - const state = useTaskStore.getState(); - - // Assert - expect(state.error).toBe('No session to continue - please start a new task'); - }); - - it('should start fresh task for interrupted task without session', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const interruptedTask: Task = { - ...createMockTask('task-123', 'Original', 'interrupted'), - }; - const newTask = createMockTask('task-456', 'Fresh start', 'running'); - mockAccomplish.startTask.mockResolvedValueOnce(newTask); - - useTaskStore.setState({ currentTask: interruptedTask, tasks: [interruptedTask] }); - - // Act - await useTaskStore.getState().sendFollowUp('New message'); - - // Assert - expect(mockAccomplish.startTask).toHaveBeenCalled(); - }); - - it('should resume session when task has sessionId', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const taskWithSession: Task = { - ...createMockTask('task-123', 'Test', 'completed'), - sessionId: 'session-abc', - }; - const resumedTask = createMockTask('task-123', 'Test', 'running'); - mockAccomplish.resumeSession.mockResolvedValueOnce(resumedTask); - - useTaskStore.setState({ currentTask: taskWithSession, tasks: [taskWithSession] }); - - // Act - await useTaskStore.getState().sendFollowUp('Continue please'); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.resumeSession).toHaveBeenCalledWith('session-abc', 'Continue please', 'task-123'); - expect(state.currentTask?.status).toBe('running'); - }); - - it('should use result.sessionId if available', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const taskWithResultSession: Task = { - ...createMockTask('task-123', 'Test', 'completed'), - result: { status: 'success', sessionId: 'result-session-xyz' }, - }; - const resumedTask = createMockTask('task-123', 'Test', 'running'); - mockAccomplish.resumeSession.mockResolvedValueOnce(resumedTask); - - useTaskStore.setState({ currentTask: taskWithResultSession, tasks: [taskWithResultSession] }); - - // Act - await useTaskStore.getState().sendFollowUp('More work'); - - // Assert - expect(mockAccomplish.resumeSession).toHaveBeenCalledWith('result-session-xyz', 'More work', 'task-123'); - }); - - it('should add user message optimistically', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const taskWithSession: Task = { - ...createMockTask('task-123', 'Test', 'completed'), - sessionId: 'session-abc', - messages: [], - }; - mockAccomplish.resumeSession.mockResolvedValueOnce(createMockTask('task-123', 'Test', 'running')); - - useTaskStore.setState({ currentTask: taskWithSession, tasks: [taskWithSession] }); - - // Act - await useTaskStore.getState().sendFollowUp('User follow up'); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.messages).toHaveLength(1); - expect(state.currentTask?.messages[0].type).toBe('user'); - expect(state.currentTask?.messages[0].content).toBe('User follow up'); - }); - - it('should handle resumeSession failure', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const taskWithSession: Task = { - ...createMockTask('task-123', 'Test', 'completed'), - sessionId: 'session-abc', - }; - mockAccomplish.resumeSession.mockRejectedValueOnce(new Error('Resume failed')); - - useTaskStore.setState({ currentTask: taskWithSession, tasks: [taskWithSession] }); - - // Act - await useTaskStore.getState().sendFollowUp('Follow up'); - const state = useTaskStore.getState(); - - // Assert - expect(state.error).toBe('Resume failed'); - expect(state.currentTask?.status).toBe('failed'); - expect(state.isLoading).toBe(false); - }); - }); - - describe('cancelTask', () => { - it('should call cancelTask API and update status', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const runningTask = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: runningTask, tasks: [runningTask] }); - mockAccomplish.cancelTask.mockResolvedValueOnce(undefined); - - // Act - await useTaskStore.getState().cancelTask(); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.cancelTask).toHaveBeenCalledWith('task-123'); - expect(state.currentTask?.status).toBe('cancelled'); - expect(state.tasks[0].status).toBe('cancelled'); - }); - - it('should do nothing when no current task', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - await useTaskStore.getState().cancelTask(); - - // Assert - expect(mockAccomplish.cancelTask).not.toHaveBeenCalled(); - }); - }); - - describe('interruptTask', () => { - it('should call interruptTask API for running task', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const runningTask = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: runningTask }); - mockAccomplish.interruptTask.mockResolvedValueOnce(undefined); - - // Act - await useTaskStore.getState().interruptTask(); - - // Assert - expect(mockAccomplish.interruptTask).toHaveBeenCalledWith('task-123'); - }); - - it('should not call API for non-running task', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const completedTask = createMockTask('task-123', 'Test', 'completed'); - useTaskStore.setState({ currentTask: completedTask }); - - // Act - await useTaskStore.getState().interruptTask(); - - // Assert - expect(mockAccomplish.interruptTask).not.toHaveBeenCalled(); - }); - - it('should not change task status', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const runningTask = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: runningTask }); - mockAccomplish.interruptTask.mockResolvedValueOnce(undefined); - - // Act - await useTaskStore.getState().interruptTask(); - const state = useTaskStore.getState(); - - // Assert - status should remain 'running' (interrupt is handled by event) - expect(state.currentTask?.status).toBe('running'); - }); - }); - - describe('addTaskUpdateBatch', () => { - it('should add multiple messages in single update', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: task, tasks: [task] }); - - const messages = [ - createMockMessage('msg-1', 'assistant', 'First'), - createMockMessage('msg-2', 'tool', 'Second'), - createMockMessage('msg-3', 'assistant', 'Third'), - ]; - - // Act - useTaskStore.getState().addTaskUpdateBatch({ taskId: 'task-123', messages }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.messages).toHaveLength(3); - expect(state.currentTask?.messages[0].content).toBe('First'); - expect(state.currentTask?.messages[1].content).toBe('Second'); - expect(state.currentTask?.messages[2].content).toBe('Third'); - }); - - it('should not update state if task ID does not match', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: task }); - - // Act - useTaskStore.getState().addTaskUpdateBatch({ - taskId: 'different-task', - messages: [createMockMessage('msg-1')], - }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.messages).toHaveLength(0); - }); - - it('should not update state if no current task', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - - // Act - useTaskStore.getState().addTaskUpdateBatch({ - taskId: 'task-123', - messages: [createMockMessage('msg-1')], - }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask).toBeNull(); - }); - - it('should append to existing messages', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task: Task = { - ...createMockTask('task-123', 'Test', 'running'), - messages: [createMockMessage('existing', 'user', 'Existing')], - }; - useTaskStore.setState({ currentTask: task }); - - // Act - useTaskStore.getState().addTaskUpdateBatch({ - taskId: 'task-123', - messages: [createMockMessage('new', 'assistant', 'New')], - }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.messages).toHaveLength(2); - expect(state.currentTask?.messages[0].content).toBe('Existing'); - expect(state.currentTask?.messages[1].content).toBe('New'); - }); - - it('should set isLoading to false after batch update', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: task, isLoading: true }); - - // Act - useTaskStore.getState().addTaskUpdateBatch({ taskId: 'task-123', messages: [] }); - const state = useTaskStore.getState(); - - // Assert - expect(state.isLoading).toBe(false); - }); - }); - - describe('error state management', () => { - it('should clear error on successful task start', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - useTaskStore.setState({ error: 'Previous error' }); - mockAccomplish.startTask.mockResolvedValueOnce(createMockTask('task-123')); - - // Act - await useTaskStore.getState().startTask({ prompt: 'Test' }); - const state = useTaskStore.getState(); - - // Assert - expect(state.error).toBeNull(); - }); - - it('should clear error on successful follow up', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const taskWithSession: Task = { - ...createMockTask('task-123', 'Test', 'completed'), - sessionId: 'session-abc', - }; - useTaskStore.setState({ currentTask: taskWithSession, tasks: [taskWithSession], error: 'Previous error' }); - mockAccomplish.resumeSession.mockResolvedValueOnce(createMockTask('task-123', 'Test', 'running')); - - // Act - await useTaskStore.getState().sendFollowUp('Continue'); - const state = useTaskStore.getState(); - - // Assert - expect(state.error).toBeNull(); - }); - }); - - describe('loadTasks', () => { - it('should load tasks from API', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const mockTasks = [ - createMockTask('task-1'), - createMockTask('task-2'), - createMockTask('task-3'), - ]; - mockAccomplish.listTasks.mockResolvedValueOnce(mockTasks); - - // Act - await useTaskStore.getState().loadTasks(); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.listTasks).toHaveBeenCalled(); - expect(state.tasks).toEqual(mockTasks); - }); - }); - - describe('loadTaskById', () => { - it('should load specific task and set as current', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const mockTask = createMockTask('task-123', 'Loaded task'); - mockAccomplish.getTask.mockResolvedValueOnce(mockTask); - - // Act - await useTaskStore.getState().loadTaskById('task-123'); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.getTask).toHaveBeenCalledWith('task-123'); - expect(state.currentTask).toEqual(mockTask); - expect(state.error).toBeNull(); - }); - - it('should set error when task not found', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - mockAccomplish.getTask.mockResolvedValueOnce(null); - - // Act - await useTaskStore.getState().loadTaskById('non-existent'); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask).toBeNull(); - expect(state.error).toBe('Task not found'); - }); - }); - - describe('deleteTask', () => { - it('should delete task and remove from list', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const tasks = [ - createMockTask('task-1'), - createMockTask('task-2'), - createMockTask('task-3'), - ]; - useTaskStore.setState({ tasks }); - mockAccomplish.deleteTask.mockResolvedValueOnce(undefined); - - // Act - await useTaskStore.getState().deleteTask('task-2'); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.deleteTask).toHaveBeenCalledWith('task-2'); - expect(state.tasks).toHaveLength(2); - expect(state.tasks.find(t => t.id === 'task-2')).toBeUndefined(); - }); - }); - - describe('clearHistory', () => { - it('should clear all tasks', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - useTaskStore.setState({ tasks: [createMockTask('task-1'), createMockTask('task-2')] }); - mockAccomplish.clearTaskHistory.mockResolvedValueOnce(undefined); - - // Act - await useTaskStore.getState().clearHistory(); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.clearTaskHistory).toHaveBeenCalled(); - expect(state.tasks).toEqual([]); - }); - }); - - describe('reset', () => { - it('should reset task-related state but preserve tasks list', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const tasks = [createMockTask('task-1'), createMockTask('task-2')]; - useTaskStore.setState({ - currentTask: createMockTask('task-current'), - isLoading: true, - error: 'Some error', - tasks, - permissionRequest: { id: 'perm-1', taskId: 'task-1', type: 'file', message: 'Allow?' }, - setupProgress: 'Downloading...', - setupProgressTaskId: 'task-1', - setupDownloadStep: 2, - }); - - // Act - useTaskStore.getState().reset(); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask).toBeNull(); - expect(state.isLoading).toBe(false); - expect(state.error).toBeNull(); - expect(state.permissionRequest).toBeNull(); - expect(state.setupProgress).toBeNull(); - expect(state.setupProgressTaskId).toBeNull(); - expect(state.setupDownloadStep).toBe(1); - // Tasks should be preserved - expect(state.tasks).toEqual(tasks); - }); - }); - - describe('respondToPermission', () => { - it('should call API and clear permission request', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - useTaskStore.setState({ - permissionRequest: { id: 'perm-1', taskId: 'task-1', type: 'file', message: 'Allow?' }, - }); - mockAccomplish.respondToPermission.mockResolvedValueOnce(undefined); - - const response = { permissionId: 'perm-1', granted: true }; - - // Act - await useTaskStore.getState().respondToPermission(response); - const state = useTaskStore.getState(); - - // Assert - expect(mockAccomplish.respondToPermission).toHaveBeenCalledWith(response); - expect(state.permissionRequest).toBeNull(); - }); - }); - - describe('updateTaskStatus', () => { - it('should update task status in tasks list and currentTask', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'queued'); - useTaskStore.setState({ currentTask: task, tasks: [task] }); - - // Act - useTaskStore.getState().updateTaskStatus('task-123', 'running'); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.status).toBe('running'); - expect(state.tasks[0].status).toBe('running'); - }); - - it('should only update tasks list when currentTask does not match', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const currentTask = createMockTask('task-current', 'Current', 'running'); - const otherTask = createMockTask('task-other', 'Other', 'queued'); - useTaskStore.setState({ currentTask, tasks: [currentTask, otherTask] }); - - // Act - useTaskStore.getState().updateTaskStatus('task-other', 'running'); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.status).toBe('running'); // Unchanged - expect(state.tasks.find(t => t.id === 'task-other')?.status).toBe('running'); - }); - }); - - describe('addTaskUpdate - complete event', () => { - it('should set completed status for success result', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: task, tasks: [task] }); - - // Act - useTaskStore.getState().addTaskUpdate({ - type: 'complete', - taskId: 'task-123', - result: { status: 'success' }, - }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.status).toBe('completed'); - expect(state.tasks[0].status).toBe('completed'); - }); - - it('should set interrupted status for interrupted result', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: task, tasks: [task] }); - - // Act - useTaskStore.getState().addTaskUpdate({ - type: 'complete', - taskId: 'task-123', - result: { status: 'interrupted' }, - }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.status).toBe('interrupted'); - }); - - it('should set failed status for error result', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: task, tasks: [task] }); - - // Act - useTaskStore.getState().addTaskUpdate({ - type: 'complete', - taskId: 'task-123', - result: { status: 'error', error: 'Something went wrong' }, - }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.status).toBe('failed'); - }); - - it('should preserve sessionId from result', async () => { - // Arrange - const { useTaskStore } = await import('@/stores/taskStore'); - const task = createMockTask('task-123', 'Test', 'running'); - useTaskStore.setState({ currentTask: task, tasks: [task] }); - - const result: TaskResult = { status: 'success', sessionId: 'session-from-result' }; - - // Act - useTaskStore.getState().addTaskUpdate({ - type: 'complete', - taskId: 'task-123', - result, - }); - const state = useTaskStore.getState(); - - // Assert - expect(state.currentTask?.sessionId).toBe('session-from-result'); - expect(state.currentTask?.result).toEqual(result); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/main/config.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/main/config.unit.test.ts deleted file mode 100644 index bb49b9c41..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/main/config.unit.test.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; - -// We need to test the module in isolation, so we'll import it dynamically -// to reset the cache between tests - -describe('config.ts', () => { - const originalEnv = process.env; - - beforeEach(() => { - // Reset process.env before each test - process.env = { ...originalEnv }; - // Clear module cache to reset cachedConfig - vi.resetModules(); - }); - - afterEach(() => { - process.env = originalEnv; - vi.resetModules(); - }); - - describe('getDesktopConfig()', () => { - describe('default configuration', () => { - it('should return default API URL when ACCOMPLISH_API_URL is not set', async () => { - // Arrange - delete process.env.ACCOMPLISH_API_URL; - - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(config.apiUrl).toBe('https://lite.accomplish.ai'); - }); - - it('should return default API URL when ACCOMPLISH_API_URL is undefined', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = undefined; - - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(config.apiUrl).toBe('https://lite.accomplish.ai'); - }); - }); - - describe('custom API URL parsing', () => { - it('should use custom HTTPS API URL from environment', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'https://custom.example.com'; - - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(config.apiUrl).toBe('https://custom.example.com'); - }); - - it('should use custom HTTP API URL from environment', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'http://localhost:3000'; - - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(config.apiUrl).toBe('http://localhost:3000'); - }); - - it('should accept URL with path', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'https://api.example.com/v1'; - - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(config.apiUrl).toBe('https://api.example.com/v1'); - }); - - it('should accept URL with port', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'https://api.example.com:8443'; - - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(config.apiUrl).toBe('https://api.example.com:8443'); - }); - - it('should throw error for invalid URL format', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'not-a-url'; - - // Act & Assert - const { getDesktopConfig } = await import('../../src/main/config'); - expect(() => getDesktopConfig()).toThrow('Invalid desktop configuration'); - }); - - it('should throw error for URL without protocol', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'example.com'; - - // Act & Assert - const { getDesktopConfig } = await import('../../src/main/config'); - expect(() => getDesktopConfig()).toThrow('Invalid desktop configuration'); - }); - - it('should throw error for empty string URL (invalid url)', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = ''; - - // Act & Assert - // Empty string is an invalid URL and throws an error - const { getDesktopConfig } = await import('../../src/main/config'); - expect(() => getDesktopConfig()).toThrow('Invalid desktop configuration'); - }); - }); - - describe('config caching behavior', () => { - it('should cache config and return same result on multiple calls', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'https://first.example.com'; - const { getDesktopConfig } = await import('../../src/main/config'); - - // Act - const config1 = getDesktopConfig(); - - // Change env after first call - process.env.ACCOMPLISH_API_URL = 'https://second.example.com'; - const config2 = getDesktopConfig(); - - // Assert - should return cached value - expect(config1).toBe(config2); - expect(config1.apiUrl).toBe('https://first.example.com'); - }); - - it('should return identical object reference from cache', async () => { - // Arrange - const { getDesktopConfig } = await import('../../src/main/config'); - - // Act - const config1 = getDesktopConfig(); - const config2 = getDesktopConfig(); - - // Assert - expect(config1).toBe(config2); - }); - - it('should reset cache when module is reloaded', async () => { - // Arrange - process.env.ACCOMPLISH_API_URL = 'https://first.example.com'; - const mod1 = await import('../../src/main/config'); - const config1 = mod1.getDesktopConfig(); - - // Reset modules and change env - vi.resetModules(); - process.env.ACCOMPLISH_API_URL = 'https://second.example.com'; - - // Act - const mod2 = await import('../../src/main/config'); - const config2 = mod2.getDesktopConfig(); - - // Assert - expect(config1.apiUrl).toBe('https://first.example.com'); - expect(config2.apiUrl).toBe('https://second.example.com'); - }); - }); - - describe('config structure', () => { - it('should return object with apiUrl property', async () => { - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(config).toHaveProperty('apiUrl'); - expect(typeof config.apiUrl).toBe('string'); - }); - - it('should not have extra properties beyond apiUrl', async () => { - // Act - const { getDesktopConfig } = await import('../../src/main/config'); - const config = getDesktopConfig(); - - // Assert - expect(Object.keys(config)).toEqual(['apiUrl']); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/main/ipc/handlers-utils.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/main/ipc/handlers-utils.unit.test.ts deleted file mode 100644 index 3905889f2..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/main/ipc/handlers-utils.unit.test.ts +++ /dev/null @@ -1,784 +0,0 @@ -/** - * Unit tests for pure utility functions extracted from handlers.ts - * - * Note: The handlers.ts file contains mostly IPC handler registration code - * that requires Electron mocking. These tests focus on the pure utility - * functions that can be tested in isolation. - * - * Functions tested: - * - sanitizeString (text validation/sanitization) - * - extractScreenshots (base64 image extraction) - * - sanitizeToolOutput (output cleaning) - * - ID generation patterns - */ - -import { describe, it, expect } from 'vitest'; - -// Since these functions are not exported from handlers.ts, -// we'll recreate them here for testing purposes. -// In a real codebase, these would be extracted to a separate utils file. - -const MAX_TEXT_LENGTH = 8000; - -/** - * Sanitize and validate string input - */ -function sanitizeString(input: unknown, field: string, maxLength = MAX_TEXT_LENGTH): string { - if (typeof input !== 'string') { - throw new Error(`${field} must be a string`); - } - const trimmed = input.trim(); - if (!trimmed) { - throw new Error(`${field} is required`); - } - if (trimmed.length > maxLength) { - throw new Error(`${field} exceeds maximum length`); - } - return trimmed; -} - -/** - * Create a task ID with timestamp and random suffix - */ -function createTaskId(): string { - return `task_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`; -} - -/** - * Create a message ID with timestamp and random suffix - */ -function createMessageId(): string { - return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`; -} - -/** - * Extract base64 screenshots from tool output - */ -function extractScreenshots(output: string): { - cleanedText: string; - attachments: Array<{ type: 'screenshot' | 'json'; data: string; label?: string }>; -} { - const attachments: Array<{ type: 'screenshot' | 'json'; data: string; label?: string }> = []; - - // Match data URLs (data:image/png;base64,...) - const dataUrlRegex = /data:image\/(png|jpeg|jpg|webp);base64,[A-Za-z0-9+/=]+/g; - let match; - while ((match = dataUrlRegex.exec(output)) !== null) { - attachments.push({ - type: 'screenshot', - data: match[0], - label: 'Browser screenshot', - }); - } - - // Also check for raw base64 PNG (starts with iVBORw0) - const rawBase64Regex = /(? 100) { - attachments.push({ - type: 'screenshot', - data: `data:image/png;base64,${base64Data}`, - label: 'Browser screenshot', - }); - } - } - - // Clean the text - let cleanedText = output - .replace(dataUrlRegex, '[Screenshot captured]') - .replace(rawBase64Regex, '[Screenshot captured]'); - - cleanedText = cleanedText - .replace(/"[Screenshot captured]"/g, '"[Screenshot]"') - .replace(/\[Screenshot captured\]\[Screenshot captured\]/g, '[Screenshot captured]'); - - return { cleanedText, attachments }; -} - -/** - * Sanitize tool output to remove technical details - */ -function sanitizeToolOutput(text: string, isError: boolean): string { - let result = text; - - // Strip ANSI escape codes - result = result.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, ''); - result = result.replace(/\x1B\[2m|\x1B\[22m|\x1B\[0m/g, ''); - - // Remove WebSocket URLs - result = result.replace(/ws:\/\/[^\s\]]+/g, '[connection]'); - - // Remove "Call log:" sections - result = result.replace(/\s*Call log:[\s\S]*/i, ''); - - if (isError) { - // Timeout errors - const timeoutMatch = result.match(/timed? ?out after (\d+)ms/i); - if (timeoutMatch) { - const seconds = Math.round(parseInt(timeoutMatch[1]) / 1000); - return `Timed out after ${seconds}s`; - } - - // Protocol errors - const protocolMatch = result.match(/Protocol error \([^)]+\):\s*(.+)/i); - if (protocolMatch) { - result = protocolMatch[1].trim(); - } - - result = result.replace(/^Error executing code:\s*/i, ''); - result = result.replace(/browserType\.connectOverCDP:\s*/i, ''); - result = result.replace(/\s+at\s+.+/g, ''); - result = result.replace(/\w+Error:\s*/g, ''); - } - - return result.trim(); -} - -describe('handlers-utils', () => { - describe('sanitizeString()', () => { - describe('valid inputs', () => { - it('should return trimmed string for valid input', () => { - // Act - const result = sanitizeString(' hello world ', 'test'); - - // Assert - expect(result).toBe('hello world'); - }); - - it('should accept string at max length', () => { - // Arrange - const longString = 'a'.repeat(100); - - // Act - const result = sanitizeString(longString, 'test', 100); - - // Assert - expect(result).toBe(longString); - }); - - it('should accept single character string', () => { - // Act - const result = sanitizeString('x', 'test'); - - // Assert - expect(result).toBe('x'); - }); - - it('should handle multiline strings', () => { - // Act - const result = sanitizeString('line1\nline2\nline3', 'test'); - - // Assert - expect(result).toBe('line1\nline2\nline3'); - }); - - it('should handle special characters', () => { - // Act - const result = sanitizeString('!@#$%^&*()', 'test'); - - // Assert - expect(result).toBe('!@#$%^&*()'); - }); - - it('should handle unicode characters', () => { - // Act - const result = sanitizeString('Hello World', 'test'); - - // Assert - expect(result).toBe('Hello World'); - }); - }); - - describe('invalid inputs', () => { - it('should throw error for non-string (number)', () => { - // Act & Assert - expect(() => sanitizeString(123, 'field')).toThrow('field must be a string'); - }); - - it('should throw error for non-string (object)', () => { - // Act & Assert - expect(() => sanitizeString({}, 'field')).toThrow('field must be a string'); - }); - - it('should throw error for non-string (array)', () => { - // Act & Assert - expect(() => sanitizeString(['a', 'b'], 'field')).toThrow('field must be a string'); - }); - - it('should throw error for non-string (null)', () => { - // Act & Assert - expect(() => sanitizeString(null, 'field')).toThrow('field must be a string'); - }); - - it('should throw error for non-string (undefined)', () => { - // Act & Assert - expect(() => sanitizeString(undefined, 'field')).toThrow('field must be a string'); - }); - - it('should throw error for non-string (boolean)', () => { - // Act & Assert - expect(() => sanitizeString(true, 'field')).toThrow('field must be a string'); - }); - - it('should throw error for empty string', () => { - // Act & Assert - expect(() => sanitizeString('', 'field')).toThrow('field is required'); - }); - - it('should throw error for whitespace-only string', () => { - // Act & Assert - expect(() => sanitizeString(' \t\n ', 'field')).toThrow('field is required'); - }); - - it('should throw error for string exceeding max length', () => { - // Arrange - const longString = 'a'.repeat(101); - - // Act & Assert - expect(() => sanitizeString(longString, 'field', 100)).toThrow( - 'field exceeds maximum length' - ); - }); - - it('should use field name in error message', () => { - // Act & Assert - expect(() => sanitizeString(123, 'customField')).toThrow('customField must be a string'); - expect(() => sanitizeString('', 'anotherField')).toThrow('anotherField is required'); - expect(() => sanitizeString('abc', 'lengthField', 2)).toThrow( - 'lengthField exceeds maximum length' - ); - }); - }); - - describe('max length parameter', () => { - it('should use default max length when not specified', () => { - // Arrange - const longString = 'a'.repeat(MAX_TEXT_LENGTH); - - // Act - const result = sanitizeString(longString, 'test'); - - // Assert - expect(result.length).toBe(MAX_TEXT_LENGTH); - }); - - it('should use custom max length', () => { - // Arrange - const customMax = 50; - - // Act - const result = sanitizeString('a'.repeat(customMax), 'test', customMax); - - // Assert - expect(result.length).toBe(customMax); - }); - - it('should throw when exceeding custom max length', () => { - // Act & Assert - expect(() => sanitizeString('a'.repeat(51), 'test', 50)).toThrow( - 'exceeds maximum length' - ); - }); - }); - }); - - describe('ID generation', () => { - describe('createTaskId()', () => { - it('should start with task_ prefix', () => { - // Act - const id = createTaskId(); - - // Assert - expect(id).toMatch(/^task_/); - }); - - it('should include timestamp', () => { - // Arrange - const before = Date.now(); - - // Act - const id = createTaskId(); - - // Assert - const after = Date.now(); - const parts = id.split('_'); - const timestamp = parseInt(parts[1]); - expect(timestamp).toBeGreaterThanOrEqual(before); - expect(timestamp).toBeLessThanOrEqual(after); - }); - - it('should include random suffix', () => { - // Act - const id = createTaskId(); - - // Assert - const parts = id.split('_'); - expect(parts[2]).toMatch(/^[a-z0-9]+$/); - expect(parts[2].length).toBeGreaterThanOrEqual(1); - }); - - it('should generate unique IDs', () => { - // Arrange - const ids = new Set(); - - // Act - for (let i = 0; i < 1000; i++) { - ids.add(createTaskId()); - } - - // Assert - expect(ids.size).toBe(1000); - }); - - it('should match expected format pattern', () => { - // Act - const id = createTaskId(); - - // Assert - expect(id).toMatch(/^task_\d+_[a-z0-9]+$/); - }); - }); - - describe('createMessageId()', () => { - it('should start with msg_ prefix', () => { - // Act - const id = createMessageId(); - - // Assert - expect(id).toMatch(/^msg_/); - }); - - it('should include timestamp', () => { - // Arrange - const before = Date.now(); - - // Act - const id = createMessageId(); - - // Assert - const after = Date.now(); - const parts = id.split('_'); - const timestamp = parseInt(parts[1]); - expect(timestamp).toBeGreaterThanOrEqual(before); - expect(timestamp).toBeLessThanOrEqual(after); - }); - - it('should generate unique IDs', () => { - // Arrange - const ids = new Set(); - - // Act - for (let i = 0; i < 1000; i++) { - ids.add(createMessageId()); - } - - // Assert - expect(ids.size).toBe(1000); - }); - - it('should match expected format pattern', () => { - // Act - const id = createMessageId(); - - // Assert - expect(id).toMatch(/^msg_\d+_[a-z0-9]+$/); - }); - }); - }); - - describe('extractScreenshots()', () => { - describe('data URL extraction', () => { - it('should extract PNG data URL', () => { - // Arrange - const output = 'Here is the screenshot: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== done'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.attachments).toHaveLength(1); - expect(result.attachments[0].type).toBe('screenshot'); - expect(result.attachments[0].data).toContain('data:image/png;base64,'); - expect(result.attachments[0].label).toBe('Browser screenshot'); - }); - - it('should extract JPEG data URL', () => { - // Arrange - const output = 'Image: data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD end'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.attachments).toHaveLength(1); - expect(result.attachments[0].data).toContain('data:image/jpeg;base64,'); - }); - - it('should extract WebP data URL', () => { - // Arrange - const output = 'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAQAcJaQAA3AA/v3AgAA='; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.attachments).toHaveLength(1); - expect(result.attachments[0].data).toContain('data:image/webp;base64,'); - }); - - it('should extract multiple data URLs', () => { - // Arrange - const output = 'First: data:image/png;base64,AAAA Second: data:image/jpeg;base64,BBBB end'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.attachments).toHaveLength(2); - }); - - it('should clean data URLs from text', () => { - // Arrange - const output = 'Before data:image/png;base64,AAAA after'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.cleanedText).toContain('[Screenshot captured]'); - expect(result.cleanedText).not.toContain('data:image'); - }); - }); - - describe('raw base64 PNG extraction', () => { - it('should extract raw base64 PNG starting with iVBORw0', () => { - // Arrange - Create a string that looks like raw base64 PNG (100+ chars) - const base64Png = 'iVBORw0' + 'A'.repeat(150); - const output = `Screenshot: "${base64Png}" end`; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.attachments.length).toBeGreaterThanOrEqual(1); - const pngAttachment = result.attachments.find((a) => a.data.includes('iVBORw0')); - expect(pngAttachment).toBeDefined(); - expect(pngAttachment?.data).toContain('data:image/png;base64,'); - }); - - it('should not extract short base64 strings', () => { - // Arrange - Less than 100 chars after iVBORw0 - const output = 'Short: iVBORw0shortdata end'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.attachments).toHaveLength(0); - }); - }); - - describe('text cleaning', () => { - it('should remove duplicate screenshot placeholders', () => { - // Arrange - const output = 'data:image/png;base64,AAA data:image/png;base64,BBB'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.cleanedText).not.toContain('[Screenshot captured][Screenshot captured]'); - }); - - it('should handle JSON-wrapped screenshots', () => { - // Arrange - const output = '{"image": "data:image/png;base64,AAA"}'; - - // Act - const result = extractScreenshots(output); - - // Assert - // The replacement creates "[Screenshot captured]" first, then quoted versions - // become "[Screenshot]" only if they match the exact pattern - expect(result.cleanedText).toContain('[Screenshot captured]'); - }); - - it('should return empty attachments for output without images', () => { - // Arrange - const output = 'Just some plain text without any images'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.attachments).toHaveLength(0); - expect(result.cleanedText).toBe(output); - }); - - it('should preserve non-image content', () => { - // Arrange - const output = 'Start data:image/png;base64,AAA middle data:image/jpeg;base64,BBB end'; - - // Act - const result = extractScreenshots(output); - - // Assert - expect(result.cleanedText).toContain('Start'); - expect(result.cleanedText).toContain('middle'); - expect(result.cleanedText).toContain('end'); - }); - }); - }); - - describe('sanitizeToolOutput()', () => { - describe('ANSI escape code removal', () => { - it('should strip basic ANSI color codes', () => { - // Arrange - const output = '\x1b[31mRed text\x1b[0m'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Red text'); - expect(result).not.toContain('\x1b'); - }); - - it('should strip complex ANSI sequences', () => { - // Arrange - const output = '\x1b[1;32;40mBold green on black\x1b[0m'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Bold green on black'); - }); - - it('should strip dim/bold toggle codes', () => { - // Arrange - const output = '\x1b[2mdimmed\x1b[22m normal \x1b[0m'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('dimmed normal'); - }); - - it('should handle multiple ANSI sequences', () => { - // Arrange - const output = '\x1b[31mRed\x1b[0m \x1b[32mGreen\x1b[0m \x1b[34mBlue\x1b[0m'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Red Green Blue'); - }); - }); - - describe('WebSocket URL removal', () => { - it('should replace WebSocket URLs with [connection]', () => { - // Arrange - const output = 'Connected to ws://localhost:9222/devtools/browser/abc123'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Connected to [connection]'); - expect(result).not.toContain('ws://'); - }); - - it('should handle multiple WebSocket URLs', () => { - // Arrange - const output = 'URL1: ws://host1:1234 URL2: ws://host2:5678/path'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toContain('[connection]'); - expect(result).not.toContain('ws://'); - }); - }); - - describe('Call log removal', () => { - it('should remove Call log section and everything after', () => { - // Arrange - const output = 'Important output\nCall log:\n- step 1\n- step 2\n- step 3'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Important output'); - expect(result).not.toContain('Call log'); - expect(result).not.toContain('step 1'); - }); - - it('should be case insensitive for Call log', () => { - // Arrange - const output = 'Output\nCALL LOG:\nstuff'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Output'); - }); - }); - - describe('error mode processing', () => { - it('should simplify timeout errors', () => { - // Arrange - const output = 'TimeoutError: Operation timed out after 30000ms waiting for selector'; - - // Act - const result = sanitizeToolOutput(output, true); - - // Assert - expect(result).toBe('Timed out after 30s'); - }); - - it('should handle various timeout formats', () => { - // Arrange - const output1 = 'timeout after 5000ms'; - const output2 = 'timedout after 10000ms'; - - // Act - const result1 = sanitizeToolOutput(output1, true); - const result2 = sanitizeToolOutput(output2, true); - - // Assert - expect(result1).toBe('Timed out after 5s'); - expect(result2).toBe('Timed out after 10s'); - }); - - it('should extract message from Protocol error', () => { - // Arrange - const output = 'Protocol error (Runtime.callFunctionOn): Target closed.'; - - // Act - const result = sanitizeToolOutput(output, true); - - // Assert - expect(result).toBe('Target closed.'); - expect(result).not.toContain('Protocol error'); - }); - - it('should remove Error executing code prefix', () => { - // Arrange - const output = 'Error executing code: Something went wrong'; - - // Act - const result = sanitizeToolOutput(output, true); - - // Assert - expect(result).toBe('Something went wrong'); - }); - - it('should remove browserType.connectOverCDP prefix', () => { - // Arrange - const output = 'browserType.connectOverCDP: Connection refused'; - - // Act - const result = sanitizeToolOutput(output, true); - - // Assert - expect(result).toBe('Connection refused'); - }); - - it('should remove stack traces', () => { - // Arrange - const output = 'Error message\n at Function.run (/path/to/file.js:10:5)\n at async Context.'; - - // Act - const result = sanitizeToolOutput(output, true); - - // Assert - expect(result).toBe('Error message'); - expect(result).not.toContain('at Function'); - expect(result).not.toContain('/path/to'); - }); - - it('should remove error class names', () => { - // Arrange - const output = 'CodeExecutionTimeoutError: The operation took too long'; - - // Act - const result = sanitizeToolOutput(output, true); - - // Assert - expect(result).toBe('The operation took too long'); - expect(result).not.toContain('Error:'); - }); - - it('should not process error-specific patterns when isError is false', () => { - // Arrange - const output = 'Error executing code: This should remain'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Error executing code: This should remain'); - }); - }); - - describe('trimming', () => { - it('should trim whitespace from result', () => { - // Arrange - const output = ' Output with spaces '; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Output with spaces'); - }); - - it('should handle empty string', () => { - // Act - const result = sanitizeToolOutput('', false); - - // Assert - expect(result).toBe(''); - }); - - it('should handle whitespace-only string', () => { - // Act - const result = sanitizeToolOutput(' \t\n ', false); - - // Assert - expect(result).toBe(''); - }); - }); - - describe('complex scenarios', () => { - it('should handle combined ANSI codes, URLs, and call logs', () => { - // Arrange - const output = '\x1b[32mConnected to ws://localhost:9222/debug\x1b[0m\nDoing work...\nCall log:\n- internal step'; - - // Act - const result = sanitizeToolOutput(output, false); - - // Assert - expect(result).toBe('Connected to [connection]\nDoing work...'); - }); - - it('should handle error mode with multiple cleanup patterns', () => { - // Arrange - const output = '\x1b[31mError executing code: SomeError: timed out after 5000ms\x1b[0m\n at something\nCall log:\n- step'; - - // Act - const result = sanitizeToolOutput(output, true); - - // Assert - expect(result).toBe('Timed out after 5s'); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/main/ipc/validation.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/main/ipc/validation.unit.test.ts deleted file mode 100644 index 807b1ebfa..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/main/ipc/validation.unit.test.ts +++ /dev/null @@ -1,617 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { - validate, - normalizeIpcError, - taskConfigSchema, - permissionResponseSchema, - resumeSessionSchema, -} from '../../../src/main/ipc/validation'; -import { z } from 'zod'; - -describe('validation.ts', () => { - describe('validate()', () => { - const testSchema = z.object({ - name: z.string().min(1, 'Name is required'), - age: z.number().positive('Age must be positive'), - }); - - describe('when given valid payloads', () => { - it('should return the parsed data for valid input', () => { - // Arrange - const payload = { name: 'Alice', age: 30 }; - - // Act - const result = validate(testSchema, payload); - - // Assert - expect(result).toEqual({ name: 'Alice', age: 30 }); - }); - - it('should handle schema with optional fields', () => { - // Arrange - const schemaWithOptional = z.object({ - required: z.string(), - optional: z.string().optional(), - }); - const payload = { required: 'value' }; - - // Act - const result = validate(schemaWithOptional, payload); - - // Assert - expect(result).toEqual({ required: 'value' }); - }); - - it('should handle schema with default values', () => { - // Arrange - const schemaWithDefault = z.object({ - value: z.string().default('default'), - }); - const payload = {}; - - // Act - const result = validate(schemaWithDefault, payload); - - // Assert - expect(result).toEqual({ value: 'default' }); - }); - }); - - describe('when given invalid payloads', () => { - it('should throw an error for missing required fields', () => { - // Arrange - const payload = { age: 30 }; - - // Act & Assert - // Note: Zod returns "Required" for missing fields by default - expect(() => validate(testSchema, payload)).toThrow('Invalid payload: Required'); - }); - - it('should throw an error for wrong types', () => { - // Arrange - const payload = { name: 'Alice', age: 'thirty' }; - - // Act & Assert - expect(() => validate(testSchema, payload)).toThrow('Invalid payload:'); - }); - - it('should throw an error for validation constraints', () => { - // Arrange - const payload = { name: 'Alice', age: -5 }; - - // Act & Assert - expect(() => validate(testSchema, payload)).toThrow('Invalid payload: Age must be positive'); - }); - - it('should concatenate multiple error messages with semicolons', () => { - // Arrange - const payload = { name: '', age: -5 }; - - // Act & Assert - expect(() => validate(testSchema, payload)).toThrow('Invalid payload:'); - try { - validate(testSchema, payload); - } catch (error) { - expect((error as Error).message).toContain(';'); - } - }); - - it('should throw for null payload', () => { - // Act & Assert - expect(() => validate(testSchema, null)).toThrow('Invalid payload:'); - }); - - it('should throw for undefined payload', () => { - // Act & Assert - expect(() => validate(testSchema, undefined)).toThrow('Invalid payload:'); - }); - }); - }); - - describe('normalizeIpcError()', () => { - it('should return the same Error instance if given an Error', () => { - // Arrange - const error = new Error('Original error'); - - // Act - const result = normalizeIpcError(error); - - // Assert - expect(result).toBe(error); - expect(result.message).toBe('Original error'); - }); - - it('should wrap a string in an Error', () => { - // Arrange - const error = 'String error message'; - - // Act - const result = normalizeIpcError(error); - - // Assert - expect(result).toBeInstanceOf(Error); - expect(result.message).toBe('String error message'); - }); - - it('should return "Unknown IPC error" for null', () => { - // Act - const result = normalizeIpcError(null); - - // Assert - expect(result).toBeInstanceOf(Error); - expect(result.message).toBe('Unknown IPC error'); - }); - - it('should return "Unknown IPC error" for undefined', () => { - // Act - const result = normalizeIpcError(undefined); - - // Assert - expect(result).toBeInstanceOf(Error); - expect(result.message).toBe('Unknown IPC error'); - }); - - it('should return "Unknown IPC error" for objects', () => { - // Arrange - const error = { message: 'Object error', code: 123 }; - - // Act - const result = normalizeIpcError(error); - - // Assert - expect(result).toBeInstanceOf(Error); - expect(result.message).toBe('Unknown IPC error'); - }); - - it('should return "Unknown IPC error" for numbers', () => { - // Act - const result = normalizeIpcError(42); - - // Assert - expect(result).toBeInstanceOf(Error); - expect(result.message).toBe('Unknown IPC error'); - }); - - it('should return "Unknown IPC error" for boolean', () => { - // Act - const result = normalizeIpcError(false); - - // Assert - expect(result).toBeInstanceOf(Error); - expect(result.message).toBe('Unknown IPC error'); - }); - - it('should preserve Error subclass types', () => { - // Arrange - class CustomError extends Error { - code: number; - constructor(message: string, code: number) { - super(message); - this.code = code; - } - } - const error = new CustomError('Custom error', 500); - - // Act - const result = normalizeIpcError(error); - - // Assert - expect(result).toBe(error); - expect(result).toBeInstanceOf(CustomError); - expect((result as CustomError).code).toBe(500); - }); - }); - - describe('taskConfigSchema', () => { - describe('valid payloads', () => { - it('should accept minimal valid config with prompt only', () => { - // Arrange - const config = { prompt: 'Do something' }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data.prompt).toBe('Do something'); - } - }); - - it('should accept full config with all optional fields', () => { - // Arrange - const config = { - prompt: 'Create a file', - taskId: 'task_123', - workingDirectory: '/home/user', - allowedTools: ['read', 'write'], - systemPromptAppend: 'Be concise', - outputSchema: { type: 'object' }, - sessionId: 'session_abc', - chrome: true, - }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data).toEqual(config); - } - }); - - it('should accept empty arrays for allowedTools', () => { - // Arrange - const config = { prompt: 'Test', allowedTools: [] }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(true); - }); - - it('should accept chrome as false', () => { - // Arrange - const config = { prompt: 'Test', chrome: false }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data.chrome).toBe(false); - } - }); - }); - - describe('invalid payloads', () => { - it('should reject empty prompt', () => { - // Arrange - const config = { prompt: '' }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - if (!result.success) { - expect(result.error.issues[0].message).toBe('Prompt is required'); - } - }); - - it('should reject missing prompt', () => { - // Arrange - const config = {}; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - }); - - it('should accept prompt with only whitespace (min(1) allows whitespace)', () => { - // Arrange - const config = { prompt: ' ' }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - // Note: z.string().min(1) only checks length, not trimmed content - // The sanitization of whitespace-only strings happens in validateTaskConfig() - expect(result.success).toBe(true); - }); - - it('should reject non-string prompt', () => { - // Arrange - const config = { prompt: 123 }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - }); - - it('should reject non-array allowedTools', () => { - // Arrange - const config = { prompt: 'Test', allowedTools: 'read,write' }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - }); - - it('should reject non-boolean chrome', () => { - // Arrange - const config = { prompt: 'Test', chrome: 'yes' }; - - // Act - const result = taskConfigSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - }); - }); - }); - - describe('permissionResponseSchema', () => { - describe('valid payloads', () => { - it('should accept minimal allow response', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: 'task_456', - decision: 'allow', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(true); - }); - - it('should accept minimal deny response', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: 'task_456', - decision: 'deny', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(true); - }); - - it('should accept response with message', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: 'task_456', - decision: 'allow', - message: 'User approved', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data.message).toBe('User approved'); - } - }); - - it('should accept response with selectedOptions', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: 'task_456', - decision: 'allow', - selectedOptions: ['option1', 'option2'], - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data.selectedOptions).toEqual(['option1', 'option2']); - } - }); - }); - - describe('invalid payloads', () => { - it('should reject empty requestId', () => { - // Arrange - const response = { - requestId: '', - taskId: 'task_456', - decision: 'allow', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(false); - if (!result.success) { - expect(result.error.issues[0].message).toBe('Request ID is required'); - } - }); - - it('should reject empty taskId', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: '', - decision: 'allow', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(false); - if (!result.success) { - expect(result.error.issues[0].message).toBe('Task ID is required'); - } - }); - - it('should reject invalid decision', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: 'task_456', - decision: 'maybe', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(false); - }); - - it('should reject missing decision', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: 'task_456', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(false); - }); - - it('should reject non-array selectedOptions', () => { - // Arrange - const response = { - requestId: 'req_123', - taskId: 'task_456', - decision: 'allow', - selectedOptions: 'option1,option2', - }; - - // Act - const result = permissionResponseSchema.safeParse(response); - - // Assert - expect(result.success).toBe(false); - }); - }); - }); - - describe('resumeSessionSchema', () => { - describe('valid payloads', () => { - it('should accept minimal resume config', () => { - // Arrange - const config = { - sessionId: 'session_abc', - prompt: 'Continue the task', - }; - - // Act - const result = resumeSessionSchema.safeParse(config); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data).toEqual(config); - } - }); - - it('should accept resume config with existingTaskId', () => { - // Arrange - const config = { - sessionId: 'session_abc', - prompt: 'Continue the task', - existingTaskId: 'task_123', - }; - - // Act - const result = resumeSessionSchema.safeParse(config); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data.existingTaskId).toBe('task_123'); - } - }); - - it('should accept resume config with chrome flag', () => { - // Arrange - const config = { - sessionId: 'session_abc', - prompt: 'Continue the task', - chrome: true, - }; - - // Act - const result = resumeSessionSchema.safeParse(config); - - // Assert - expect(result.success).toBe(true); - if (result.success) { - expect(result.data.chrome).toBe(true); - } - }); - }); - - describe('invalid payloads', () => { - it('should reject empty sessionId', () => { - // Arrange - const config = { - sessionId: '', - prompt: 'Continue', - }; - - // Act - const result = resumeSessionSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - if (!result.success) { - expect(result.error.issues[0].message).toBe('Session ID is required'); - } - }); - - it('should reject empty prompt', () => { - // Arrange - const config = { - sessionId: 'session_abc', - prompt: '', - }; - - // Act - const result = resumeSessionSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - if (!result.success) { - expect(result.error.issues[0].message).toBe('Prompt is required'); - } - }); - - it('should reject missing sessionId', () => { - // Arrange - const config = { - prompt: 'Continue', - }; - - // Act - const result = resumeSessionSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - }); - - it('should reject missing prompt', () => { - // Arrange - const config = { - sessionId: 'session_abc', - }; - - // Act - const result = resumeSessionSchema.safeParse(config); - - // Assert - expect(result.success).toBe(false); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/main/opencode/stream-parser.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/main/opencode/stream-parser.unit.test.ts deleted file mode 100644 index 9554c46a6..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/main/opencode/stream-parser.unit.test.ts +++ /dev/null @@ -1,692 +0,0 @@ -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; -import { StreamParser } from '../../../src/main/opencode/stream-parser'; -import type { OpenCodeMessage } from '@accomplish/shared'; - -describe('StreamParser', () => { - let parser: StreamParser; - let messageHandler: ReturnType; - let errorHandler: ReturnType; - - beforeEach(() => { - parser = new StreamParser(); - messageHandler = vi.fn(); - errorHandler = vi.fn(); - parser.on('message', messageHandler); - parser.on('error', errorHandler); - // Suppress console.log/error during tests - vi.spyOn(console, 'log').mockImplementation(() => {}); - vi.spyOn(console, 'error').mockImplementation(() => {}); - }); - - afterEach(() => { - parser.removeAllListeners(); - vi.restoreAllMocks(); - }); - - describe('feed() with complete JSON lines', () => { - it('should parse a single complete JSON line', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Hello world', - }, - }; - - // Act - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(message); - }); - - it('should parse multiple JSON lines in a single feed', () => { - // Arrange - const message1: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'First message', - }, - }; - const message2: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_2', - sessionID: 'session_1', - messageID: 'msg_2', - type: 'text', - text: 'Second message', - }, - }; - - // Act - parser.feed(JSON.stringify(message1) + '\n' + JSON.stringify(message2) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(2); - expect(messageHandler).toHaveBeenNthCalledWith(1, message1); - expect(messageHandler).toHaveBeenNthCalledWith(2, message2); - }); - - it('should handle step_start message type', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'step_start', - part: { - id: 'step_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'step-start', - }, - }; - - // Act - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledWith(message); - }); - - it('should handle tool_call message type', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'tool_call', - part: { - id: 'tool_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'tool-call', - tool: 'read_file', - input: { path: '/test.txt' }, - }, - }; - - // Act - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledWith(message); - }); - - it('should handle tool_result message type', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'tool_result', - part: { - id: 'result_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'tool-result', - toolCallID: 'tool_1', - output: 'File contents here', - }, - }; - - // Act - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledWith(message); - }); - - it('should handle step_finish message type', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'step_finish', - part: { - id: 'step_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'step-finish', - reason: 'stop', - }, - }; - - // Act - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledWith(message); - }); - }); - - describe('chunked data across multiple feed calls', () => { - it('should buffer incomplete JSON and parse when complete', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Complete message', - }, - }; - const json = JSON.stringify(message); - const chunk1 = json.substring(0, 20); - const chunk2 = json.substring(20) + '\n'; - - // Act - parser.feed(chunk1); - expect(messageHandler).not.toHaveBeenCalled(); - - parser.feed(chunk2); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(message); - }); - - it('should handle message split across three chunks', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'A longer message to split into parts', - }, - }; - const json = JSON.stringify(message); - const chunk1 = json.substring(0, 15); - const chunk2 = json.substring(15, 40); - const chunk3 = json.substring(40) + '\n'; - - // Act - parser.feed(chunk1); - parser.feed(chunk2); - expect(messageHandler).not.toHaveBeenCalled(); - - parser.feed(chunk3); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(message); - }); - - it('should handle complete message followed by partial in same feed', () => { - // Arrange - const message1: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'First', - }, - }; - const message2: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_2', - sessionID: 'session_1', - messageID: 'msg_2', - type: 'text', - text: 'Second', - }, - }; - const json2 = JSON.stringify(message2); - - // Act - parser.feed(JSON.stringify(message1) + '\n' + json2.substring(0, 10)); - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(message1); - - parser.feed(json2.substring(10) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(2); - expect(messageHandler).toHaveBeenNthCalledWith(2, message2); - }); - }); - - describe('incomplete JSON handling', () => { - it('should keep incomplete JSON in buffer until newline', () => { - // Arrange - const incomplete = '{"type":"text","part":{"id":"1","text":"no newline"}'; - - // Act - parser.feed(incomplete); - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - expect(errorHandler).not.toHaveBeenCalled(); - }); - - it('should flush incomplete buffer when flush() is called', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Flushed message', - }, - }; - - // Act - parser.feed(JSON.stringify(message)); - expect(messageHandler).not.toHaveBeenCalled(); - - parser.flush(); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(message); - }); - - it('should skip empty lines', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Message', - }, - }; - - // Act - parser.feed('\n\n' + JSON.stringify(message) + '\n\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - }); - - it('should skip whitespace-only lines', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Message', - }, - }; - - // Act - parser.feed(' \n' + JSON.stringify(message) + '\n \t \n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - }); - }); - - describe('terminal decoration filtering', () => { - it('should skip lines starting with box-drawing characters', () => { - // Arrange - const boxDrawingLines = [ - '│ Some content', - '┌────────────', - '┐', - '└────────────', - '┘', - '├──────────', - '┤', - '┬', - '┴', - '┼', - '─────────', - '◆ Option 1', - '● Selected', - '○ Unselected', - '◇ Diamond', - ]; - - // Act - for (const line of boxDrawingLines) { - parser.feed(line + '\n'); - } - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - expect(errorHandler).not.toHaveBeenCalled(); - }); - - it('should skip ANSI escape sequences', () => { - // Arrange - const ansiLines = [ - '\x1b[31mRed text\x1b[0m', - '\x1b[1;32mBold green\x1b[0m', - '\x1b[2m dimmed text \x1b[22m', - ]; - - // Act - for (const line of ansiLines) { - parser.feed(line + '\n'); - } - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - }); - - it('should skip control characters at start of line', () => { - // Arrange - const controlLines = [ - '\x00null char', - '\x07bell', - '\x1funit separator', - '\x7fdelete', - ]; - - // Act - for (const line of controlLines) { - parser.feed(line + '\n'); - } - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - }); - - it('should skip lines not starting with {', () => { - // Arrange - const nonJsonLines = [ - 'Some plain text', - '123 a number', - '[array start]', - 'Status: running', - ]; - - // Act - for (const line of nonJsonLines) { - parser.feed(line + '\n'); - } - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - expect(errorHandler).not.toHaveBeenCalled(); - }); - - it('should parse valid JSON after skipping decorations', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Valid', - }, - }; - - // Act - parser.feed('│ Header\n'); - parser.feed(JSON.stringify(message) + '\n'); - parser.feed('└─────\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(message); - }); - }); - - describe('buffer overflow protection', () => { - it('should emit error and truncate buffer when exceeding max size', () => { - // Arrange - const maxBufferSize = 10 * 1024 * 1024; // 10MB - const largeChunk = 'x'.repeat(maxBufferSize + 100); - - // Act - parser.feed(largeChunk); - - // Assert - expect(errorHandler).toHaveBeenCalledTimes(1); - expect(errorHandler).toHaveBeenCalledWith( - expect.objectContaining({ - message: 'Stream buffer size exceeded maximum limit', - }) - ); - }); - - it('should keep parsing continuity after buffer truncation and reset', () => { - // Arrange - Feed large data to trigger truncation - const maxBufferSize = 10 * 1024 * 1024; - const largeChunk = 'x'.repeat(maxBufferSize + 100); - - // Act - First trigger overflow - parser.feed(largeChunk); - - // Reset parser and handlers to verify continued operation - parser.reset(); // Clear corrupted buffer - messageHandler.mockClear(); - errorHandler.mockClear(); - - // Feed valid message after overflow - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'After overflow', - }, - }; - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - Parser should still work after reset - expect(messageHandler).toHaveBeenCalledWith(message); - }); - }); - - describe('NDJSON format parsing', () => { - it('should parse newline-delimited JSON stream', () => { - // Arrange - const messages: OpenCodeMessage[] = [ - { - type: 'step_start', - part: { id: 's1', sessionID: 'sess', messageID: 'm1', type: 'step-start' }, - }, - { - type: 'text', - part: { id: 't1', sessionID: 'sess', messageID: 'm1', type: 'text', text: 'Hello' }, - }, - { - type: 'step_finish', - part: { id: 's1', sessionID: 'sess', messageID: 'm1', type: 'step-finish', reason: 'stop' }, - }, - ]; - - const ndjson = messages.map((m) => JSON.stringify(m)).join('\n') + '\n'; - - // Act - parser.feed(ndjson); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(3); - messages.forEach((msg, i) => { - expect(messageHandler).toHaveBeenNthCalledWith(i + 1, msg); - }); - }); - - it('should handle Windows line endings (CRLF)', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Windows', - }, - }; - // Note: \r\n ends up with \r as part of the JSON which fails parsing - // The parser only splits on \n, so \r becomes part of the line - // This is actually correct behavior - the CLI should output \n only - - // Act - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - }); - }); - - describe('error events for malformed JSON', () => { - it('should emit error for invalid JSON starting with {', () => { - // Arrange - const malformedJson = '{invalid json here}\n'; - - // Act - parser.feed(malformedJson); - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - expect(errorHandler).toHaveBeenCalledTimes(1); - expect(errorHandler).toHaveBeenCalledWith( - expect.objectContaining({ - message: expect.stringContaining('Failed to parse JSON'), - }) - ); - }); - - it('should emit error for truncated JSON', () => { - // Arrange - const truncatedJson = '{"type":"text","part":{"text":"incomplete\n'; - - // Act - parser.feed(truncatedJson); - - // Assert - expect(errorHandler).toHaveBeenCalledTimes(1); - }); - - it('should continue parsing after error', () => { - // Arrange - const malformed = '{bad}\n'; - const validMessage: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Valid', - }, - }; - - // Act - parser.feed(malformed); - parser.feed(JSON.stringify(validMessage) + '\n'); - - // Assert - expect(errorHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(validMessage); - }); - - it('should not emit error for non-JSON lines not starting with {', () => { - // Arrange - const nonJsonLines = 'Status: OK\nProgress: 50%\n'; - - // Act - parser.feed(nonJsonLines); - - // Assert - expect(errorHandler).not.toHaveBeenCalled(); - }); - }); - - describe('reset()', () => { - it('should clear the buffer', () => { - // Arrange - parser.feed('{"partial": "json"'); - - // Act - parser.reset(); - parser.feed('}\n'); // This should not parse without the beginning - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - }); - - it('should allow fresh parsing after reset', () => { - // Arrange - parser.feed('old partial data'); - parser.reset(); - - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Fresh', - }, - }; - - // Act - parser.feed(JSON.stringify(message) + '\n'); - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - expect(messageHandler).toHaveBeenCalledWith(message); - }); - }); - - describe('flush()', () => { - it('should do nothing if buffer is empty', () => { - // Act - parser.flush(); - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - expect(errorHandler).not.toHaveBeenCalled(); - }); - - it('should do nothing if buffer contains only whitespace', () => { - // Arrange - parser.feed(' \t '); - - // Act - parser.flush(); - - // Assert - expect(messageHandler).not.toHaveBeenCalled(); - }); - - it('should clear buffer after flushing', () => { - // Arrange - const message: OpenCodeMessage = { - type: 'text', - part: { - id: 'msg_1', - sessionID: 'session_1', - messageID: 'msg_1', - type: 'text', - text: 'Message', - }, - }; - parser.feed(JSON.stringify(message)); - - // Act - parser.flush(); - parser.flush(); // Second flush should do nothing - - // Assert - expect(messageHandler).toHaveBeenCalledTimes(1); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/renderer/lib/utils.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/renderer/lib/utils.unit.test.ts deleted file mode 100644 index 372124cd7..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/renderer/lib/utils.unit.test.ts +++ /dev/null @@ -1,437 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { cn } from '../../../src/renderer/lib/utils'; - -describe('utils.ts', () => { - describe('cn() - class name merging', () => { - describe('basic usage', () => { - it('should return single class unchanged', () => { - // Act - const result = cn('text-red-500'); - - // Assert - expect(result).toBe('text-red-500'); - }); - - it('should merge multiple classes', () => { - // Act - const result = cn('text-red-500', 'bg-white'); - - // Assert - expect(result).toBe('text-red-500 bg-white'); - }); - - it('should handle empty string inputs', () => { - // Act - const result = cn('', 'text-red-500', ''); - - // Assert - expect(result).toBe('text-red-500'); - }); - - it('should handle no arguments', () => { - // Act - const result = cn(); - - // Assert - expect(result).toBe(''); - }); - - it('should handle single empty string', () => { - // Act - const result = cn(''); - - // Assert - expect(result).toBe(''); - }); - }); - - describe('conditional classes with clsx', () => { - it('should include class when condition is true', () => { - // Arrange - const isActive = true; - - // Act - const result = cn('base', isActive && 'active'); - - // Assert - expect(result).toBe('base active'); - }); - - it('should exclude class when condition is false', () => { - // Arrange - const isActive = false; - - // Act - const result = cn('base', isActive && 'active'); - - // Assert - expect(result).toBe('base'); - }); - - it('should handle object syntax for conditionals', () => { - // Arrange - const isActive = true; - const isDisabled = false; - - // Act - const result = cn('base', { - active: isActive, - disabled: isDisabled, - }); - - // Assert - expect(result).toBe('base active'); - }); - - it('should handle array of classes', () => { - // Act - const result = cn(['text-red-500', 'bg-white']); - - // Assert - expect(result).toBe('text-red-500 bg-white'); - }); - - it('should handle nested arrays', () => { - // Act - const result = cn(['base', ['nested1', 'nested2']]); - - // Assert - expect(result).toBe('base nested1 nested2'); - }); - - it('should handle null and undefined values', () => { - // Act - const result = cn('base', null, undefined, 'end'); - - // Assert - expect(result).toBe('base end'); - }); - - it('should handle false and 0 values', () => { - // Act - const result = cn('base', false, 0, 'end'); - - // Assert - expect(result).toBe('base end'); - }); - }); - - describe('Tailwind conflict resolution', () => { - it('should resolve conflicting padding classes (later wins)', () => { - // Act - const result = cn('p-4', 'p-8'); - - // Assert - expect(result).toBe('p-8'); - }); - - it('should resolve conflicting margin classes', () => { - // Act - const result = cn('m-2', 'm-4'); - - // Assert - expect(result).toBe('m-4'); - }); - - it('should resolve conflicting text color classes', () => { - // Act - const result = cn('text-red-500', 'text-blue-500'); - - // Assert - expect(result).toBe('text-blue-500'); - }); - - it('should resolve conflicting background color classes', () => { - // Act - const result = cn('bg-white', 'bg-black'); - - // Assert - expect(result).toBe('bg-black'); - }); - - it('should not merge non-conflicting classes', () => { - // Act - const result = cn('text-red-500', 'bg-white', 'p-4'); - - // Assert - expect(result).toBe('text-red-500 bg-white p-4'); - }); - - it('should resolve conflicting font size classes', () => { - // Act - const result = cn('text-sm', 'text-lg'); - - // Assert - expect(result).toBe('text-lg'); - }); - - it('should resolve conflicting font weight classes', () => { - // Act - const result = cn('font-normal', 'font-bold'); - - // Assert - expect(result).toBe('font-bold'); - }); - - it('should resolve conflicting display classes', () => { - // Act - const result = cn('block', 'flex'); - - // Assert - expect(result).toBe('flex'); - }); - - it('should resolve conflicting width classes', () => { - // Act - const result = cn('w-full', 'w-1/2'); - - // Assert - expect(result).toBe('w-1/2'); - }); - - it('should resolve conflicting height classes', () => { - // Act - const result = cn('h-10', 'h-20'); - - // Assert - expect(result).toBe('h-20'); - }); - - it('should handle directional padding without conflict', () => { - // Act - const result = cn('px-4', 'py-2'); - - // Assert - expect(result).toBe('px-4 py-2'); - }); - - it('should resolve px vs px conflicts', () => { - // Act - const result = cn('px-4', 'px-8'); - - // Assert - expect(result).toBe('px-8'); - }); - - it('should not confuse px with p', () => { - // Act - const result = cn('p-4', 'px-8'); - - // Assert - expect(result).toContain('p-4'); - expect(result).toContain('px-8'); - }); - - it('should resolve conflicting rounded classes', () => { - // Act - const result = cn('rounded', 'rounded-lg'); - - // Assert - expect(result).toBe('rounded-lg'); - }); - - it('should resolve conflicting border classes', () => { - // Act - const result = cn('border', 'border-2'); - - // Assert - expect(result).toBe('border-2'); - }); - - it('should resolve conflicting z-index classes', () => { - // Act - const result = cn('z-10', 'z-50'); - - // Assert - expect(result).toBe('z-50'); - }); - }); - - describe('responsive and state variants', () => { - it('should handle responsive prefixes', () => { - // Act - const result = cn('text-sm', 'md:text-base', 'lg:text-lg'); - - // Assert - expect(result).toBe('text-sm md:text-base lg:text-lg'); - }); - - it('should resolve conflicts within same breakpoint', () => { - // Act - const result = cn('md:text-sm', 'md:text-lg'); - - // Assert - expect(result).toBe('md:text-lg'); - }); - - it('should handle hover states', () => { - // Act - const result = cn('bg-white', 'hover:bg-gray-100'); - - // Assert - expect(result).toBe('bg-white hover:bg-gray-100'); - }); - - it('should resolve hover state conflicts', () => { - // Act - const result = cn('hover:bg-gray-100', 'hover:bg-gray-200'); - - // Assert - expect(result).toBe('hover:bg-gray-200'); - }); - - it('should handle focus states', () => { - // Act - const result = cn('outline-none', 'focus:outline-2'); - - // Assert - expect(result).toBe('outline-none focus:outline-2'); - }); - - it('should handle dark mode', () => { - // Act - const result = cn('bg-white', 'dark:bg-gray-900'); - - // Assert - expect(result).toBe('bg-white dark:bg-gray-900'); - }); - }); - - describe('complex real-world usage', () => { - it('should handle button variant pattern', () => { - // Arrange - const baseClasses = 'px-4 py-2 rounded font-medium'; - const variantClasses = 'bg-blue-500 text-white hover:bg-blue-600'; - const sizeOverride = 'px-6 py-3'; - - // Act - const result = cn(baseClasses, variantClasses, sizeOverride); - - // Assert - expect(result).toContain('px-6'); - expect(result).toContain('py-3'); - expect(result).toContain('rounded'); - expect(result).toContain('font-medium'); - expect(result).toContain('bg-blue-500'); - expect(result).not.toContain('px-4'); - expect(result).not.toContain('py-2'); - }); - - it('should handle conditional disabled state', () => { - // Arrange - const isDisabled = true; - const baseClasses = 'bg-blue-500 cursor-pointer'; - const disabledClasses = isDisabled && 'bg-gray-300 cursor-not-allowed'; - - // Act - const result = cn(baseClasses, disabledClasses); - - // Assert - expect(result).toContain('bg-gray-300'); - expect(result).toContain('cursor-not-allowed'); - expect(result).not.toContain('bg-blue-500'); - expect(result).not.toContain('cursor-pointer'); - }); - - it('should handle component prop className override', () => { - // Arrange - simulating component with default + user override - const defaultClasses = 'text-sm text-gray-500'; - const userClassName = 'text-lg text-blue-500'; - - // Act - const result = cn(defaultClasses, userClassName); - - // Assert - expect(result).toBe('text-lg text-blue-500'); - }); - - it('should handle mixed array and string inputs', () => { - // Arrange - const conditionalClasses = ['rounded-lg', 'shadow-md']; - const isLarge = true; - - // Act - const result = cn('base', conditionalClasses, isLarge && 'w-full'); - - // Assert - expect(result).toBe('base rounded-lg shadow-md w-full'); - }); - - it('should handle arbitrary values', () => { - // Act - const result = cn('w-[200px]', 'h-[100px]'); - - // Assert - expect(result).toBe('w-[200px] h-[100px]'); - }); - - it('should resolve arbitrary value conflicts', () => { - // Act - const result = cn('w-[200px]', 'w-[300px]'); - - // Assert - expect(result).toBe('w-[300px]'); - }); - }); - - describe('edge cases', () => { - it('should handle classes with numbers', () => { - // Act - const result = cn('grid-cols-3', 'gap-4'); - - // Assert - expect(result).toBe('grid-cols-3 gap-4'); - }); - - it('should handle negative values', () => { - // Act - const result = cn('-mt-4', '-ml-2'); - - // Assert - expect(result).toBe('-mt-4 -ml-2'); - }); - - it('should handle important modifier', () => { - // Act - const result = cn('!text-red-500', '!bg-white'); - - // Assert - expect(result).toBe('!text-red-500 !bg-white'); - }); - - it('should handle whitespace in class strings', () => { - // Act - const result = cn(' text-red-500 ', ' bg-white '); - - // Assert - expect(result).toBe('text-red-500 bg-white'); - }); - - it('should handle multiple spaces between classes', () => { - // Act - const result = cn('text-red-500 bg-white'); - - // Assert - expect(result).toBe('text-red-500 bg-white'); - }); - - it('should handle deeply nested conditionals', () => { - // Arrange - const a = true; - const b = false; - const c = true; - - // Act - const result = cn( - 'base', - a && 'a-true', - b && 'b-true', - c && ['c-true', b && 'cb-true'] - ); - - // Assert - expect(result).toBe('base a-true c-true'); - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/setup.ts b/openwork-memos-integration/apps/desktop/__tests__/setup.ts deleted file mode 100644 index 5a0fde106..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/setup.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Vitest setup file for tests - * Configures testing-library matchers and global test utilities - */ - -import '@testing-library/jest-dom/vitest'; - -// Extend global types for test utilities -declare global { - // Add any global test utilities here if needed -} - -export {}; diff --git a/openwork-memos-integration/apps/desktop/__tests__/unit/main/ipc/handlers.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/unit/main/ipc/handlers.unit.test.ts deleted file mode 100644 index 1399ee222..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/unit/main/ipc/handlers.unit.test.ts +++ /dev/null @@ -1,1946 +0,0 @@ -/** - * Unit tests for IPC handlers - * - * Tests the registration and invocation of IPC handlers for: - * - Task operations (start, cancel, interrupt, get, list, delete, clear) - * - API key management (get, set, validate, delete) - * - Settings (debug mode, app settings, model selection) - * - Onboarding - * - Permission responses - * - Session management - * - * NOTE: This is a UNIT test, not an integration test. - * All dependent modules (taskHistory, secureStorage, appSettings, task-manager, adapter) - * are mocked to test handler logic in isolation. This follows the principle that - * unit tests should test a single unit with all dependencies mocked. - * - * For true integration testing, see the integration tests that use real - * implementations with temp directories. - * - * @module __tests__/unit/main/ipc/handlers.unit.test - */ - -import { describe, it, expect, vi, beforeEach, afterEach, type Mock } from 'vitest'; - -// Mock electron modules before importing handlers -vi.mock('electron', () => { - const mockHandlers = new Map(); - const mockListeners = new Map>(); - - return { - ipcMain: { - handle: vi.fn((channel: string, handler: Function) => { - mockHandlers.set(channel, handler); - }), - on: vi.fn((channel: string, listener: Function) => { - if (!mockListeners.has(channel)) { - mockListeners.set(channel, new Set()); - } - mockListeners.get(channel)!.add(listener); - }), - removeHandler: vi.fn((channel: string) => { - mockHandlers.delete(channel); - }), - removeAllListeners: vi.fn((channel?: string) => { - if (channel) { - mockListeners.delete(channel); - } else { - mockListeners.clear(); - } - }), - // Helper to get registered handler for testing - _getHandler: (channel: string) => mockHandlers.get(channel), - _getHandlers: () => mockHandlers, - _clear: () => { - mockHandlers.clear(); - mockListeners.clear(); - }, - }, - BrowserWindow: { - fromWebContents: vi.fn(() => ({ - id: 1, - isDestroyed: vi.fn(() => false), - webContents: { - send: vi.fn(), - isDestroyed: vi.fn(() => false), - }, - })), - getFocusedWindow: vi.fn(() => ({ - id: 1, - isDestroyed: vi.fn(() => false), - })), - getAllWindows: vi.fn(() => [{ id: 1, webContents: { send: vi.fn() } }]), - }, - shell: { - openExternal: vi.fn(), - }, - app: { - isPackaged: false, - getPath: vi.fn(() => '/tmp/test-app'), - }, - }; -}); - -// Mock opencode adapter -vi.mock('@main/opencode/adapter', () => ({ - isOpenCodeCliInstalled: vi.fn(() => Promise.resolve(true)), - getOpenCodeCliVersion: vi.fn(() => Promise.resolve('1.0.0')), -})); - -// Mock task manager -const mockTaskManager = { - startTask: vi.fn(), - cancelTask: vi.fn(), - interruptTask: vi.fn(), - sendResponse: vi.fn(), - hasActiveTask: vi.fn(() => false), - getActiveTaskId: vi.fn(() => null), - getSessionId: vi.fn(() => null), - isTaskQueued: vi.fn(() => false), - cancelQueuedTask: vi.fn(), -}; - -vi.mock('@main/opencode/task-manager', () => ({ - getTaskManager: vi.fn(() => mockTaskManager), - disposeTaskManager: vi.fn(), -})); - -// Mock task history -const mockTasks: Array<{ - id: string; - prompt: string; - status: string; - messages: unknown[]; - createdAt: string; -}> = []; - -vi.mock('@main/store/taskHistory', () => ({ - getTasks: vi.fn(() => mockTasks), - getTask: vi.fn((taskId: string) => mockTasks.find((t) => t.id === taskId)), - saveTask: vi.fn((task: unknown) => { - const t = task as { id: string }; - const existing = mockTasks.findIndex((x) => x.id === t.id); - if (existing >= 0) { - mockTasks[existing] = task as (typeof mockTasks)[0]; - } else { - mockTasks.push(task as (typeof mockTasks)[0]); - } - }), - updateTaskStatus: vi.fn(), - updateTaskSessionId: vi.fn(), - updateTaskSummary: vi.fn(), - addTaskMessage: vi.fn(), - deleteTask: vi.fn((taskId: string) => { - const idx = mockTasks.findIndex((t) => t.id === taskId); - if (idx >= 0) mockTasks.splice(idx, 1); - }), - clearHistory: vi.fn(() => { - mockTasks.length = 0; - }), -})); - -// Mock secure storage -let mockApiKeys: Record = {}; -let mockStoredCredentials: Array<{ account: string; password: string }> = []; - -vi.mock('@main/store/secureStorage', () => ({ - storeApiKey: vi.fn((provider: string, key: string) => { - mockApiKeys[provider] = key; - mockStoredCredentials.push({ account: `apiKey:${provider}`, password: key }); - }), - getApiKey: vi.fn((provider: string) => mockApiKeys[provider] || null), - deleteApiKey: vi.fn((provider: string) => { - delete mockApiKeys[provider]; - mockStoredCredentials = mockStoredCredentials.filter( - (c) => c.account !== `apiKey:${provider}` - ); - }), - getAllApiKeys: vi.fn(() => - Promise.resolve({ - anthropic: mockApiKeys['anthropic'] || null, - openai: mockApiKeys['openai'] || null, - google: mockApiKeys['google'] || null, - xai: mockApiKeys['xai'] || null, - custom: mockApiKeys['custom'] || null, - }) - ), - hasAnyApiKey: vi.fn(() => - Promise.resolve(Object.values(mockApiKeys).some((k) => k !== null)) - ), - listStoredCredentials: vi.fn(() => mockStoredCredentials), -})); - -// Mock app settings -let mockDebugMode = false; -let mockOnboardingComplete = false; -let mockSelectedModel: { provider: string; model: string } | null = null; - -vi.mock('@main/store/appSettings', () => ({ - getDebugMode: vi.fn(() => mockDebugMode), - setDebugMode: vi.fn((enabled: boolean) => { - mockDebugMode = enabled; - }), - getAppSettings: vi.fn(() => ({ - debugMode: mockDebugMode, - onboardingComplete: mockOnboardingComplete, - selectedModel: mockSelectedModel, - })), - getOnboardingComplete: vi.fn(() => mockOnboardingComplete), - setOnboardingComplete: vi.fn((complete: boolean) => { - mockOnboardingComplete = complete; - }), - getSelectedModel: vi.fn(() => mockSelectedModel), - setSelectedModel: vi.fn((model: { provider: string; model: string }) => { - mockSelectedModel = model; - }), -})); - -// Mock provider settings -vi.mock('@main/store/providerSettings', () => ({ - getProviderSettings: vi.fn(() => ({ - activeProviderId: 'anthropic', - connectedProviders: { - anthropic: { - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - }, - }, - debugMode: false, - })), - saveProviderSettings: vi.fn(), - getActiveProvider: vi.fn(() => ({ - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - })), - setActiveProvider: vi.fn(), - getConnectedProvider: vi.fn(() => ({ - providerId: 'anthropic', - connectionStatus: 'connected', - selectedModelId: 'claude-3-5-sonnet-20241022', - credentials: { type: 'api-key', apiKey: 'test-key' }, - })), - saveConnectedProvider: vi.fn(), - removeConnectedProvider: vi.fn(), - getActiveProviderModel: vi.fn(() => ({ provider: 'anthropic', model: 'anthropic/claude-3-5-sonnet-20241022' })), - getConnectedProviderIds: vi.fn(() => ['anthropic']), - setProviderDebugMode: vi.fn(), - getProviderDebugMode: vi.fn(() => false), - hasReadyProvider: vi.fn(() => true), -})); - -// Mock config -vi.mock('@main/config', () => ({ - getDesktopConfig: vi.fn(() => ({})), -})); - -// Mock permission API -let mockPendingPermissions = new Map(); - -vi.mock('@main/permission-api', () => ({ - startPermissionApiServer: vi.fn(), - startQuestionApiServer: vi.fn(), - initPermissionApi: vi.fn(), - resolvePermission: vi.fn((requestId: string, allowed: boolean) => { - const pending = mockPendingPermissions.get(requestId); - if (pending) { - pending.resolve(allowed); - mockPendingPermissions.delete(requestId); - return true; - } - return false; - }), - resolveQuestion: vi.fn(() => true), - isFilePermissionRequest: vi.fn((requestId: string) => requestId.startsWith('filereq_')), - isQuestionRequest: vi.fn((requestId: string) => requestId.startsWith('question_')), - QUESTION_API_PORT: 9227, -})); - -// Import after mocks are set up -import { registerIPCHandlers } from '@main/ipc/handlers'; -import { ipcMain, BrowserWindow, shell } from 'electron'; - -// Type the mocked ipcMain with helpers -type MockedIpcMain = typeof ipcMain & { - _getHandler: (channel: string) => Function | undefined; - _getHandlers: () => Map; - _clear: () => void; -}; - -const mockedIpcMain = ipcMain as MockedIpcMain; - -/** - * Helper to invoke a registered handler - */ -async function invokeHandler(channel: string, ...args: unknown[]): Promise { - const handler = mockedIpcMain._getHandler(channel); - if (!handler) { - throw new Error(`No handler registered for channel: ${channel}`); - } - - // Create mock event - const mockEvent = { - sender: { - send: vi.fn(), - isDestroyed: vi.fn(() => false), - }, - }; - - return handler(mockEvent, ...args); -} - -describe('IPC Handlers Integration', () => { - beforeEach(() => { - // Reset all mocks and state - vi.clearAllMocks(); - mockedIpcMain._clear(); - mockTasks.length = 0; - mockApiKeys = {}; - mockStoredCredentials = []; - mockDebugMode = false; - mockOnboardingComplete = false; - mockSelectedModel = null; - mockPendingPermissions.clear(); - - // Reset task manager mocks - mockTaskManager.startTask.mockReset(); - mockTaskManager.cancelTask.mockReset(); - mockTaskManager.interruptTask.mockReset(); - mockTaskManager.sendResponse.mockReset(); - mockTaskManager.hasActiveTask.mockReturnValue(false); - mockTaskManager.getActiveTaskId.mockReturnValue(null); - mockTaskManager.getSessionId.mockReturnValue(null); - mockTaskManager.isTaskQueued.mockReturnValue(false); - mockTaskManager.cancelQueuedTask.mockReset(); - }); - - afterEach(() => { - vi.clearAllMocks(); - }); - - describe('registerIPCHandlers', () => { - it('should register all expected IPC handlers', () => { - // Arrange & Act - registerIPCHandlers(); - - // Assert - const handlers = mockedIpcMain._getHandlers(); - - // Task handlers - expect(handlers.has('task:start')).toBe(true); - expect(handlers.has('task:cancel')).toBe(true); - expect(handlers.has('task:interrupt')).toBe(true); - expect(handlers.has('task:get')).toBe(true); - expect(handlers.has('task:list')).toBe(true); - expect(handlers.has('task:delete')).toBe(true); - expect(handlers.has('task:clear-history')).toBe(true); - - // Permission handler - expect(handlers.has('permission:respond')).toBe(true); - - // Session handler - expect(handlers.has('session:resume')).toBe(true); - - // Settings handlers - expect(handlers.has('settings:api-keys')).toBe(true); - expect(handlers.has('settings:add-api-key')).toBe(true); - expect(handlers.has('settings:remove-api-key')).toBe(true); - expect(handlers.has('settings:debug-mode')).toBe(true); - expect(handlers.has('settings:set-debug-mode')).toBe(true); - expect(handlers.has('settings:app-settings')).toBe(true); - - // API key handlers - expect(handlers.has('api-key:exists')).toBe(true); - expect(handlers.has('api-key:set')).toBe(true); - expect(handlers.has('api-key:get')).toBe(true); - expect(handlers.has('api-key:validate')).toBe(true); - expect(handlers.has('api-key:validate-provider')).toBe(true); - expect(handlers.has('api-key:clear')).toBe(true); - - // Multi-provider API key handlers - expect(handlers.has('api-keys:all')).toBe(true); - expect(handlers.has('api-keys:has-any')).toBe(true); - - // OpenCode handlers - expect(handlers.has('opencode:check')).toBe(true); - expect(handlers.has('opencode:version')).toBe(true); - - // Model handlers - expect(handlers.has('model:get')).toBe(true); - expect(handlers.has('model:set')).toBe(true); - - // Onboarding handlers - expect(handlers.has('onboarding:complete')).toBe(true); - expect(handlers.has('onboarding:set-complete')).toBe(true); - - // Shell handler - expect(handlers.has('shell:open-external')).toBe(true); - - // Log handler - expect(handlers.has('log:event')).toBe(true); - }); - }); - - describe('API Key Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('api-key:exists should return false when no key is stored', async () => { - // Arrange - no keys stored - - // Act - const result = await invokeHandler('api-key:exists'); - - // Assert - expect(result).toBe(false); - }); - - it('api-key:set should store the API key', async () => { - // Arrange - const testKey = 'sk-test-12345678-abcdef'; - - // Act - await invokeHandler('api-key:set', testKey); - mockApiKeys['anthropic'] = testKey; // Simulate storage - const exists = await invokeHandler('api-key:exists'); - - // Assert - expect(exists).toBe(true); - }); - - it('api-key:get should retrieve the stored API key', async () => { - // Arrange - const testKey = 'sk-test-retrieve-key'; - mockApiKeys['anthropic'] = testKey; - - // Act - const result = await invokeHandler('api-key:get'); - - // Assert - expect(result).toBe(testKey); - }); - - it('api-key:clear should remove the stored API key', async () => { - // Arrange - mockApiKeys['anthropic'] = 'sk-test-to-delete'; - - // Act - await invokeHandler('api-key:clear'); - - // Assert - check deleteApiKey was called - const { deleteApiKey } = await import('@main/store/secureStorage'); - expect(deleteApiKey).toHaveBeenCalledWith('anthropic'); - }); - - it('api-key:set should reject empty keys', async () => { - // Arrange & Act & Assert - await expect(invokeHandler('api-key:set', '')).rejects.toThrow(); - await expect(invokeHandler('api-key:set', ' ')).rejects.toThrow(); - }); - - it('api-key:set should reject keys exceeding max length', async () => { - // Arrange - const longKey = 'x'.repeat(300); - - // Act & Assert - await expect(invokeHandler('api-key:set', longKey)).rejects.toThrow('exceeds maximum length'); - }); - }); - - describe('Settings Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('settings:debug-mode should return current debug mode', async () => { - // Arrange - mockDebugMode = true; - - // Act - const result = await invokeHandler('settings:debug-mode'); - - // Assert - expect(result).toBe(true); - }); - - it('settings:set-debug-mode should update debug mode', async () => { - // Arrange - mockDebugMode = false; - - // Act - await invokeHandler('settings:set-debug-mode', true); - - // Assert - const { setDebugMode } = await import('@main/store/appSettings'); - expect(setDebugMode).toHaveBeenCalledWith(true); - }); - - it('settings:set-debug-mode should reject non-boolean values', async () => { - // Arrange & Act & Assert - await expect(invokeHandler('settings:set-debug-mode', 'true')).rejects.toThrow( - 'Invalid debug mode flag' - ); - await expect(invokeHandler('settings:set-debug-mode', 1)).rejects.toThrow( - 'Invalid debug mode flag' - ); - }); - - it('settings:app-settings should return all app settings', async () => { - // Arrange - mockDebugMode = true; - mockOnboardingComplete = true; - mockSelectedModel = { provider: 'anthropic', model: 'claude-3-opus' }; - - // Act - const result = await invokeHandler('settings:app-settings'); - - // Assert - expect(result).toEqual({ - debugMode: true, - onboardingComplete: true, - selectedModel: { provider: 'anthropic', model: 'claude-3-opus' }, - }); - }); - - it('settings:api-keys should return list of stored API keys', async () => { - // Arrange - mockStoredCredentials = [ - { account: 'apiKey:anthropic', password: 'sk-ant-12345678' }, - { account: 'apiKey:openai', password: 'sk-openai-abcdefgh' }, - ]; - - // Act - const result = await invokeHandler('settings:api-keys'); - - // Assert - expect(result).toHaveLength(2); - expect(result).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - provider: 'anthropic', - keyPrefix: 'sk-ant-1...', - }), - expect.objectContaining({ - provider: 'openai', - keyPrefix: 'sk-opena...', - }), - ]) - ); - }); - - it('settings:add-api-key should store API key for valid provider', async () => { - // Arrange - const provider = 'anthropic'; - const key = 'sk-ant-new-key-12345'; - - // Act - const result = await invokeHandler('settings:add-api-key', provider, key); - - // Assert - expect(result).toEqual( - expect.objectContaining({ - provider: 'anthropic', - keyPrefix: 'sk-ant-n...', - isActive: true, - }) - ); - }); - - it('settings:add-api-key should reject unsupported providers', async () => { - // Arrange & Act & Assert - await expect( - invokeHandler('settings:add-api-key', 'unsupported-provider', 'sk-test') - ).rejects.toThrow('Unsupported API key provider'); - }); - - it('settings:remove-api-key should delete the API key', async () => { - // Arrange - mockApiKeys['openai'] = 'sk-openai-test'; - - // Act - await invokeHandler('settings:remove-api-key', 'local-openai'); - - // Assert - const { deleteApiKey } = await import('@main/store/secureStorage'); - expect(deleteApiKey).toHaveBeenCalledWith('openai'); - }); - }); - - describe('Task Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('task:start should create and start a new task', async () => { - // Arrange - const config = { prompt: 'Test task prompt' }; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_123', - prompt: 'Test task prompt', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - const result = await invokeHandler('task:start', config); - - // Assert - expect(mockTaskManager.startTask).toHaveBeenCalledWith( - expect.stringMatching(/^task_/), - expect.objectContaining({ prompt: 'Test task prompt' }), - expect.any(Object) - ); - expect(result).toEqual( - expect.objectContaining({ - prompt: 'Test task prompt', - status: 'running', - }) - ); - }); - - it('task:start should validate task config', async () => { - // Arrange - empty prompt - - // Act & Assert - await expect(invokeHandler('task:start', { prompt: '' })).rejects.toThrow(); - await expect(invokeHandler('task:start', { prompt: ' ' })).rejects.toThrow(); - }); - - it('task:cancel should cancel a running task', async () => { - // Arrange - const taskId = 'task_to_cancel'; - mockTaskManager.hasActiveTask.mockReturnValue(true); - - // Act - await invokeHandler('task:cancel', taskId); - - // Assert - expect(mockTaskManager.cancelTask).toHaveBeenCalledWith(taskId); - }); - - it('task:cancel should cancel a queued task', async () => { - // Arrange - const taskId = 'task_queued'; - mockTaskManager.isTaskQueued.mockReturnValue(true); - - // Act - await invokeHandler('task:cancel', taskId); - - // Assert - expect(mockTaskManager.cancelQueuedTask).toHaveBeenCalledWith(taskId); - }); - - it('task:cancel should do nothing for non-existent task', async () => { - // Arrange - const taskId = 'task_nonexistent'; - mockTaskManager.isTaskQueued.mockReturnValue(false); - mockTaskManager.hasActiveTask.mockReturnValue(false); - - // Act - await invokeHandler('task:cancel', taskId); - - // Assert - expect(mockTaskManager.cancelTask).not.toHaveBeenCalled(); - expect(mockTaskManager.cancelQueuedTask).not.toHaveBeenCalled(); - }); - - it('task:interrupt should interrupt a running task', async () => { - // Arrange - const taskId = 'task_to_interrupt'; - mockTaskManager.hasActiveTask.mockReturnValue(true); - - // Act - await invokeHandler('task:interrupt', taskId); - - // Assert - expect(mockTaskManager.interruptTask).toHaveBeenCalledWith(taskId); - }); - - it('task:get should return task from history', async () => { - // Arrange - const taskId = 'task_existing'; - mockTasks.push({ - id: taskId, - prompt: 'Existing task', - status: 'completed', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - const result = await invokeHandler('task:get', taskId); - - // Assert - expect(result).toEqual( - expect.objectContaining({ - id: taskId, - prompt: 'Existing task', - status: 'completed', - }) - ); - }); - - it('task:get should return null for non-existent task', async () => { - // Arrange - no tasks - - // Act - const result = await invokeHandler('task:get', 'task_nonexistent'); - - // Assert - expect(result).toBeNull(); - }); - - it('task:list should return all tasks from history', async () => { - // Arrange - mockTasks.push( - { - id: 'task_1', - prompt: 'Task 1', - status: 'completed', - messages: [], - createdAt: new Date().toISOString(), - }, - { - id: 'task_2', - prompt: 'Task 2', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - } - ); - - // Act - const result = await invokeHandler('task:list'); - - // Assert - expect(result).toHaveLength(2); - }); - - it('task:delete should remove task from history', async () => { - // Arrange - const taskId = 'task_to_delete'; - mockTasks.push({ - id: taskId, - prompt: 'Task to delete', - status: 'completed', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('task:delete', taskId); - - // Assert - const { deleteTask } = await import('@main/store/taskHistory'); - expect(deleteTask).toHaveBeenCalledWith(taskId); - }); - - it('task:clear-history should clear all tasks', async () => { - // Arrange - mockTasks.push( - { - id: 'task_1', - prompt: 'Task 1', - status: 'completed', - messages: [], - createdAt: new Date().toISOString(), - }, - { - id: 'task_2', - prompt: 'Task 2', - status: 'completed', - messages: [], - createdAt: new Date().toISOString(), - } - ); - - // Act - await invokeHandler('task:clear-history'); - - // Assert - const { clearHistory } = await import('@main/store/taskHistory'); - expect(clearHistory).toHaveBeenCalled(); - }); - }); - - describe('Onboarding Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('onboarding:complete should return false when not completed', async () => { - // Arrange - mockOnboardingComplete = false; - - // Act - const result = await invokeHandler('onboarding:complete'); - - // Assert - expect(result).toBe(false); - }); - - it('onboarding:complete should return true when completed', async () => { - // Arrange - mockOnboardingComplete = true; - - // Act - const result = await invokeHandler('onboarding:complete'); - - // Assert - expect(result).toBe(true); - }); - - it('onboarding:complete should return true if user has task history', async () => { - // Arrange - mockOnboardingComplete = false; - mockTasks.push({ - id: 'existing_task', - prompt: 'Existing task', - status: 'completed', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - const result = await invokeHandler('onboarding:complete'); - - // Assert - expect(result).toBe(true); - }); - - it('onboarding:set-complete should update onboarding status', async () => { - // Arrange - mockOnboardingComplete = false; - - // Act - await invokeHandler('onboarding:set-complete', true); - - // Assert - const { setOnboardingComplete } = await import('@main/store/appSettings'); - expect(setOnboardingComplete).toHaveBeenCalledWith(true); - }); - }); - - describe('Permission Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('permission:respond should send response for active task', async () => { - // Arrange - const taskId = 'task_active'; - mockTaskManager.hasActiveTask.mockReturnValue(true); - - // Act - await invokeHandler('permission:respond', { - requestId: 'req_123', - taskId, - decision: 'allow', - }); - - // Assert - expect(mockTaskManager.sendResponse).toHaveBeenCalledWith(taskId, 'yes'); - }); - - it('permission:respond should send custom message when provided', async () => { - // Arrange - const taskId = 'task_active'; - mockTaskManager.hasActiveTask.mockReturnValue(true); - - // Act - await invokeHandler('permission:respond', { - requestId: 'req_123', - taskId, - decision: 'allow', - message: 'proceed with caution', - }); - - // Assert - expect(mockTaskManager.sendResponse).toHaveBeenCalledWith(taskId, 'proceed with caution'); - }); - - it('permission:respond should send "no" for denied decisions', async () => { - // Arrange - const taskId = 'task_active'; - mockTaskManager.hasActiveTask.mockReturnValue(true); - - // Act - await invokeHandler('permission:respond', { - requestId: 'req_123', - taskId, - decision: 'deny', - }); - - // Assert - expect(mockTaskManager.sendResponse).toHaveBeenCalledWith(taskId, 'no'); - }); - - it('permission:respond should resolve file permission requests', async () => { - // Arrange - const requestId = 'filereq_123_abc'; - const taskId = 'task_active'; - - // Simulate pending file permission - mockPendingPermissions.set(requestId, { resolve: vi.fn() }); - - // Act - await invokeHandler('permission:respond', { - requestId, - taskId, - decision: 'allow', - }); - - // Assert - const { resolvePermission } = await import('@main/permission-api'); - expect(resolvePermission).toHaveBeenCalledWith(requestId, true); - }); - - it('permission:respond should skip response for inactive task', async () => { - // Arrange - const taskId = 'task_inactive'; - mockTaskManager.hasActiveTask.mockReturnValue(false); - - // Act - await invokeHandler('permission:respond', { - requestId: 'req_123', - taskId, - decision: 'allow', - }); - - // Assert - expect(mockTaskManager.sendResponse).not.toHaveBeenCalled(); - }); - }); - - describe('Model Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('model:get should return selected model', async () => { - // Arrange - mockSelectedModel = { provider: 'anthropic', model: 'claude-3-sonnet' }; - - // Act - const result = await invokeHandler('model:get'); - - // Assert - expect(result).toEqual({ provider: 'anthropic', model: 'claude-3-sonnet' }); - }); - - it('model:get should return null when no model selected', async () => { - // Arrange - mockSelectedModel = null; - - // Act - const result = await invokeHandler('model:get'); - - // Assert - expect(result).toBeNull(); - }); - - it('model:set should update selected model', async () => { - // Arrange - const newModel = { provider: 'openai', model: 'gpt-4' }; - - // Act - await invokeHandler('model:set', newModel); - - // Assert - const { setSelectedModel } = await import('@main/store/appSettings'); - expect(setSelectedModel).toHaveBeenCalledWith(newModel); - }); - - it('model:set should reject invalid model configuration', async () => { - // Arrange & Act & Assert - await expect(invokeHandler('model:set', null)).rejects.toThrow( - 'Invalid model configuration' - ); - await expect(invokeHandler('model:set', { provider: 'test' })).rejects.toThrow( - 'Invalid model configuration' - ); - await expect(invokeHandler('model:set', { model: 'test' })).rejects.toThrow( - 'Invalid model configuration' - ); - }); - }); - - describe('Shell Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('shell:open-external should open valid http URL', async () => { - // Arrange - const url = 'https://example.com'; - - // Act - await invokeHandler('shell:open-external', url); - - // Assert - expect(shell.openExternal).toHaveBeenCalledWith(url); - }); - - it('shell:open-external should open valid https URL', async () => { - // Arrange - const url = 'http://localhost:3000'; - - // Act - await invokeHandler('shell:open-external', url); - - // Assert - expect(shell.openExternal).toHaveBeenCalledWith(url); - }); - - it('shell:open-external should reject non-http/https protocols', async () => { - // Arrange & Act & Assert - await expect(invokeHandler('shell:open-external', 'file:///etc/passwd')).rejects.toThrow( - 'Only http and https URLs are allowed' - ); - await expect(invokeHandler('shell:open-external', 'javascript:alert(1)')).rejects.toThrow( - 'Only http and https URLs are allowed' - ); - }); - - it('shell:open-external should reject invalid URLs', async () => { - // Arrange & Act & Assert - await expect(invokeHandler('shell:open-external', 'not-a-url')).rejects.toThrow(); - }); - }); - - describe('OpenCode Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('opencode:check should return CLI status', async () => { - // Arrange - mocked to return installed - - // Act - const result = (await invokeHandler('opencode:check')) as { - installed: boolean; - version: string; - installCommand: string; - }; - - // Assert - expect(result).toEqual( - expect.objectContaining({ - installed: true, - version: '1.0.0', - installCommand: 'npm install -g opencode-ai', - }) - ); - }); - - it('opencode:version should return CLI version', async () => { - // Arrange - mocked to return version - - // Act - const result = await invokeHandler('opencode:version'); - - // Assert - expect(result).toBe('1.0.0'); - }); - }); - - describe('Multi-Provider API Key Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('api-keys:all should return masked keys for all providers', async () => { - // Arrange - mockApiKeys = { - anthropic: 'sk-ant-12345678', - openai: null, - google: 'AIza1234567890', - xai: null, - custom: null, - }; - - // Act - const result = (await invokeHandler('api-keys:all')) as Record< - string, - { exists: boolean; prefix?: string } - >; - - // Assert - expect(result.anthropic).toEqual({ - exists: true, - prefix: 'sk-ant-1...', - }); - expect(result.openai).toEqual({ exists: false, prefix: undefined }); - expect(result.google).toEqual({ - exists: true, - prefix: 'AIza1234...', - }); - }); - - it('api-keys:has-any should return true when any key exists', async () => { - // Arrange - mockApiKeys['anthropic'] = 'sk-test'; - - // Act - const result = await invokeHandler('api-keys:has-any'); - - // Assert - expect(result).toBe(true); - }); - - it('api-keys:has-any should return false when no keys exist', async () => { - // Arrange - no keys - - // Act - const result = await invokeHandler('api-keys:has-any'); - - // Assert - expect(result).toBe(false); - }); - }); - - describe('Session Handlers', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('session:resume should start a new task with session ID', async () => { - // Arrange - const sessionId = 'session_123'; - const prompt = 'Continue with the task'; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_resumed', - prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - const result = await invokeHandler('session:resume', sessionId, prompt); - - // Assert - expect(mockTaskManager.startTask).toHaveBeenCalledWith( - expect.stringMatching(/^task_/), - expect.objectContaining({ - prompt, - sessionId, - }), - expect.any(Object) - ); - expect(result).toEqual( - expect.objectContaining({ - prompt, - status: 'running', - }) - ); - }); - - it('session:resume should use existing task ID when provided', async () => { - // Arrange - const sessionId = 'session_123'; - const prompt = 'Continue'; - const existingTaskId = 'task_existing'; - mockTaskManager.startTask.mockResolvedValue({ - id: existingTaskId, - prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('session:resume', sessionId, prompt, existingTaskId); - - // Assert - expect(mockTaskManager.startTask).toHaveBeenCalledWith( - existingTaskId, - expect.objectContaining({ - prompt, - sessionId, - taskId: existingTaskId, - }), - expect.any(Object) - ); - }); - - it('session:resume should validate session ID', async () => { - // Arrange & Act & Assert - await expect(invokeHandler('session:resume', '', 'prompt')).rejects.toThrow(); - await expect(invokeHandler('session:resume', ' ', 'prompt')).rejects.toThrow(); - }); - - it('session:resume should validate prompt', async () => { - // Arrange & Act & Assert - await expect(invokeHandler('session:resume', 'session_123', '')).rejects.toThrow(); - await expect(invokeHandler('session:resume', 'session_123', ' ')).rejects.toThrow(); - }); - }); - - describe('Log Event Handler', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('log:event should return ok response', async () => { - // Arrange - const payload = { - level: 'info', - message: 'Test log message', - context: { key: 'value' }, - }; - - // Act - const result = await invokeHandler('log:event', payload); - - // Assert - expect(result).toEqual({ ok: true }); - }); - }); - - describe('Task Callbacks and Message Batching', () => { - beforeEach(() => { - registerIPCHandlers(); - vi.useFakeTimers(); - }); - - afterEach(() => { - vi.useRealTimers(); - }); - - it('task:start should initialize permission API on first call', async () => { - // Arrange - const config = { prompt: 'Test task prompt' }; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_123', - prompt: 'Test task prompt', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('task:start', config); - - // Assert - const { initPermissionApi, startPermissionApiServer } = await import('@main/permission-api'); - expect(initPermissionApi).toHaveBeenCalled(); - expect(startPermissionApiServer).toHaveBeenCalled(); - }); - - it('task:start should only initialize permission API once', async () => { - // Arrange - const config = { prompt: 'Test task' }; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_1', - prompt: 'Test task', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - start two tasks - await invokeHandler('task:start', config); - await invokeHandler('task:start', { prompt: 'Second task' }); - - // Assert - should only be called once - const { initPermissionApi } = await import('@main/permission-api'); - expect(initPermissionApi).toHaveBeenCalledTimes(1); - }); - - it('task:start should create initial user message', async () => { - // Arrange - const config = { prompt: 'My test prompt' }; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_msg', - prompt: 'My test prompt', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - const result = await invokeHandler('task:start', config) as { - id: string; - messages: Array<{ type: string; content: string }>; - }; - - // Assert - expect(result.messages).toHaveLength(1); - expect(result.messages[0].type).toBe('user'); - expect(result.messages[0].content).toBe('My test prompt'); - }); - - it('task:start should save task to history', async () => { - // Arrange - const config = { prompt: 'Save me' }; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_save', - prompt: 'Save me', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('task:start', config); - - // Assert - const { saveTask } = await import('@main/store/taskHistory'); - expect(saveTask).toHaveBeenCalled(); - }); - - it('task:start should validate all optional config fields', async () => { - // Arrange - const config = { - prompt: 'Full config test', - taskId: 'custom_task_id', - sessionId: 'custom_session', - workingDirectory: '/some/path', - allowedTools: ['tool1', 'tool2', 123, null], // Should filter non-strings - systemPromptAppend: 'Additional instructions', - outputSchema: { type: 'object' }, - }; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_full', - prompt: 'Full config test', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - const result = await invokeHandler('task:start', config); - - // Assert - expect(mockTaskManager.startTask).toHaveBeenCalledWith( - expect.any(String), - expect.objectContaining({ - prompt: 'Full config test', - taskId: 'custom_task_id', - sessionId: 'custom_session', - workingDirectory: '/some/path', - allowedTools: ['tool1', 'tool2'], // Non-strings filtered - systemPromptAppend: 'Additional instructions', - outputSchema: { type: 'object' }, - }), - expect.any(Object) - ); - }); - - it('task:start should truncate allowedTools array to 20 items', async () => { - // Arrange - const manyTools = Array.from({ length: 30 }, (_, i) => `tool${i}`); - const config = { - prompt: 'Many tools test', - allowedTools: manyTools, - }; - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_tools', - prompt: 'Many tools test', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('task:start', config); - - // Assert - expect(mockTaskManager.startTask).toHaveBeenCalledWith( - expect.any(String), - expect.objectContaining({ - allowedTools: expect.any(Array), - }), - expect.any(Object) - ); - const callArgs = mockTaskManager.startTask.mock.calls[0][1]; - expect(callArgs.allowedTools.length).toBe(20); - }); - - it('task:cancel should do nothing when taskId is undefined', async () => { - // Arrange & Act - await invokeHandler('task:cancel', undefined); - - // Assert - expect(mockTaskManager.cancelTask).not.toHaveBeenCalled(); - expect(mockTaskManager.cancelQueuedTask).not.toHaveBeenCalled(); - }); - - it('task:interrupt should do nothing when taskId is undefined', async () => { - // Arrange & Act - await invokeHandler('task:interrupt', undefined); - - // Assert - expect(mockTaskManager.interruptTask).not.toHaveBeenCalled(); - }); - - it('task:interrupt should do nothing for inactive task', async () => { - // Arrange - mockTaskManager.hasActiveTask.mockReturnValue(false); - - // Act - await invokeHandler('task:interrupt', 'task_inactive'); - - // Assert - expect(mockTaskManager.interruptTask).not.toHaveBeenCalled(); - }); - }); - - describe('Session Resume with Existing Task', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('session:resume should add user message to existing task', async () => { - // Arrange - const sessionId = 'session_existing'; - const prompt = 'Follow-up message'; - const existingTaskId = 'task_existing'; - - mockTaskManager.startTask.mockResolvedValue({ - id: existingTaskId, - prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('session:resume', sessionId, prompt, existingTaskId); - - // Assert - const { addTaskMessage } = await import('@main/store/taskHistory'); - expect(addTaskMessage).toHaveBeenCalledWith( - existingTaskId, - expect.objectContaining({ - type: 'user', - content: prompt, - }) - ); - }); - - it('session:resume should update task status in history', async () => { - // Arrange - const sessionId = 'session_status'; - const prompt = 'Status update test'; - const existingTaskId = 'task_status'; - - mockTaskManager.startTask.mockResolvedValue({ - id: existingTaskId, - prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('session:resume', sessionId, prompt, existingTaskId); - - // Assert - const { updateTaskStatus } = await import('@main/store/taskHistory'); - expect(updateTaskStatus).toHaveBeenCalledWith( - existingTaskId, - 'running', - expect.any(String) - ); - }); - - it('session:resume should not add message when no existing task ID', async () => { - // Arrange - const sessionId = 'session_new'; - const prompt = 'New session'; - - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_new', - prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - await invokeHandler('session:resume', sessionId, prompt); - - // Assert - const { addTaskMessage } = await import('@main/store/taskHistory'); - // Should not be called for new tasks - expect(addTaskMessage).not.toHaveBeenCalledWith( - undefined, - expect.anything() - ); - }); - }); - - describe('Permission Response Edge Cases', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('permission:respond should use selectedOptions when provided', async () => { - // Arrange - const taskId = 'task_options'; - mockTaskManager.hasActiveTask.mockReturnValue(true); - - // Act - await invokeHandler('permission:respond', { - requestId: 'req_456', - taskId, - decision: 'allow', - selectedOptions: ['option1', 'option2', 'option3'], - }); - - // Assert - expect(mockTaskManager.sendResponse).toHaveBeenCalledWith( - taskId, - 'option1, option2, option3' - ); - }); - - it('permission:respond should log when file permission not found', async () => { - // Arrange - const taskId = 'task_notfound'; - mockTaskManager.hasActiveTask.mockReturnValue(false); - // File permission request that is not in pending - const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); - - // Act - await invokeHandler('permission:respond', { - requestId: 'filereq_notfound', - taskId, - decision: 'allow', - }); - - // Assert - expect(consoleSpy).toHaveBeenCalledWith( - expect.stringContaining('File permission request') - ); - consoleSpy.mockRestore(); - }); - }); - - describe('Window Trust Validation', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('should throw error when window is destroyed', async () => { - // Arrange - const { BrowserWindow } = await import('electron'); - (BrowserWindow.fromWebContents as Mock).mockReturnValue({ - id: 1, - isDestroyed: () => true, - webContents: { send: vi.fn(), isDestroyed: () => true }, - }); - - // Act & Assert - await expect( - invokeHandler('task:start', { prompt: 'Test' }) - ).rejects.toThrow('Untrusted window'); - }); - - it('should throw error when window is null', async () => { - // Arrange - const { BrowserWindow } = await import('electron'); - (BrowserWindow.fromWebContents as Mock).mockReturnValue(null); - - // Act & Assert - await expect( - invokeHandler('task:start', { prompt: 'Test' }) - ).rejects.toThrow('Untrusted window'); - }); - - it('should throw error when IPC from non-focused window with multiple windows', async () => { - // Arrange - const { BrowserWindow } = await import('electron'); - (BrowserWindow.fromWebContents as Mock).mockReturnValue({ - id: 2, // Different from focused window - isDestroyed: () => false, - webContents: { send: vi.fn(), isDestroyed: () => false }, - }); - (BrowserWindow.getFocusedWindow as Mock).mockReturnValue({ - id: 1, // Different ID - isDestroyed: () => false, - }); - (BrowserWindow.getAllWindows as Mock).mockReturnValue([{ id: 1 }, { id: 2 }]); - - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_test', - prompt: 'Test', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act & Assert - await expect( - invokeHandler('task:start', { prompt: 'Test' }) - ).rejects.toThrow('IPC request must originate from the focused window'); - }); - - it('should allow IPC when only one window exists', async () => { - // Arrange - const { BrowserWindow } = await import('electron'); - (BrowserWindow.fromWebContents as Mock).mockReturnValue({ - id: 1, - isDestroyed: () => false, - webContents: { send: vi.fn(), isDestroyed: () => false }, - }); - (BrowserWindow.getFocusedWindow as Mock).mockReturnValue({ - id: 2, // Different but only one window - isDestroyed: () => false, - }); - (BrowserWindow.getAllWindows as Mock).mockReturnValue([{ id: 1 }]); // Only one window - - mockTaskManager.startTask.mockResolvedValue({ - id: 'task_single', - prompt: 'Test', - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }); - - // Act - const result = await invokeHandler('task:start', { prompt: 'Test' }); - - // Assert - expect(result).toBeDefined(); - }); - }); - - describe('E2E Skip Auth Mode', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('onboarding:complete should return true when E2E_SKIP_AUTH env is set', async () => { - // Arrange - const originalEnv = process.env.E2E_SKIP_AUTH; - process.env.E2E_SKIP_AUTH = '1'; - - // Act - const result = await invokeHandler('onboarding:complete'); - - // Assert - expect(result).toBe(true); - - // Cleanup - process.env.E2E_SKIP_AUTH = originalEnv; - }); - - it('opencode:check should return mock status when E2E_SKIP_AUTH is set', async () => { - // Arrange - const originalEnv = process.env.E2E_SKIP_AUTH; - process.env.E2E_SKIP_AUTH = '1'; - - // Act - const result = await invokeHandler('opencode:check') as { - installed: boolean; - version: string; - }; - - // Assert - expect(result.installed).toBe(true); - expect(result.version).toBe('1.0.0-test'); - - // Cleanup - process.env.E2E_SKIP_AUTH = originalEnv; - }); - }); - - describe('API Key Validation Timeout', () => { - beforeEach(() => { - registerIPCHandlers(); - vi.useFakeTimers(); - }); - - afterEach(() => { - vi.useRealTimers(); - vi.unstubAllGlobals(); - }); - - it('api-key:validate should handle abort error', async () => { - // Arrange - vi.stubGlobal('fetch', vi.fn().mockImplementation(() => { - const abortError = new Error('Request aborted'); - abortError.name = 'AbortError'; - return Promise.reject(abortError); - })); - - // Act - const result = await invokeHandler('api-key:validate', 'sk-test-key') as { - valid: boolean; - error: string; - }; - - // Assert - expect(result.valid).toBe(false); - expect(result.error).toContain('timed out'); - }); - - it('api-key:validate should handle network errors', async () => { - // Arrange - vi.stubGlobal('fetch', vi.fn().mockRejectedValue(new Error('Network error'))); - - // Act - const result = await invokeHandler('api-key:validate', 'sk-test-key') as { - valid: boolean; - error: string; - }; - - // Assert - expect(result.valid).toBe(false); - expect(result.error).toContain('Failed to validate'); - }); - - it('api-key:validate should return invalid for non-200 response', async () => { - // Arrange - vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ - ok: false, - status: 401, - json: () => Promise.resolve({ error: { message: 'Invalid API key' } }), - })); - - // Act - const result = await invokeHandler('api-key:validate', 'sk-test-key') as { - valid: boolean; - error: string; - }; - - // Assert - expect(result.valid).toBe(false); - expect(result.error).toContain('Invalid API key'); - }); - - it('api-key:validate should return valid for 200 response', async () => { - // Arrange - vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ - ok: true, - status: 200, - json: () => Promise.resolve({}), - })); - - // Act - const result = await invokeHandler('api-key:validate', 'sk-test-key') as { - valid: boolean; - }; - - // Assert - expect(result.valid).toBe(true); - }); - }); - - describe('Multi-Provider API Key Validation', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - afterEach(() => { - vi.unstubAllGlobals(); - }); - - it('api-key:validate-provider should reject unsupported provider', async () => { - // Act - const result = await invokeHandler('api-key:validate-provider', 'invalid-provider', 'key') as { - valid: boolean; - error: string; - }; - - // Assert - expect(result.valid).toBe(false); - expect(result.error).toBe('Unsupported provider'); - }); - - it('api-key:validate-provider should skip validation for custom provider', async () => { - // Act - const result = await invokeHandler('api-key:validate-provider', 'custom', 'any-key') as { - valid: boolean; - }; - - // Assert - expect(result.valid).toBe(true); - }); - - it('api-key:validate-provider should validate OpenAI key', async () => { - // Arrange - const mockFetch = vi.fn().mockResolvedValue({ - ok: true, - json: () => Promise.resolve({}), - }); - vi.stubGlobal('fetch', mockFetch); - - // Act - const result = await invokeHandler('api-key:validate-provider', 'openai', 'sk-openai-key') as { - valid: boolean; - }; - - // Assert - expect(result.valid).toBe(true); - expect(mockFetch).toHaveBeenCalledWith( - 'https://api.openai.com/v1/models', - expect.objectContaining({ - method: 'GET', - headers: expect.objectContaining({ - Authorization: 'Bearer sk-openai-key', - }), - }) - ); - }); - - it('api-key:validate-provider should validate Google key', async () => { - // Arrange - const mockFetch = vi.fn().mockResolvedValue({ - ok: true, - json: () => Promise.resolve({}), - }); - vi.stubGlobal('fetch', mockFetch); - - // Act - const result = await invokeHandler('api-key:validate-provider', 'google', 'AIza-test-key') as { - valid: boolean; - }; - - // Assert - expect(result.valid).toBe(true); - expect(mockFetch).toHaveBeenCalledWith( - 'https://generativelanguage.googleapis.com/v1beta/models?key=AIza-test-key', - expect.objectContaining({ - method: 'GET', - }) - ); - }); - - it('api-key:validate-provider should handle AbortError', async () => { - // Arrange - const abortError = new Error('Request aborted'); - abortError.name = 'AbortError'; - vi.stubGlobal('fetch', vi.fn().mockRejectedValue(abortError)); - - // Act - const result = await invokeHandler('api-key:validate-provider', 'openai', 'sk-key') as { - valid: boolean; - error: string; - }; - - // Assert - expect(result.valid).toBe(false); - expect(result.error).toContain('timed out'); - }); - - it('api-key:validate-provider should handle failed response with error message', async () => { - // Arrange - vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ - ok: false, - status: 403, - json: () => Promise.resolve({ error: { message: 'Access denied' } }), - })); - - // Act - const result = await invokeHandler('api-key:validate-provider', 'openai', 'sk-bad-key') as { - valid: boolean; - error: string; - }; - - // Assert - expect(result.valid).toBe(false); - expect(result.error).toBe('Access denied'); - }); - - it('api-key:validate-provider should handle failed response without error message', async () => { - // Arrange - vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ - ok: false, - status: 500, - json: () => Promise.reject(new Error('Invalid JSON')), - })); - - // Act - const result = await invokeHandler('api-key:validate-provider', 'openai', 'sk-key') as { - valid: boolean; - error: string; - }; - - // Assert - expect(result.valid).toBe(false); - expect(result.error).toContain('API returned status 500'); - }); - }); - - describe('Settings Add API Key with Label', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('settings:add-api-key should accept and return custom label', async () => { - // Arrange - const provider = 'anthropic'; - const key = 'sk-custom-labeled-key'; - const label = 'My Production Key'; - - // Act - const result = await invokeHandler('settings:add-api-key', provider, key, label) as { - label: string; - }; - - // Assert - expect(result.label).toBe('My Production Key'); - }); - - it('settings:add-api-key should use default label when not provided', async () => { - // Arrange - const provider = 'anthropic'; - const key = 'sk-no-label-key'; - - // Act - const result = await invokeHandler('settings:add-api-key', provider, key) as { - label: string; - }; - - // Assert - expect(result.label).toBe('Local API Key'); - }); - - it('settings:add-api-key should validate label length', async () => { - // Arrange - const provider = 'anthropic'; - const key = 'sk-valid-key'; - const longLabel = 'x'.repeat(200); - - // Act & Assert - await expect( - invokeHandler('settings:add-api-key', provider, key, longLabel) - ).rejects.toThrow('exceeds maximum length'); - }); - }); - - describe('Settings API Keys with Empty Password', () => { - beforeEach(() => { - registerIPCHandlers(); - }); - - it('settings:api-keys should handle empty password', async () => { - // Arrange - mockStoredCredentials = [ - { account: 'apiKey:anthropic', password: '' }, - ]; - - // Act - const result = await invokeHandler('settings:api-keys') as Array<{ keyPrefix: string }>; - - // Assert - expect(result).toHaveLength(1); - expect(result[0].keyPrefix).toBe(''); - }); - }); - - // Note: Callback execution tests for onStatusChange, onDebug, onError, onComplete - // are complex to set up due to vitest mock hoisting for webContents.send. - // The callback logic is exercised through the task lifecycle tests above. - // The utility functions (extractScreenshots, sanitizeToolOutput, toTaskMessage) - // are tested in handlers-utils.unit.test.ts as pure function tests. -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/adapter.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/adapter.unit.test.ts deleted file mode 100644 index f9e8d005b..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/adapter.unit.test.ts +++ /dev/null @@ -1,856 +0,0 @@ -/** - * Unit tests for OpenCode Adapter - * - * Tests the adapter module which manages PTY spawning, stream parsing, - * and event handling for OpenCode CLI interactions. - * - * NOTE: This is a UNIT test, not an integration test. - * External dependencies (node-pty, fs, child_process) are mocked to test - * adapter logic in isolation. Internal modules (secureStorage, appSettings, - * config-generator) are also mocked since this tests the adapter's behavior - * independent of those implementations. - * - * Mocked external services: - * - node-pty: External process spawning (PTY terminal) - * - electron: Native desktop APIs - * - child_process: Process execution - * - * @module __tests__/unit/main/opencode/adapter.unit.test - */ - -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; -import { EventEmitter } from 'events'; -import type { - OpenCodeStepStartMessage, - OpenCodeTextMessage, - OpenCodeToolCallMessage, - OpenCodeToolUseMessage, - OpenCodeStepFinishMessage, - OpenCodeErrorMessage, -} from '@accomplish/shared'; - -// Mock electron module -const mockApp = { - isPackaged: false, - getAppPath: vi.fn(() => '/mock/app/path'), - getPath: vi.fn((name: string) => `/mock/path/${name}`), -}; - -vi.mock('electron', () => ({ - app: mockApp, -})); - -// Mock fs module -const mockFs = { - existsSync: vi.fn(() => true), - readdirSync: vi.fn(() => []), - readFileSync: vi.fn(), - mkdirSync: vi.fn(), - writeFileSync: vi.fn(), -}; - -vi.mock('fs', () => ({ - default: mockFs, - existsSync: mockFs.existsSync, - readdirSync: mockFs.readdirSync, - readFileSync: mockFs.readFileSync, - mkdirSync: mockFs.mkdirSync, - writeFileSync: mockFs.writeFileSync, -})); - -// Create a mock PTY process -class MockPty extends EventEmitter { - pid = 12345; - killed = false; - - write = vi.fn(); - kill = vi.fn(() => { - this.killed = true; - }); - - // Helper to simulate data events - simulateData(data: string) { - const callbacks = this.listeners('data'); - callbacks.forEach((cb) => (cb as (data: string) => void)(data)); - } - - // Helper to simulate exit - simulateExit(exitCode: number, signal?: number) { - const callbacks = this.listeners('exit'); - callbacks.forEach((cb) => (cb as (params: { exitCode: number; signal?: number }) => void)({ exitCode, signal })); - } - - // Override on to use onData/onExit interface - onData(callback: (data: string) => void) { - this.on('data', callback); - return { dispose: () => this.off('data', callback) }; - } - - onExit(callback: (params: { exitCode: number; signal?: number }) => void) { - this.on('exit', callback); - return { dispose: () => this.off('exit', callback) }; - } -} - -// Mock node-pty -const mockPtyInstance = new MockPty(); -const mockPtySpawn = vi.fn(() => mockPtyInstance); - -vi.mock('node-pty', () => ({ - spawn: mockPtySpawn, -})); - -// Mock child_process for execSync -vi.mock('child_process', () => ({ - execSync: vi.fn(() => '/usr/local/bin/opencode'), -})); - -// Mock secure storage -vi.mock('@main/store/secureStorage', () => ({ - getAllApiKeys: vi.fn(() => Promise.resolve({ - anthropic: 'test-anthropic-key', - openai: 'test-openai-key', - })), - getBedrockCredentials: vi.fn(() => null), -})); - -// Mock app settings -vi.mock('@main/store/appSettings', () => ({ - getSelectedModel: vi.fn(() => ({ model: 'claude-3-opus-20240229' })), -})); - -// Mock config generator -vi.mock('@main/opencode/config-generator', () => ({ - generateOpenCodeConfig: vi.fn(() => Promise.resolve('/mock/config/path')), - syncApiKeysToOpenCodeAuth: vi.fn(() => Promise.resolve()), - ACCOMPLISH_AGENT_NAME: 'accomplish', -})); - -// Mock system-path -vi.mock('@main/utils/system-path', () => ({ - getExtendedNodePath: vi.fn((basePath: string) => basePath || '/usr/bin'), -})); - -// Mock bundled-node -vi.mock('@main/utils/bundled-node', () => ({ - getBundledNodePaths: vi.fn(() => null), - logBundledNodeInfo: vi.fn(), -})); - -// Mock permission-api -vi.mock('@main/permission-api', () => ({ - PERMISSION_API_PORT: 9999, -})); - -describe('OpenCode Adapter Module', () => { - let OpenCodeAdapter: typeof import('@main/opencode/adapter').OpenCodeAdapter; - let createAdapter: typeof import('@main/opencode/adapter').createAdapter; - let isOpenCodeCliInstalled: typeof import('@main/opencode/adapter').isOpenCodeCliInstalled; - let getOpenCodeCliVersion: typeof import('@main/opencode/adapter').getOpenCodeCliVersion; - let OpenCodeCliNotFoundError: typeof import('@main/opencode/adapter').OpenCodeCliNotFoundError; - - beforeEach(async () => { - vi.clearAllMocks(); - - // Create a fresh mock PTY for each test - Object.assign(mockPtyInstance, new MockPty()); - mockPtyInstance.killed = false; - mockPtyInstance.removeAllListeners(); - - // Re-import module to get fresh state - const module = await import('@main/opencode/adapter'); - OpenCodeAdapter = module.OpenCodeAdapter; - createAdapter = module.createAdapter; - isOpenCodeCliInstalled = module.isOpenCodeCliInstalled; - getOpenCodeCliVersion = module.getOpenCodeCliVersion; - OpenCodeCliNotFoundError = module.OpenCodeCliNotFoundError; - }); - - afterEach(() => { - vi.restoreAllMocks(); - vi.resetModules(); - }); - - describe('OpenCodeAdapter Class', () => { - describe('Constructor', () => { - it('should create adapter instance with optional task ID', () => { - // Act - const adapter = new OpenCodeAdapter('test-task-123'); - - // Assert - expect(adapter.getTaskId()).toBe('test-task-123'); - expect(adapter.isAdapterDisposed()).toBe(false); - }); - - it('should create adapter instance without task ID', () => { - // Act - const adapter = new OpenCodeAdapter(); - - // Assert - expect(adapter.getTaskId()).toBeNull(); - }); - }); - - describe('startTask()', () => { - it('should spawn PTY process with correct arguments', async () => { - // Arrange - const adapter = new OpenCodeAdapter('test-task'); - const config = { - prompt: 'Test prompt', - taskId: 'test-task-123', - }; - - // Act - const task = await adapter.startTask(config); - - // Assert - expect(mockPtySpawn).toHaveBeenCalled(); - expect(task.id).toBe('test-task-123'); - expect(task.prompt).toBe('Test prompt'); - expect(task.status).toBe('running'); - }); - - it('should generate task ID if not provided', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const config = { prompt: 'Test prompt' }; - - // Act - const task = await adapter.startTask(config); - - // Assert - expect(task.id).toMatch(/^task_\d+_[a-z0-9]+$/); - }); - - it('should emit debug events during startup', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const debugEvents: Array<{ type: string; message: string }> = []; - adapter.on('debug', (log) => debugEvents.push(log)); - - // Act - await adapter.startTask({ prompt: 'Test' }); - - // Assert - expect(debugEvents.length).toBeGreaterThan(0); - expect(debugEvents.some((e) => e.type === 'info')).toBe(true); - }); - - it('should throw error if adapter is disposed', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - adapter.dispose(); - - // Act & Assert - await expect(adapter.startTask({ prompt: 'Test' })).rejects.toThrow( - 'Adapter has been disposed' - ); - }); - }); - - describe('Event Emission', () => { - it('should emit message event when receiving text message', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const messages: unknown[] = []; - adapter.on('message', (msg) => messages.push(msg)); - - await adapter.startTask({ prompt: 'Test' }); - - const textMessage: OpenCodeTextMessage = { - type: 'text', - part: { - id: 'msg-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'text', - text: 'Hello, I am assisting you.', - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(textMessage) + '\n'); - - // Assert - expect(messages.length).toBe(1); - expect(messages[0]).toMatchObject({ type: 'text' }); - }); - - it('should emit progress event on step_start message', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const progressEvents: Array<{ stage: string; message?: string }> = []; - adapter.on('progress', (p) => progressEvents.push(p)); - - await adapter.startTask({ prompt: 'Test' }); - - const stepStartMessage: OpenCodeStepStartMessage = { - type: 'step_start', - part: { - id: 'step-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'step-start', - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(stepStartMessage) + '\n'); - - // Assert - expect(progressEvents.length).toBe(1); - expect(progressEvents[0].stage).toBe('init'); - }); - - it('should emit tool-use event on tool_call message', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const toolEvents: Array<[string, unknown]> = []; - adapter.on('tool-use', (name, input) => toolEvents.push([name, input])); - - await adapter.startTask({ prompt: 'Test' }); - - const toolCallMessage: OpenCodeToolCallMessage = { - type: 'tool_call', - part: { - id: 'tool-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'tool-call', - tool: 'Bash', - input: { command: 'ls -la' }, - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(toolCallMessage) + '\n'); - - // Assert - expect(toolEvents.length).toBe(1); - expect(toolEvents[0][0]).toBe('Bash'); - expect(toolEvents[0][1]).toEqual({ command: 'ls -la' }); - }); - - it('should emit tool-use and tool-result events on tool_use message', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const toolUseEvents: Array<[string, unknown]> = []; - const toolResultEvents: string[] = []; - adapter.on('tool-use', (name, input) => toolUseEvents.push([name, input])); - adapter.on('tool-result', (output) => toolResultEvents.push(output)); - - await adapter.startTask({ prompt: 'Test' }); - - const toolUseMessage: OpenCodeToolUseMessage = { - type: 'tool_use', - part: { - id: 'tool-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'tool', - tool: 'Read', - state: { - status: 'completed', - input: { path: '/test/file.txt' }, - output: 'File contents here', - }, - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(toolUseMessage) + '\n'); - - // Assert - expect(toolUseEvents.length).toBe(1); - expect(toolUseEvents[0][0]).toBe('Read'); - expect(toolResultEvents.length).toBe(1); - expect(toolResultEvents[0]).toBe('File contents here'); - }); - - it('should emit complete event on step_finish with stop reason', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const completeEvents: Array<{ status: string; sessionId?: string }> = []; - adapter.on('complete', (result) => completeEvents.push(result)); - - await adapter.startTask({ prompt: 'Test' }); - - const stepFinishMessage: OpenCodeStepFinishMessage = { - type: 'step_finish', - part: { - id: 'step-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'step-finish', - reason: 'stop', - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(stepFinishMessage) + '\n'); - - // Assert - expect(completeEvents.length).toBe(1); - expect(completeEvents[0].status).toBe('success'); - }); - - it('should not emit complete event on step_finish with tool_use reason', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const completeEvents: Array<{ status: string }> = []; - adapter.on('complete', (result) => completeEvents.push(result)); - - await adapter.startTask({ prompt: 'Test' }); - - const stepFinishMessage: OpenCodeStepFinishMessage = { - type: 'step_finish', - part: { - id: 'step-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'step-finish', - reason: 'tool_use', - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(stepFinishMessage) + '\n'); - - // Assert - expect(completeEvents.length).toBe(0); - }); - - it('should emit complete with error status on error message', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const completeEvents: Array<{ status: string; error?: string }> = []; - adapter.on('complete', (result) => completeEvents.push(result)); - - await adapter.startTask({ prompt: 'Test' }); - - const errorMessage: OpenCodeErrorMessage = { - type: 'error', - error: 'Something went wrong', - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(errorMessage) + '\n'); - - // Assert - expect(completeEvents.length).toBe(1); - expect(completeEvents[0].status).toBe('error'); - expect(completeEvents[0].error).toBe('Something went wrong'); - }); - - it('should emit permission-request event for AskUserQuestion tool', async () => { - // Arrange - const adapter = new OpenCodeAdapter('test-task'); - const permissionRequests: unknown[] = []; - adapter.on('permission-request', (req) => permissionRequests.push(req)); - - await adapter.startTask({ prompt: 'Test' }); - - const toolCallMessage: OpenCodeToolCallMessage = { - type: 'tool_call', - part: { - id: 'tool-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'tool-call', - tool: 'AskUserQuestion', - input: { - questions: [ - { - question: 'Do you want to proceed?', - options: [ - { label: 'Yes', description: 'Proceed with action' }, - { label: 'No', description: 'Cancel' }, - ], - }, - ], - }, - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(toolCallMessage) + '\n'); - - // Assert - expect(permissionRequests.length).toBe(1); - const req = permissionRequests[0] as { question: string; options: Array<{ label: string }> }; - expect(req.question).toBe('Do you want to proceed?'); - expect(req.options).toHaveLength(2); - }); - }); - - describe('Stream Parser Integration', () => { - it('should handle multiple JSON messages in single data chunk', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const messages: unknown[] = []; - adapter.on('message', (msg) => messages.push(msg)); - - await adapter.startTask({ prompt: 'Test' }); - - const message1: OpenCodeTextMessage = { - type: 'text', - part: { id: '1', sessionID: 's', messageID: 'm', type: 'text', text: 'First' }, - }; - const message2: OpenCodeTextMessage = { - type: 'text', - part: { id: '2', sessionID: 's', messageID: 'm', type: 'text', text: 'Second' }, - }; - - // Act - mockPtyInstance.simulateData( - JSON.stringify(message1) + '\n' + JSON.stringify(message2) + '\n' - ); - - // Assert - expect(messages.length).toBe(2); - }); - - it('should handle split JSON messages across data chunks', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const messages: unknown[] = []; - adapter.on('message', (msg) => messages.push(msg)); - - await adapter.startTask({ prompt: 'Test' }); - - const fullMessage: OpenCodeTextMessage = { - type: 'text', - part: { id: '1', sessionID: 's', messageID: 'm', type: 'text', text: 'Complete message' }, - }; - const jsonStr = JSON.stringify(fullMessage); - const splitPoint = Math.floor(jsonStr.length / 2); - - // Act - send message in two parts - mockPtyInstance.simulateData(jsonStr.substring(0, splitPoint)); - mockPtyInstance.simulateData(jsonStr.substring(splitPoint) + '\n'); - - // Assert - expect(messages.length).toBe(1); - }); - - it('should skip non-JSON lines without crashing', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const messages: unknown[] = []; - const debugEvents: unknown[] = []; - adapter.on('message', (msg) => messages.push(msg)); - adapter.on('debug', (d) => debugEvents.push(d)); - - await adapter.startTask({ prompt: 'Test' }); - - const validMessage: OpenCodeTextMessage = { - type: 'text', - part: { id: '1', sessionID: 's', messageID: 'm', type: 'text', text: 'Valid' }, - }; - - // Act - send non-JSON followed by valid JSON - mockPtyInstance.simulateData('Shell banner: Welcome to zsh\n'); - mockPtyInstance.simulateData(JSON.stringify(validMessage) + '\n'); - - // Assert - expect(messages.length).toBe(1); - }); - - it('should strip ANSI escape codes from data', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const messages: unknown[] = []; - adapter.on('message', (msg) => messages.push(msg)); - - await adapter.startTask({ prompt: 'Test' }); - - const validMessage: OpenCodeTextMessage = { - type: 'text', - part: { id: '1', sessionID: 's', messageID: 'm', type: 'text', text: 'Valid' }, - }; - - // Act - send JSON with ANSI codes - const ansiWrapped = '\x1B[32m' + JSON.stringify(validMessage) + '\x1B[0m\n'; - mockPtyInstance.simulateData(ansiWrapped); - - // Assert - expect(messages.length).toBe(1); - }); - }); - - describe('Process Exit Handling', () => { - it('should emit complete on normal exit (code 0)', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const completeEvents: Array<{ status: string }> = []; - adapter.on('complete', (result) => completeEvents.push(result)); - - await adapter.startTask({ prompt: 'Test' }); - - // Act - mockPtyInstance.simulateExit(0); - - // Assert - expect(completeEvents.length).toBe(1); - expect(completeEvents[0].status).toBe('success'); - }); - - it('should emit error on non-zero exit code', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const errorEvents: Error[] = []; - adapter.on('error', (err) => errorEvents.push(err)); - - await adapter.startTask({ prompt: 'Test' }); - - // Act - mockPtyInstance.simulateExit(1); - - // Assert - expect(errorEvents.length).toBe(1); - expect(errorEvents[0].message).toContain('exited with code 1'); - }); - - it('should emit interrupted status when interrupted', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const completeEvents: Array<{ status: string }> = []; - adapter.on('complete', (result) => completeEvents.push(result)); - - await adapter.startTask({ prompt: 'Test' }); - - // Act - await adapter.interruptTask(); - mockPtyInstance.simulateExit(0); - - // Assert - expect(completeEvents.length).toBe(1); - expect(completeEvents[0].status).toBe('interrupted'); - }); - - it('should not emit duplicate complete events', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - const completeEvents: Array<{ status: string }> = []; - adapter.on('complete', (result) => completeEvents.push(result)); - - await adapter.startTask({ prompt: 'Test' }); - - // Emit step_finish first (marks hasCompleted = true) - const stepFinish: OpenCodeStepFinishMessage = { - type: 'step_finish', - part: { - id: 'step-1', - sessionID: 'session-123', - messageID: 'message-123', - type: 'step-finish', - reason: 'stop', - }, - }; - mockPtyInstance.simulateData(JSON.stringify(stepFinish) + '\n'); - - // Act - then exit - mockPtyInstance.simulateExit(0); - - // Assert - should only have one complete event - expect(completeEvents.length).toBe(1); - }); - }); - - describe('sendResponse()', () => { - it('should write response to PTY', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - await adapter.startTask({ prompt: 'Test' }); - - // Act - await adapter.sendResponse('user input'); - - // Assert - expect(mockPtyInstance.write).toHaveBeenCalledWith('user input\n'); - }); - - it('should throw error if no active process', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - // Don't start a task - - // Act & Assert - await expect(adapter.sendResponse('input')).rejects.toThrow('No active process'); - }); - }); - - describe('cancelTask()', () => { - it('should kill PTY process', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - await adapter.startTask({ prompt: 'Test' }); - - // Act - await adapter.cancelTask(); - - // Assert - expect(mockPtyInstance.kill).toHaveBeenCalled(); - }); - }); - - describe('interruptTask()', () => { - it('should send Ctrl+C to PTY', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - await adapter.startTask({ prompt: 'Test' }); - - // Act - await adapter.interruptTask(); - - // Assert - expect(mockPtyInstance.write).toHaveBeenCalledWith('\x03'); - }); - - it('should handle interrupt when no active process', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - // Don't start a task - - // Act - should not throw - await adapter.interruptTask(); - - // Assert - expect(mockPtyInstance.write).not.toHaveBeenCalled(); - }); - }); - - describe('dispose()', () => { - it('should cleanup PTY process and state', async () => { - // Arrange - const adapter = new OpenCodeAdapter('test-task'); - await adapter.startTask({ prompt: 'Test' }); - - // Act - adapter.dispose(); - - // Assert - expect(adapter.isAdapterDisposed()).toBe(true); - expect(adapter.getTaskId()).toBeNull(); - expect(adapter.getSessionId()).toBeNull(); - expect(mockPtyInstance.kill).toHaveBeenCalled(); - }); - - it('should be idempotent (safe to call multiple times)', () => { - // Arrange - const adapter = new OpenCodeAdapter(); - - // Act - call dispose multiple times - adapter.dispose(); - adapter.dispose(); - adapter.dispose(); - - // Assert - should not throw - expect(adapter.isAdapterDisposed()).toBe(true); - }); - - it('should remove all event listeners', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - let messageCount = 0; - adapter.on('message', () => messageCount++); - await adapter.startTask({ prompt: 'Test' }); - - // Act - adapter.dispose(); - adapter.emit('message', {} as OpenCodeTextMessage); - - // Assert - listener should have been removed - expect(messageCount).toBe(0); - }); - }); - - describe('Session Management', () => { - it('should track session ID from step_start message', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - await adapter.startTask({ prompt: 'Test' }); - - const stepStart: OpenCodeStepStartMessage = { - type: 'step_start', - part: { - id: 'step-1', - sessionID: 'session-abc-123', - messageID: 'message-123', - type: 'step-start', - }, - }; - - // Act - mockPtyInstance.simulateData(JSON.stringify(stepStart) + '\n'); - - // Assert - expect(adapter.getSessionId()).toBe('session-abc-123'); - }); - - it('should support resuming sessions', async () => { - // Arrange - const adapter = new OpenCodeAdapter(); - - // Act - const task = await adapter.resumeSession('existing-session', 'Continue task'); - - // Assert - expect(task.prompt).toBe('Continue task'); - expect(mockPtySpawn).toHaveBeenCalled(); - }); - }); - }); - - describe('Factory Functions', () => { - describe('createAdapter()', () => { - it('should create a new adapter instance', () => { - // Act - const adapter = createAdapter('task-123'); - - // Assert - expect(adapter).toBeInstanceOf(OpenCodeAdapter); - expect(adapter.getTaskId()).toBe('task-123'); - }); - }); - - describe('isOpenCodeCliInstalled()', () => { - it('should return boolean indicating CLI availability', async () => { - // Act - const result = await isOpenCodeCliInstalled(); - - // Assert - expect(typeof result).toBe('boolean'); - }); - }); - - describe('getOpenCodeCliVersion()', () => { - it('should return version string or null', async () => { - // Act - const result = await getOpenCodeCliVersion(); - - // Assert - expect(result === null || typeof result === 'string').toBe(true); - }); - }); - }); - - describe('OpenCodeCliNotFoundError', () => { - it('should have correct error name', () => { - // Act - const error = new OpenCodeCliNotFoundError(); - - // Assert - expect(error.name).toBe('OpenCodeCliNotFoundError'); - }); - - it('should have descriptive message', () => { - // Act - const error = new OpenCodeCliNotFoundError(); - - // Assert - expect(error.message).toContain('OpenCode CLI is not available'); - expect(error.message).toContain('reinstall'); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/task-manager.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/task-manager.unit.test.ts deleted file mode 100644 index 3b9a769e8..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/unit/main/opencode/task-manager.unit.test.ts +++ /dev/null @@ -1,727 +0,0 @@ -/** - * Unit tests for Task Manager - * - * Tests the task-manager module which handles task lifecycle, parallel execution, - * queueing, and cleanup of OpenCode adapter instances. - * - * NOTE: This is a UNIT test, not an integration test. - * The OpenCode adapter is replaced with a mock (MockOpenCodeAdapter) to test - * task manager logic in isolation. This allows testing task lifecycle, queueing, - * and event handling without spawning real PTY processes. - * - * Mocked components: - * - OpenCode adapter: Simulated adapter behavior - * - electron: Native desktop APIs - * - fs/os: File system operations - * - * @module __tests__/unit/main/opencode/task-manager.unit.test - */ - -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; -import { EventEmitter } from 'events'; -import type { TaskConfig, TaskResult, OpenCodeMessage, PermissionRequest } from '@accomplish/shared'; - -// Mock electron module -const mockApp = { - isPackaged: false, - getAppPath: vi.fn(() => '/mock/app/path'), - getPath: vi.fn((name: string) => `/mock/path/${name}`), -}; - -vi.mock('electron', () => ({ - app: mockApp, -})); - -// Mock fs module -const mockFs = { - existsSync: vi.fn(() => false), - readdirSync: vi.fn(() => []), - readFileSync: vi.fn(), - mkdirSync: vi.fn(), - writeFileSync: vi.fn(), -}; - -vi.mock('fs', () => ({ - default: mockFs, - existsSync: mockFs.existsSync, - readdirSync: mockFs.readdirSync, - readFileSync: mockFs.readFileSync, - mkdirSync: mockFs.mkdirSync, - writeFileSync: mockFs.writeFileSync, -})); - -// Mock os module -vi.mock('os', () => ({ - default: { homedir: () => '/Users/testuser' }, - homedir: () => '/Users/testuser', -})); - -// Create a mock adapter class -class MockOpenCodeAdapter extends EventEmitter { - private taskId: string | null = null; - private sessionId: string | null = null; - private disposed = false; - private startTaskFn: (config: TaskConfig) => Promise<{ id: string; prompt: string; status: string; messages: never[]; createdAt: string }>; - - constructor(taskId?: string) { - super(); - this.taskId = taskId || null; - this.startTaskFn = vi.fn(async (config: TaskConfig) => { - this.taskId = config.taskId || `task_${Date.now()}`; - this.sessionId = `session_${Date.now()}`; - return { - id: this.taskId, - prompt: config.prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }; - }); - } - - getTaskId() { - return this.taskId; - } - - getSessionId() { - return this.sessionId; - } - - isAdapterDisposed() { - return this.disposed; - } - - async startTask(config: TaskConfig) { - return this.startTaskFn(config); - } - - async cancelTask() { - this.emit('complete', { status: 'cancelled' }); - } - - async interruptTask() { - this.emit('complete', { status: 'interrupted' }); - } - - async sendResponse(response: string) { - // Mock response handling - return response; - } - - dispose() { - this.disposed = true; - this.removeAllListeners(); - } - - // Test helpers - simulateComplete(result: TaskResult) { - this.emit('complete', result); - } - - simulateError(error: Error) { - this.emit('error', error); - } - - simulateMessage(message: OpenCodeMessage) { - this.emit('message', message); - } - - simulateProgress(progress: { stage: string; message?: string }) { - this.emit('progress', progress); - } - - simulatePermissionRequest(request: PermissionRequest) { - this.emit('permission-request', request); - } -} - -// Track created adapters for testing -const createdAdapters: MockOpenCodeAdapter[] = []; - -// Mock the adapter module -vi.mock('@main/opencode/adapter', () => ({ - OpenCodeAdapter: MockOpenCodeAdapter, - isOpenCodeCliInstalled: vi.fn(() => Promise.resolve(true)), - OpenCodeCliNotFoundError: class OpenCodeCliNotFoundError extends Error { - constructor() { - super('OpenCode CLI is not available'); - this.name = 'OpenCodeCliNotFoundError'; - } - }, -})); - -// Mock config generator -vi.mock('@main/opencode/config-generator', () => ({ - getSkillsPath: vi.fn(() => '/mock/skills/path'), - generateOpenCodeConfig: vi.fn(() => Promise.resolve('/mock/config')), - ACCOMPLISH_AGENT_NAME: 'accomplish', -})); - -// Mock bundled-node -vi.mock('@main/utils/bundled-node', () => ({ - getNpxPath: vi.fn(() => '/mock/npx'), - getBundledNodePaths: vi.fn(() => null), -})); - -// Mock child_process -vi.mock('child_process', () => ({ - spawn: vi.fn(() => ({ - stdout: { on: vi.fn() }, - stderr: { on: vi.fn() }, - on: vi.fn((event: string, callback: (code: number) => void) => { - if (event === 'close') { - setTimeout(() => callback(0), 10); - } - }), - unref: vi.fn(), - })), -})); - -describe('Task Manager Module', () => { - let TaskManager: typeof import('@main/opencode/task-manager').TaskManager; - let getTaskManager: typeof import('@main/opencode/task-manager').getTaskManager; - let disposeTaskManager: typeof import('@main/opencode/task-manager').disposeTaskManager; - - // Helper to create mock callbacks - function createMockCallbacks() { - return { - onMessage: vi.fn(), - onProgress: vi.fn(), - onPermissionRequest: vi.fn(), - onComplete: vi.fn(), - onError: vi.fn(), - onStatusChange: vi.fn(), - onDebug: vi.fn(), - }; - } - - beforeEach(async () => { - vi.clearAllMocks(); - vi.resetModules(); - createdAdapters.length = 0; - - // Re-import module to get fresh state - const module = await import('@main/opencode/task-manager'); - TaskManager = module.TaskManager; - getTaskManager = module.getTaskManager; - disposeTaskManager = module.disposeTaskManager; - }); - - afterEach(() => { - vi.restoreAllMocks(); - }); - - describe('TaskManager Class', () => { - describe('Constructor', () => { - it('should create task manager with default max concurrent tasks', () => { - // Act - const manager = new TaskManager(); - - // Assert - expect(manager.getActiveTaskCount()).toBe(0); - expect(manager.getQueueLength()).toBe(0); - }); - - it('should create task manager with custom max concurrent tasks', () => { - // Arrange & Act - const manager = new TaskManager({ maxConcurrentTasks: 5 }); - - // Assert - verify by filling up to the limit - expect(manager.getActiveTaskCount()).toBe(0); - }); - }); - - describe('startTask()', () => { - it('should start a single task successfully', async () => { - // Arrange - const manager = new TaskManager(); - const callbacks = createMockCallbacks(); - const config: TaskConfig = { prompt: 'Test task' }; - - // Act - const task = await manager.startTask('task-1', config, callbacks); - - // Assert - expect(task.id).toBe('task-1'); - expect(task.status).toBe('running'); - expect(manager.hasActiveTask('task-1')).toBe(true); - expect(manager.getActiveTaskCount()).toBe(1); - }); - - it('should throw error if task ID already exists', async () => { - // Arrange - const manager = new TaskManager(); - const callbacks = createMockCallbacks(); - const config: TaskConfig = { prompt: 'Test task' }; - - await manager.startTask('task-1', config, callbacks); - - // Act & Assert - await expect( - manager.startTask('task-1', config, createMockCallbacks()) - ).rejects.toThrow('already running or queued'); - }); - - it('should execute multiple tasks in parallel up to limit', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 3 }); - - // Act - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - await manager.startTask('task-3', { prompt: 'Task 3' }, createMockCallbacks()); - - // Assert - expect(manager.getActiveTaskCount()).toBe(3); - expect(manager.getQueueLength()).toBe(0); - expect(manager.hasActiveTask('task-1')).toBe(true); - expect(manager.hasActiveTask('task-2')).toBe(true); - expect(manager.hasActiveTask('task-3')).toBe(true); - }); - - it('should queue tasks when at capacity', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 2 }); - - // Act - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - const task3 = await manager.startTask('task-3', { prompt: 'Task 3' }, createMockCallbacks()); - - // Assert - expect(manager.getActiveTaskCount()).toBe(2); - expect(manager.getQueueLength()).toBe(1); - expect(task3.status).toBe('queued'); - expect(manager.isTaskQueued('task-3')).toBe(true); - }); - - it('should throw error when queue is full', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - - // Act & Assert - await expect( - manager.startTask('task-3', { prompt: 'Task 3' }, createMockCallbacks()) - ).rejects.toThrow('Maximum queued tasks'); - }); - - it('should return queue position for queued tasks', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - - // Act - const position = manager.getQueuePosition('task-2'); - - // Assert - expect(position).toBe(1); - }); - - it('should return 0 for non-queued task position', async () => { - // Arrange - const manager = new TaskManager(); - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - - // Act - const position = manager.getQueuePosition('task-1'); - - // Assert - expect(position).toBe(0); - }); - }); - - describe('Task Event Handling', () => { - it('should forward message events to callbacks', async () => { - // Arrange - const manager = new TaskManager(); - const callbacks = createMockCallbacks(); - await manager.startTask('task-1', { prompt: 'Test' }, callbacks); - - // Note: In real implementation, adapter events would be forwarded - // This tests the callback wiring - expect(callbacks.onMessage).not.toHaveBeenCalled(); // No messages yet - }); - - it('should forward progress events to callbacks', async () => { - // Arrange - const manager = new TaskManager(); - const callbacks = createMockCallbacks(); - await manager.startTask('task-1', { prompt: 'Test' }, callbacks); - - // Progress is emitted during browser setup - // Wait a bit for async operations - await new Promise((resolve) => setTimeout(resolve, 50)); - - // Assert - progress should be called during startup - // Note: Exact number depends on browser detection - expect(callbacks.onProgress).toHaveBeenCalled(); - }); - - it('should cleanup task on completion and process queue', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - const callbacks1 = createMockCallbacks(); - const callbacks2 = createMockCallbacks(); - - await manager.startTask('task-1', { prompt: 'Task 1' }, callbacks1); - await manager.startTask('task-2', { prompt: 'Task 2' }, callbacks2); - - expect(manager.getActiveTaskCount()).toBe(1); - expect(manager.getQueueLength()).toBe(1); - - // Act - simulate task-1 completion - // In real implementation, this would be triggered by adapter event - // For this test, we verify the manager state after operations - expect(manager.hasActiveTask('task-1')).toBe(true); - }); - - it('should cleanup task on error and process queue', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - const callbacks1 = createMockCallbacks(); - const callbacks2 = createMockCallbacks(); - - await manager.startTask('task-1', { prompt: 'Task 1' }, callbacks1); - await manager.startTask('task-2', { prompt: 'Task 2' }, callbacks2); - - // Assert initial state - expect(manager.hasActiveTask('task-1')).toBe(true); - expect(manager.isTaskQueued('task-2')).toBe(true); - }); - }); - - describe('cancelTask()', () => { - it('should cancel a running task', async () => { - // Arrange - const manager = new TaskManager(); - const callbacks = createMockCallbacks(); - await manager.startTask('task-1', { prompt: 'Test' }, callbacks); - - // Act - await manager.cancelTask('task-1'); - - // Assert - expect(manager.hasActiveTask('task-1')).toBe(false); - }); - - it('should cancel a queued task', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - - expect(manager.isTaskQueued('task-2')).toBe(true); - - // Act - await manager.cancelTask('task-2'); - - // Assert - expect(manager.isTaskQueued('task-2')).toBe(false); - expect(manager.getQueueLength()).toBe(0); - }); - - it('should handle cancellation of non-existent task gracefully', async () => { - // Arrange - const manager = new TaskManager(); - - // Act & Assert - should not throw - await manager.cancelTask('non-existent'); - }); - - it('should process queue after cancellation', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - const callbacks2 = createMockCallbacks(); - - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, callbacks2); - - // Act - await manager.cancelTask('task-1'); - - // Wait for queue processing - await new Promise((resolve) => setTimeout(resolve, 100)); - - // Assert - task-2 should now be active - expect(manager.getQueueLength()).toBe(0); - }); - }); - - describe('interruptTask()', () => { - it('should interrupt a running task', async () => { - // Arrange - const manager = new TaskManager(); - await manager.startTask('task-1', { prompt: 'Test' }, createMockCallbacks()); - - // Act & Assert - should not throw - await manager.interruptTask('task-1'); - }); - - it('should handle interruption of non-existent task gracefully', async () => { - // Arrange - const manager = new TaskManager(); - - // Act & Assert - should not throw - await manager.interruptTask('non-existent'); - }); - }); - - describe('cancelQueuedTask()', () => { - it('should remove task from queue and return true', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - - // Act - const result = manager.cancelQueuedTask('task-2'); - - // Assert - expect(result).toBe(true); - expect(manager.getQueueLength()).toBe(0); - }); - - it('should return false for non-queued task', async () => { - // Arrange - const manager = new TaskManager(); - await manager.startTask('task-1', { prompt: 'Test' }, createMockCallbacks()); - - // Act - const result = manager.cancelQueuedTask('task-1'); - - // Assert - expect(result).toBe(false); - }); - }); - - describe('sendResponse()', () => { - it('should send response to active task', async () => { - // Arrange - const manager = new TaskManager(); - await manager.startTask('task-1', { prompt: 'Test' }, createMockCallbacks()); - - // Act & Assert - should not throw - await manager.sendResponse('task-1', 'user response'); - }); - - it('should throw error for non-existent task', async () => { - // Arrange - const manager = new TaskManager(); - - // Act & Assert - await expect(manager.sendResponse('non-existent', 'response')).rejects.toThrow( - 'not found or not active' - ); - }); - }); - - describe('getSessionId()', () => { - it('should return session ID for active task after adapter starts', async () => { - // Arrange - const manager = new TaskManager(); - await manager.startTask('task-1', { prompt: 'Test' }, createMockCallbacks()); - - // Wait for async adapter initialization - await new Promise((resolve) => setTimeout(resolve, 100)); - - // Act - const sessionId = manager.getSessionId('task-1'); - - // Assert - session ID may or may not be set depending on adapter state - // The important thing is that the method doesn't throw and returns expected type - expect(sessionId === null || typeof sessionId === 'string').toBe(true); - }); - - it('should return null for non-existent task', () => { - // Arrange - const manager = new TaskManager(); - - // Act - const sessionId = manager.getSessionId('non-existent'); - - // Assert - expect(sessionId).toBeNull(); - }); - }); - - describe('State Query Methods', () => { - it('should report hasRunningTask correctly', async () => { - // Arrange - const manager = new TaskManager(); - - // Assert initial state - expect(manager.hasRunningTask()).toBe(false); - - // Act - await manager.startTask('task-1', { prompt: 'Test' }, createMockCallbacks()); - - // Assert - expect(manager.hasRunningTask()).toBe(true); - }); - - it('should return all active task IDs', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 3 }); - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - - // Act - const activeIds = manager.getActiveTaskIds(); - - // Assert - expect(activeIds).toContain('task-1'); - expect(activeIds).toContain('task-2'); - expect(activeIds.length).toBe(2); - }); - - it('should return first active task ID', async () => { - // Arrange - const manager = new TaskManager(); - await manager.startTask('task-1', { prompt: 'Test' }, createMockCallbacks()); - - // Act - const activeId = manager.getActiveTaskId(); - - // Assert - expect(activeId).toBe('task-1'); - }); - - it('should return null when no active tasks', () => { - // Arrange - const manager = new TaskManager(); - - // Act - const activeId = manager.getActiveTaskId(); - - // Assert - expect(activeId).toBeNull(); - }); - }); - - describe('dispose()', () => { - it('should dispose all active tasks', async () => { - // Arrange - const manager = new TaskManager(); - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - - // Act - manager.dispose(); - - // Assert - expect(manager.getActiveTaskCount()).toBe(0); - expect(manager.hasRunningTask()).toBe(false); - }); - - it('should clear the task queue', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 1 }); - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - - expect(manager.getQueueLength()).toBe(1); - - // Act - manager.dispose(); - - // Assert - expect(manager.getQueueLength()).toBe(0); - }); - }); - }); - - describe('Singleton Functions', () => { - describe('getTaskManager()', () => { - it('should return singleton instance', () => { - // Act - const manager1 = getTaskManager(); - const manager2 = getTaskManager(); - - // Assert - expect(manager1).toBe(manager2); - }); - - it('should create new instance if none exists', () => { - // Act - disposeTaskManager(); - const manager = getTaskManager(); - - // Assert - expect(manager).toBeInstanceOf(TaskManager); - }); - }); - - describe('disposeTaskManager()', () => { - it('should dispose singleton and allow recreation', () => { - // Arrange - const manager1 = getTaskManager(); - - // Act - disposeTaskManager(); - const manager2 = getTaskManager(); - - // Assert - expect(manager2).not.toBe(manager1); - }); - - it('should be safe to call multiple times', () => { - // Act & Assert - should not throw - disposeTaskManager(); - disposeTaskManager(); - disposeTaskManager(); - }); - }); - }); - - describe('Queue Processing', () => { - it('should queue tasks and track positions correctly', async () => { - // Arrange - use maxConcurrentTasks: 2 to allow queue limit of 2 - const manager = new TaskManager({ maxConcurrentTasks: 2 }); - - const callbacks1 = createMockCallbacks(); - const callbacks2 = createMockCallbacks(); - const callbacks3 = createMockCallbacks(); - const callbacks4 = createMockCallbacks(); - - // Start tasks - first 2 run, next 2 queue - await manager.startTask('task-1', { prompt: 'Task 1' }, callbacks1); - await manager.startTask('task-2', { prompt: 'Task 2' }, callbacks2); - await manager.startTask('task-3', { prompt: 'Task 3' }, callbacks3); - await manager.startTask('task-4', { prompt: 'Task 4' }, callbacks4); - - // Assert queue state - expect(manager.getActiveTaskCount()).toBe(2); - expect(manager.getQueueLength()).toBe(2); - expect(manager.getQueuePosition('task-3')).toBe(1); - expect(manager.getQueuePosition('task-4')).toBe(2); - }); - - it('should maintain queue integrity during concurrent operations', async () => { - // Arrange - const manager = new TaskManager({ maxConcurrentTasks: 2 }); - - // Add multiple tasks - await manager.startTask('task-1', { prompt: 'Task 1' }, createMockCallbacks()); - await manager.startTask('task-2', { prompt: 'Task 2' }, createMockCallbacks()); - await manager.startTask('task-3', { prompt: 'Task 3' }, createMockCallbacks()); - await manager.startTask('task-4', { prompt: 'Task 4' }, createMockCallbacks()); - - // Assert - expect(manager.getActiveTaskCount()).toBe(2); - expect(manager.getQueueLength()).toBe(2); - - // Cancel queued task - const removed = manager.cancelQueuedTask('task-3'); - expect(removed).toBe(true); - expect(manager.getQueueLength()).toBe(1); - - // task-4 should still be queued - expect(manager.isTaskQueued('task-4')).toBe(true); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/accomplish.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/accomplish.unit.test.ts deleted file mode 100644 index ff647538d..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/accomplish.unit.test.ts +++ /dev/null @@ -1,234 +0,0 @@ -/** - * Unit tests for Accomplish API library - * - * Tests the Electron detection and shell utilities: - * - isRunningInElectron() detection - * - getShellVersion() retrieval - * - getShellPlatform() retrieval - * - getAccomplish() and useAccomplish() API access - */ - -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; - -// Store original window -const originalWindow = globalThis.window; - -describe('Accomplish API', () => { - beforeEach(() => { - vi.clearAllMocks(); - vi.resetModules(); - (globalThis as unknown as { window: Record }).window = {}; - }); - - afterEach(() => { - vi.clearAllMocks(); - (globalThis as unknown as { window: typeof window }).window = originalWindow; - }); - - describe('isRunningInElectron', () => { - it('should return true when accomplishShell.isElectron is true', async () => { - (globalThis as unknown as { window: { accomplishShell: { isElectron: boolean } } }).window = { - accomplishShell: { isElectron: true }, - }; - - const { isRunningInElectron } = await import('@renderer/lib/accomplish'); - expect(isRunningInElectron()).toBe(true); - }); - - it('should return false when accomplishShell.isElectron is false', async () => { - (globalThis as unknown as { window: { accomplishShell: { isElectron: boolean } } }).window = { - accomplishShell: { isElectron: false }, - }; - - const { isRunningInElectron } = await import('@renderer/lib/accomplish'); - expect(isRunningInElectron()).toBe(false); - }); - - it('should return false when accomplishShell is unavailable', async () => { - // Test undefined, null, missing property, and empty object - const unavailableScenarios = [ - { accomplishShell: undefined }, - { accomplishShell: null }, - { accomplishShell: { version: '1.0.0' } }, // missing isElectron - {}, // no accomplishShell at all - ]; - - for (const scenario of unavailableScenarios) { - vi.resetModules(); - (globalThis as unknown as { window: Record }).window = scenario; - const { isRunningInElectron } = await import('@renderer/lib/accomplish'); - expect(isRunningInElectron()).toBe(false); - } - }); - - it('should use strict equality for isElectron check', async () => { - // Truthy but not true should return false - (globalThis as unknown as { window: { accomplishShell: { isElectron: number } } }).window = { - accomplishShell: { isElectron: 1 }, - }; - - const { isRunningInElectron } = await import('@renderer/lib/accomplish'); - expect(isRunningInElectron()).toBe(false); - }); - }); - - describe('getShellVersion', () => { - it('should return version when available', async () => { - (globalThis as unknown as { window: { accomplishShell: { version: string } } }).window = { - accomplishShell: { version: '1.2.3' }, - }; - - const { getShellVersion } = await import('@renderer/lib/accomplish'); - expect(getShellVersion()).toBe('1.2.3'); - }); - - it('should return null when version is unavailable', async () => { - const unavailableScenarios = [ - { accomplishShell: undefined }, - { accomplishShell: { isElectron: true } }, // no version property - {}, - ]; - - for (const scenario of unavailableScenarios) { - vi.resetModules(); - (globalThis as unknown as { window: Record }).window = scenario; - const { getShellVersion } = await import('@renderer/lib/accomplish'); - expect(getShellVersion()).toBeNull(); - } - }); - - it('should handle various version formats', async () => { - const versions = ['0.0.1', '1.0.0', '2.5.10', '1.0.0-beta.1', '1.0.0-rc.2']; - - for (const version of versions) { - vi.resetModules(); - (globalThis as unknown as { window: { accomplishShell: { version: string } } }).window = { - accomplishShell: { version }, - }; - const { getShellVersion } = await import('@renderer/lib/accomplish'); - expect(getShellVersion()).toBe(version); - } - }); - }); - - describe('getShellPlatform', () => { - it('should return platform when available', async () => { - const platforms = ['darwin', 'linux', 'win32']; - - for (const platform of platforms) { - vi.resetModules(); - (globalThis as unknown as { window: { accomplishShell: { platform: string } } }).window = { - accomplishShell: { platform }, - }; - const { getShellPlatform } = await import('@renderer/lib/accomplish'); - expect(getShellPlatform()).toBe(platform); - } - }); - - it('should return null when platform is unavailable', async () => { - const unavailableScenarios = [ - { accomplishShell: undefined }, - { accomplishShell: { isElectron: true } }, // no platform property - {}, - ]; - - for (const scenario of unavailableScenarios) { - vi.resetModules(); - (globalThis as unknown as { window: Record }).window = scenario; - const { getShellPlatform } = await import('@renderer/lib/accomplish'); - expect(getShellPlatform()).toBeNull(); - } - }); - }); - - describe('getAccomplish', () => { - it('should return accomplish API when available', async () => { - const mockApi = { - getVersion: vi.fn(), - startTask: vi.fn(), - validateBedrockCredentials: vi.fn(), - saveBedrockCredentials: vi.fn(), - getBedrockCredentials: vi.fn(), - }; - (globalThis as unknown as { window: { accomplish: typeof mockApi } }).window = { - accomplish: mockApi, - }; - - const { getAccomplish } = await import('@renderer/lib/accomplish'); - const result = getAccomplish(); - // getAccomplish returns a wrapper object with spread methods + Bedrock wrappers - expect(result.getVersion).toBeDefined(); - expect(result.startTask).toBeDefined(); - expect(result.validateBedrockCredentials).toBeDefined(); - expect(result.saveBedrockCredentials).toBeDefined(); - expect(result.getBedrockCredentials).toBeDefined(); - }); - - it('should throw when accomplish API is not available', async () => { - const unavailableScenarios = [ - { accomplish: undefined }, - {}, - ]; - - for (const scenario of unavailableScenarios) { - vi.resetModules(); - (globalThis as unknown as { window: Record }).window = scenario; - const { getAccomplish } = await import('@renderer/lib/accomplish'); - expect(() => getAccomplish()).toThrow('Accomplish API not available - not running in Electron'); - } - }); - }); - - describe('useAccomplish', () => { - it('should return accomplish API when available', async () => { - const mockApi = { getVersion: vi.fn(), startTask: vi.fn() }; - (globalThis as unknown as { window: { accomplish: typeof mockApi } }).window = { - accomplish: mockApi, - }; - - const { useAccomplish } = await import('@renderer/lib/accomplish'); - expect(useAccomplish()).toBe(mockApi); - }); - - it('should throw when accomplish API is not available', async () => { - (globalThis as unknown as { window: { accomplish?: unknown } }).window = { - accomplish: undefined, - }; - - const { useAccomplish } = await import('@renderer/lib/accomplish'); - expect(() => useAccomplish()).toThrow('Accomplish API not available - not running in Electron'); - }); - }); - - describe('Complete Shell Object', () => { - it('should recognize complete shell object with all properties', async () => { - const completeShell = { - version: '1.0.0', - platform: 'darwin', - isElectron: true as const, - }; - (globalThis as unknown as { window: { accomplishShell: typeof completeShell } }).window = { - accomplishShell: completeShell, - }; - - const { isRunningInElectron, getShellVersion, getShellPlatform } = await import('@renderer/lib/accomplish'); - - expect(isRunningInElectron()).toBe(true); - expect(getShellVersion()).toBe('1.0.0'); - expect(getShellPlatform()).toBe('darwin'); - }); - - it('should handle partial shell object gracefully', async () => { - const partialShell = { version: '1.0.0', isElectron: true as const }; - (globalThis as unknown as { window: { accomplishShell: typeof partialShell } }).window = { - accomplishShell: partialShell, - }; - - const { isRunningInElectron, getShellVersion, getShellPlatform } = await import('@renderer/lib/accomplish'); - - expect(isRunningInElectron()).toBe(true); - expect(getShellVersion()).toBe('1.0.0'); - expect(getShellPlatform()).toBeNull(); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/analytics.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/analytics.unit.test.ts deleted file mode 100644 index ae505cb3a..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/analytics.unit.test.ts +++ /dev/null @@ -1,281 +0,0 @@ -/** - * Unit tests for Analytics library - * - * Tests the analytics tracking utilities: - * - trackPageView() and trackEvent() behavior - * - No-op behavior when gtag is unavailable - * - Correct gtag calls when available - * - All predefined event trackers in the analytics object - */ - -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; - -// Mock window.gtag before importing the module -const mockGtag = vi.fn(); - -// Set up window mock -const originalWindow = globalThis.window; - -describe('Analytics', () => { - beforeEach(() => { - vi.clearAllMocks(); - vi.resetModules(); - (globalThis as unknown as { window: typeof window }).window = { - ...originalWindow, - gtag: undefined, - } as unknown as typeof window; - }); - - afterEach(() => { - vi.clearAllMocks(); - (globalThis as unknown as { window: typeof window }).window = originalWindow; - }); - - describe('trackPageView', () => { - it('should not throw when gtag is unavailable', async () => { - (globalThis as unknown as { window: { gtag?: unknown } }).window = { gtag: undefined }; - - const { trackPageView } = await import('@renderer/lib/analytics'); - // Should not throw - just returns without error - expect(() => trackPageView('/test-page', 'Test Page')).not.toThrow(); - }); - - it('should call gtag with correct parameters when available', async () => { - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - - const { trackPageView } = await import('@renderer/lib/analytics'); - trackPageView('/test-page', 'Test Page'); - - expect(mockGtag).toHaveBeenCalledWith('config', 'G-RQWHYJ5NEG', { - page_path: '/test-page', - page_title: 'Test Page', - }); - }); - - it('should handle missing page title', async () => { - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - - const { trackPageView } = await import('@renderer/lib/analytics'); - trackPageView('/test-page'); - - expect(mockGtag).toHaveBeenCalledWith('config', 'G-RQWHYJ5NEG', { - page_path: '/test-page', - page_title: undefined, - }); - }); - - it('should return immediately if gtag is not a function', async () => { - (globalThis as unknown as { window: { gtag: string } }).window = { gtag: 'not a function' }; - - const { trackPageView } = await import('@renderer/lib/analytics'); - const result = trackPageView('/test-page'); - - expect(result).toBeUndefined(); - }); - }); - - describe('trackEvent', () => { - it('should not throw when gtag is unavailable', async () => { - (globalThis as unknown as { window: { gtag?: unknown } }).window = { gtag: undefined }; - - const { trackEvent } = await import('@renderer/lib/analytics'); - expect(() => trackEvent('test_event', { category: 'test' })).not.toThrow(); - }); - - it('should call gtag with event name and parameters', async () => { - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - - const { trackEvent } = await import('@renderer/lib/analytics'); - trackEvent('test_event', { category: 'test', value: 123 }); - - expect(mockGtag).toHaveBeenCalledWith('event', 'test_event', { - category: 'test', - value: 123, - }); - }); - - it('should handle events without parameters', async () => { - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - - const { trackEvent } = await import('@renderer/lib/analytics'); - trackEvent('simple_event'); - - expect(mockGtag).toHaveBeenCalledWith('event', 'simple_event', undefined); - }); - }); - - describe('Predefined Event Trackers', () => { - beforeEach(async () => { - vi.resetModules(); - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - }); - - it('trackSubmitTask should call gtag with correct parameters', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackSubmitTask(); - - expect(mockGtag).toHaveBeenCalledWith('event', 'submit_task', { - event_category: 'engagement', - event_label: 'task_submission', - }); - }); - - it('trackNewTask should call gtag with correct parameters', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackNewTask(); - - expect(mockGtag).toHaveBeenCalledWith('event', 'new_task', { - event_category: 'engagement', - event_label: 'new_task_click', - }); - }); - - it('trackOpenSettings should call gtag with correct parameters', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackOpenSettings(); - - expect(mockGtag).toHaveBeenCalledWith('event', 'open_settings', { - event_category: 'engagement', - event_label: 'settings_click', - }); - }); - - it('trackSaveApiKey should include provider parameter', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackSaveApiKey('anthropic'); - - expect(mockGtag).toHaveBeenCalledWith('event', 'save_api_key', { - event_category: 'settings', - event_label: 'api_key_save', - provider: 'anthropic', - }); - }); - - it('trackSelectProvider should include provider parameter', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackSelectProvider('openai'); - - expect(mockGtag).toHaveBeenCalledWith('event', 'select_provider', { - event_category: 'settings', - event_label: 'provider_selection', - provider: 'openai', - }); - }); - - it('trackSelectModel should include model parameter', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackSelectModel('claude-3-sonnet'); - - expect(mockGtag).toHaveBeenCalledWith('event', 'select_model', { - event_category: 'settings', - event_label: 'model_selection', - model: 'claude-3-sonnet', - }); - }); - - it('trackToggleDebugMode should include enabled flag', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - - analytics.trackToggleDebugMode(true); - expect(mockGtag).toHaveBeenCalledWith('event', 'toggle_debug_mode', { - event_category: 'settings', - event_label: 'debug_mode_toggle', - enabled: true, - }); - - mockGtag.mockClear(); - - analytics.trackToggleDebugMode(false); - expect(mockGtag).toHaveBeenCalledWith('event', 'toggle_debug_mode', { - event_category: 'settings', - event_label: 'debug_mode_toggle', - enabled: false, - }); - }); - }); - - describe('Analytics Object Structure', () => { - it('should expose all required tracker functions', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - - expect(typeof analytics.trackPageView).toBe('function'); - expect(typeof analytics.trackEvent).toBe('function'); - expect(typeof analytics.trackSubmitTask).toBe('function'); - expect(typeof analytics.trackNewTask).toBe('function'); - expect(typeof analytics.trackOpenSettings).toBe('function'); - expect(typeof analytics.trackSaveApiKey).toBe('function'); - expect(typeof analytics.trackSelectProvider).toBe('function'); - expect(typeof analytics.trackSelectModel).toBe('function'); - expect(typeof analytics.trackToggleDebugMode).toBe('function'); - }); - - it('should export analytics object as default', async () => { - const analyticsDefault = (await import('@renderer/lib/analytics')).default; - expect(analyticsDefault).toBeDefined(); - expect(analyticsDefault.trackSubmitTask).toBeDefined(); - expect(analyticsDefault.trackPageView).toBeDefined(); - }); - }); - - describe('Event Categories', () => { - beforeEach(async () => { - vi.resetModules(); - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - }); - - it('should use engagement category for user actions', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackSubmitTask(); - analytics.trackNewTask(); - analytics.trackOpenSettings(); - - const engagementCalls = mockGtag.mock.calls.filter( - (call) => call[2]?.event_category === 'engagement' - ); - expect(engagementCalls).toHaveLength(3); - }); - - it('should use settings category for configuration changes', async () => { - const { analytics } = await import('@renderer/lib/analytics'); - analytics.trackSaveApiKey('anthropic'); - analytics.trackSelectProvider('openai'); - analytics.trackSelectModel('gpt-4'); - analytics.trackToggleDebugMode(true); - - const settingsCalls = mockGtag.mock.calls.filter( - (call) => call[2]?.event_category === 'settings' - ); - expect(settingsCalls).toHaveLength(4); - }); - }); - - describe('Edge Cases', () => { - it('should handle null gtag gracefully', async () => { - (globalThis as unknown as { window: { gtag: null } }).window = { gtag: null }; - - const { trackEvent } = await import('@renderer/lib/analytics'); - expect(() => trackEvent('test')).not.toThrow(); - }); - - it('should handle empty event name', async () => { - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - - const { trackEvent } = await import('@renderer/lib/analytics'); - trackEvent(''); - - expect(mockGtag).toHaveBeenCalledWith('event', '', undefined); - }); - - it('should handle empty page path', async () => { - (globalThis as unknown as { window: { gtag: typeof mockGtag } }).window = { gtag: mockGtag }; - - const { trackPageView } = await import('@renderer/lib/analytics'); - trackPageView(''); - - expect(mockGtag).toHaveBeenCalledWith('config', 'G-RQWHYJ5NEG', { - page_path: '', - page_title: undefined, - }); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/animations.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/animations.unit.test.ts deleted file mode 100644 index c878a3fd9..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/animations.unit.test.ts +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Unit tests for Animation library - * - * Tests the animation configuration objects: - * - Spring configurations have expected values - * - Variants have correct initial/animate/exit states - * - Interaction presets (hover/tap) have correct scale values - */ - -import { describe, it, expect } from 'vitest'; -import { - springs, - variants, - staggerContainer, - staggerItem, - cardHover, - buttonPress, -} from '@renderer/lib/animations'; - -describe('Animation Library', () => { - describe('Spring Configurations', () => { - it('should have correct bouncy spring values', () => { - expect(springs.bouncy).toEqual({ - type: 'spring', - stiffness: 400, - damping: 25, - }); - }); - - it('should have correct gentle spring values', () => { - expect(springs.gentle).toEqual({ - type: 'spring', - stiffness: 300, - damping: 30, - }); - }); - - it('should have correct snappy spring values', () => { - expect(springs.snappy).toEqual({ - type: 'spring', - stiffness: 500, - damping: 30, - }); - }); - - it('should have valid ranges for all springs', () => { - Object.values(springs).forEach((spring) => { - expect(spring.stiffness).toBeGreaterThanOrEqual(100); - expect(spring.stiffness).toBeLessThanOrEqual(1000); - expect(spring.damping).toBeGreaterThanOrEqual(10); - expect(spring.damping).toBeLessThanOrEqual(100); - }); - }); - }); - - describe('Animation Variants', () => { - it('should have correct fadeUp values', () => { - expect(variants.fadeUp.initial).toEqual({ opacity: 0, y: 12 }); - expect(variants.fadeUp.animate).toEqual({ opacity: 1, y: 0 }); - expect(variants.fadeUp.exit).toEqual({ opacity: 0, y: -8 }); - }); - - it('should have correct fadeIn values', () => { - expect(variants.fadeIn.initial).toEqual({ opacity: 0 }); - expect(variants.fadeIn.animate).toEqual({ opacity: 1 }); - expect(variants.fadeIn.exit).toEqual({ opacity: 0 }); - }); - - it('should have correct scaleIn values', () => { - expect(variants.scaleIn.initial).toEqual({ opacity: 0, scale: 0.95 }); - expect(variants.scaleIn.animate).toEqual({ opacity: 1, scale: 1 }); - expect(variants.scaleIn.exit).toEqual({ opacity: 0, scale: 0.95 }); - }); - - it('should have correct slideInRight values', () => { - expect(variants.slideInRight.initial).toEqual({ opacity: 0, x: 20 }); - expect(variants.slideInRight.animate).toEqual({ opacity: 1, x: 0 }); - expect(variants.slideInRight.exit).toEqual({ opacity: 0, x: -20 }); - }); - - it('should have correct slideInLeft values', () => { - expect(variants.slideInLeft.initial).toEqual({ opacity: 0, x: -12 }); - expect(variants.slideInLeft.animate).toEqual({ opacity: 1, x: 0 }); - expect(variants.slideInLeft.exit).toEqual({ opacity: 0, x: -12 }); - }); - - it('should all start with opacity 0 and animate to opacity 1', () => { - Object.values(variants).forEach((variant) => { - expect((variant.initial as { opacity: number }).opacity).toBe(0); - expect((variant.animate as { opacity: number }).opacity).toBe(1); - expect((variant.exit as { opacity: number }).opacity).toBe(0); - }); - }); - }); - - describe('Stagger Animations', () => { - it('should have correct stagger container configuration', () => { - expect(staggerContainer.initial).toEqual({}); - expect(staggerContainer.animate).toEqual({ - transition: { - staggerChildren: 0.05, - delayChildren: 0.1, - }, - }); - }); - - it('should have correct stagger item configuration', () => { - expect(staggerItem.initial).toEqual({ opacity: 0, y: 8 }); - expect(staggerItem.animate).toEqual({ opacity: 1, y: 0 }); - }); - }); - - describe('Interaction Presets', () => { - it('should have correct cardHover scale values', () => { - expect(cardHover.rest).toEqual({ scale: 1 }); - expect(cardHover.hover).toEqual({ scale: 1.02 }); - expect(cardHover.tap).toEqual({ scale: 0.98 }); - }); - - it('should have correct buttonPress scale values', () => { - expect(buttonPress.rest).toEqual({ scale: 1 }); - expect(buttonPress.hover).toEqual({ scale: 1.02 }); - expect(buttonPress.tap).toEqual({ scale: 0.95 }); - }); - - it('should have button tap more pronounced than card tap', () => { - expect(buttonPress.tap.scale).toBeLessThan(cardHover.tap.scale); - }); - }); - - describe('Export Structure', () => { - it('should export all required animations', () => { - expect(Object.keys(springs)).toEqual(['bouncy', 'gentle', 'snappy']); - expect(Object.keys(variants)).toEqual(['fadeUp', 'fadeIn', 'scaleIn', 'slideInRight', 'slideInLeft']); - expect(staggerContainer).toBeDefined(); - expect(staggerItem).toBeDefined(); - expect(cardHover).toBeDefined(); - expect(buttonPress).toBeDefined(); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/waiting-detection.unit.test.ts b/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/waiting-detection.unit.test.ts deleted file mode 100644 index 5dd871727..000000000 --- a/openwork-memos-integration/apps/desktop/__tests__/unit/renderer/lib/waiting-detection.unit.test.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { isWaitingForUser } from '../../../../src/renderer/lib/waiting-detection'; - -describe('isWaitingForUser', () => { - describe('should return true for messages indicating waiting', () => { - // "Let me know" patterns - it.each([ - 'Let me know when you are done', - 'let me know once you have logged in', - 'Let me know after you complete the form', - 'let me know if you need help', - ])('detects "let me know" pattern: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // "Tell me" patterns - it.each([ - 'Tell me when you are ready', - 'tell me once you finish', - 'Tell me after you have entered your credentials', - ])('detects "tell me" pattern: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // "Waiting for you" patterns - it.each([ - 'I am waiting for you to complete this', - 'I will wait for your response', - "I'll wait until you are done", - 'Waiting on you to finish', - ])('detects "waiting for you" pattern: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // "Once you" / "After you" / "When you" patterns - it.each([ - "Once you've logged in, I can continue", - 'Once you have completed the form', - 'After you enter your password', - "After you've finished, click continue", - 'When you are done, let me know', - "When you've entered the code", - 'When you want to proceed', - ])('detects conditional patterns: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // "Please [action]" patterns - it.each([ - 'Please log in to continue', - 'Please login with your credentials', - 'Please sign in to your account', - 'Please enter your password', - 'Please fill out the form', - 'Please complete the verification', - 'Please click the submit button', - 'Please select an option', - 'Please confirm your identity', - 'Please verify your email', - 'Please authenticate using 2FA', - ])('detects "please" action patterns: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // Login/authentication specific - it.each([ - 'You need to log in manually', - 'Please sign in yourself', - 'Enter your credentials to proceed', - 'Enter your password in the field', - 'Enter your OTP code', - 'Authenticate yourself to continue', - 'Complete the login process', - 'Complete the authentication', - 'Complete the captcha verification', - 'Verify your identity', - 'Verify your account', - ])('detects authentication patterns: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // Manual action required - it.each([ - 'This requires manual action', - 'A manual step is needed', - 'You need to manually complete this', - 'Manually enter your details', - 'I need you to click the button', - 'This requires you to fill the form', - "You'll need to do this yourself", - 'You will need to verify', - ])('detects manual action patterns: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // Ready/done prompts - it.each([ - "When you're done, I can proceed", - 'When you are ready, continue', - 'Once done, click the button', - 'Once ready, let me know', - 'After done, we can move on', - "After you're finished", - ])('detects ready/done prompts: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // Continuation prompts - it.each([ - 'Ready to continue?', - 'Ready to proceed with the next step?', - 'Continue when you are done', - 'Proceed when ready', - 'Click continue when finished', - 'Press continue after you log in', - 'Hit continue once complete', - ])('detects continuation prompts: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - - // Explicit waiting statements - it.each([ - "I'll be here when you need me", - 'I will be here waiting', - 'Standing by for your input', - 'Awaiting your response', - 'Waiting for your input', - 'Waiting for the user to act', - 'Waiting for manual intervention', - ])('detects explicit waiting: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(true); - }); - }); - - describe('should return false for completed task messages', () => { - it.each([ - 'I have navigated to ynet.co.il', - 'Done! The page has loaded.', - 'Finished navigating to the website.', - 'Successfully opened the page.', - 'The task is complete.', - 'I clicked the button as requested.', - 'The form has been submitted.', - 'Here is the information you requested.', - 'I found the following results:', - 'The file has been saved.', - 'Screenshot captured successfully.', - '', - 'All done!', - 'Task completed successfully.', - 'Navigation complete.', - ])('returns false for: "%s"', (message) => { - expect(isWaitingForUser(message)).toBe(false); - }); - }); - - describe('edge cases', () => { - it('returns false for empty string', () => { - expect(isWaitingForUser('')).toBe(false); - }); - - it('returns false for null-ish content', () => { - expect(isWaitingForUser(null as unknown as string)).toBe(false); - expect(isWaitingForUser(undefined as unknown as string)).toBe(false); - }); - - it('is case insensitive', () => { - expect(isWaitingForUser('LET ME KNOW WHEN YOU ARE DONE')).toBe(true); - expect(isWaitingForUser('Please Log In')).toBe(true); - expect(isWaitingForUser('WAITING FOR YOU')).toBe(true); - }); - - it('handles multi-line messages', () => { - const multiLineWaiting = `I've opened the login page. - -Please enter your credentials and let me know when you're done.`; - expect(isWaitingForUser(multiLineWaiting)).toBe(true); - - const multiLineComplete = `I've navigated to the page. - -The content has loaded successfully.`; - expect(isWaitingForUser(multiLineComplete)).toBe(false); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/clean_dmg_install.sh b/openwork-memos-integration/apps/desktop/clean_dmg_install.sh deleted file mode 100755 index 986e1c9f6..000000000 --- a/openwork-memos-integration/apps/desktop/clean_dmg_install.sh +++ /dev/null @@ -1,229 +0,0 @@ -#!/bin/bash -# Clean all files related to DMG/production installations of Accomplish -# This removes app data, preferences, caches, and optionally the app itself -# Useful for testing fresh installs or complete uninstallation - -set -e - -echo "=== ACCOMPLISH DMG INSTALLATION CLEANUP ===" -echo "" - -# Parse arguments -REMOVE_APP=false -FORCE=false - -while [[ $# -gt 0 ]]; do - case $1 in - --remove-app) - REMOVE_APP=true - shift - ;; - --force|-f) - FORCE=true - shift - ;; - --help|-h) - echo "Usage: $0 [options]" - echo "" - echo "Options:" - echo " --remove-app Also remove the application from /Applications" - echo " --force, -f Skip confirmation prompts" - echo " --help, -h Show this help message" - echo "" - echo "This script cleans up all user data, caches, and preferences" - echo "for Accomplish production (DMG) installations." - exit 0 - ;; - *) - echo "Unknown option: $1" - echo "Use --help for usage information" - exit 1 - ;; - esac -done - -# Confirm unless --force is used -if [ "$FORCE" != true ]; then - echo "This will remove all Accomplish user data including:" - echo " - App settings and task history" - echo " - Cached data and logs" - echo " - Keychain credentials" - if [ "$REMOVE_APP" = true ]; then - echo " - The Accomplish application itself" - fi - echo "" - read -p "Are you sure you want to continue? (y/N) " -n 1 -r - echo "" - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo "Aborted." - exit 0 - fi -fi - -echo "" - -# Kill any running instances -echo "Stopping any running Accomplish processes..." -pkill -f "Accomplish" 2>/dev/null || true -pkill -f "Accomplish Lite" 2>/dev/null || true -sleep 1 - -# Application Support directories (electron-store data) -echo "Clearing Application Support data..." -APP_SUPPORT_DIRS=( - "$HOME/Library/Application Support/Accomplish" - "$HOME/Library/Application Support/Accomplish Lite" - "$HOME/Library/Application Support/com.accomplish.desktop" - "$HOME/Library/Application Support/com.accomplish.lite" - "$HOME/Library/Application Support/ai.accomplish.desktop" - "$HOME/Library/Application Support/ai.accomplish.lite" - "$HOME/Library/Application Support/@accomplish/desktop" -) - -for dir in "${APP_SUPPORT_DIRS[@]}"; do - if [ -d "$dir" ]; then - rm -rf "$dir" - echo " - Removed: $dir" - fi -done - -# Preferences (plist files) -echo "Clearing preferences..." -PLIST_FILES=( - "$HOME/Library/Preferences/com.accomplish.desktop.plist" - "$HOME/Library/Preferences/com.accomplish.lite.plist" - "$HOME/Library/Preferences/com.accomplish.app.plist" - "$HOME/Library/Preferences/ai.accomplish.desktop.plist" - "$HOME/Library/Preferences/ai.accomplish.lite.plist" -) - -for plist in "${PLIST_FILES[@]}"; do - if [ -f "$plist" ]; then - rm -f "$plist" - echo " - Removed: $plist" - fi -done - -# Caches -echo "Clearing caches..." -CACHE_DIRS=( - "$HOME/Library/Caches/Accomplish" - "$HOME/Library/Caches/Accomplish Lite" - "$HOME/Library/Caches/com.accomplish.desktop" - "$HOME/Library/Caches/com.accomplish.lite" - "$HOME/Library/Caches/ai.accomplish.desktop" - "$HOME/Library/Caches/ai.accomplish.lite" - "$HOME/Library/Caches/@accomplish/desktop" -) - -for dir in "${CACHE_DIRS[@]}"; do - if [ -d "$dir" ]; then - rm -rf "$dir" - echo " - Removed: $dir" - fi -done - -# Logs -echo "Clearing logs..." -LOG_DIRS=( - "$HOME/Library/Logs/Accomplish" - "$HOME/Library/Logs/Accomplish Lite" - "$HOME/Library/Logs/ai.accomplish.desktop" - "$HOME/Library/Logs/ai.accomplish.lite" - "$HOME/Library/Logs/@accomplish/desktop" -) - -for dir in "${LOG_DIRS[@]}"; do - if [ -d "$dir" ]; then - rm -rf "$dir" - echo " - Removed: $dir" - fi -done - -# Saved Application State -echo "Clearing saved application state..." -SAVED_STATE_DIRS=( - "$HOME/Library/Saved Application State/com.accomplish.desktop.savedState" - "$HOME/Library/Saved Application State/com.accomplish.lite.savedState" - "$HOME/Library/Saved Application State/ai.accomplish.desktop.savedState" - "$HOME/Library/Saved Application State/ai.accomplish.lite.savedState" -) - -for dir in "${SAVED_STATE_DIRS[@]}"; do - if [ -d "$dir" ]; then - rm -rf "$dir" - echo " - Removed: $dir" - fi -done - -# Keychain entries -echo "Clearing keychain entries..." -KEYCHAIN_SERVICES=( - "Accomplish" - "Accomplish Lite" - "com.accomplish.desktop" - "com.accomplish.lite" - "ai.accomplish.desktop" - "ai.accomplish.lite" - "@accomplish/desktop" -) -KEYCHAIN_KEYS=("accessToken" "refreshToken" "userId" "tokenExpiresAt" "tokenIntegrity" "deviceSecret") - -for service in "${KEYCHAIN_SERVICES[@]}"; do - for key in "${KEYCHAIN_KEYS[@]}"; do - if security delete-generic-password -s "$service" -a "$key" 2>/dev/null; then - echo " - Removed keychain: $service/$key" - fi - done -done - -# Also try to delete any remaining keychain items by service name -for service in "${KEYCHAIN_SERVICES[@]}"; do - # Try to delete all items for this service (may need multiple attempts) - for _ in {1..10}; do - if ! security delete-generic-password -s "$service" 2>/dev/null; then - break - fi - echo " - Removed additional keychain item for: $service" - done -done - -# Remove application if requested -if [ "$REMOVE_APP" = true ]; then - echo "Removing application..." - APP_PATHS=( - "/Applications/Accomplish.app" - "/Applications/Accomplish Lite.app" - "$HOME/Applications/Accomplish.app" - "$HOME/Applications/Accomplish Lite.app" - ) - - for app in "${APP_PATHS[@]}"; do - if [ -d "$app" ]; then - rm -rf "$app" - echo " - Removed: $app" - fi - done -fi - -# Clear quarantine attributes if we're keeping the app -if [ "$REMOVE_APP" != true ]; then - echo "Clearing quarantine attributes (if app exists)..." - for app in "/Applications/Accomplish.app" "/Applications/Accomplish Lite.app"; do - if [ -d "$app" ]; then - xattr -rd com.apple.quarantine "$app" 2>/dev/null && echo " - Cleared quarantine: $app" || true - fi - done -fi - -echo "" -echo "=== CLEANUP COMPLETE ===" -echo "" - -if [ "$REMOVE_APP" = true ]; then - echo "All Accomplish data and applications have been removed." - echo "You can reinstall from the DMG file." -else - echo "All Accomplish user data has been cleared." - echo "The app will behave like a fresh installation on next launch." -fi diff --git a/openwork-memos-integration/apps/desktop/e2e/README.md b/openwork-memos-integration/apps/desktop/e2e/README.md deleted file mode 100644 index 8ac2403e7..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/README.md +++ /dev/null @@ -1,236 +0,0 @@ -# E2E Test Infrastructure - -This directory contains the E2E test infrastructure for the Openwork desktop app using Playwright. - -## Structure - -``` -e2e/ -├── fixtures/ # Test fixtures (Electron app launch) -├── pages/ # Page object models -├── specs/ # Test specifications -├── utils/ # Test utilities (screenshots, helpers) -└── test-results/ # Test output (screenshots, videos, traces) -``` - -## Fixtures - -### electron-app.ts - -Provides Electron app launch fixture with E2E configuration: - -- **electronApp**: Launches the Electron app with E2E flags -- **window**: Returns the first window (main app window) - -Environment variables automatically set: -- `E2E_SKIP_AUTH=1` - Skip onboarding flow -- `E2E_MOCK_TASK_EVENTS=1` - Mock task execution events - -## Page Objects - -### HomePage - -Methods for interacting with the home page: -- `title` - Home page title -- `taskInput` - Task input textarea -- `submitButton` - Submit button -- `getExampleCard(index)` - Get example card by index -- `enterTask(text)` - Enter task text -- `submitTask()` - Submit task - -### ExecutionPage - -Methods for interacting with the task execution page: -- `statusBadge` - Status badge -- `cancelButton` - Cancel button -- `thinkingIndicator` - Thinking indicator -- `followUpInput` - Follow-up input -- `stopButton` - Stop button -- `permissionModal` - Permission modal -- `allowButton` - Allow button (in permission modal) -- `denyButton` - Deny button (in permission modal) -- `waitForComplete()` - Wait for task completion - -### SettingsPage - -Methods for interacting with the settings page: -- `title` - Settings page title -- `debugModeToggle` - Debug mode toggle -- `modelSection` - Model section -- `modelSelect` - Model select dropdown -- `apiKeyInput` - API key input -- `addApiKeyButton` - Add API key button -- `navigateToSettings()` - Navigate to settings page -- `toggleDebugMode()` - Toggle debug mode -- `selectModel(modelName)` - Select a model -- `addApiKey(provider, key)` - Add API key - -## Utilities - -### screenshots.ts - -Provides AI-friendly screenshot capture with metadata: - -```typescript -import { captureForAI } from '../utils'; - -await captureForAI( - page, - 'task-execution', - 'running', - [ - 'Task is actively running', - 'Status badge shows "Running"', - 'Cancel button is visible' - ] -); -``` - -The utility creates: -- `{testName}-{stateName}-{timestamp}.png` - Screenshot -- `{testName}-{stateName}-{timestamp}.json` - Metadata (viewport, route, criteria) - -## Usage Example - -```typescript -import { test, expect } from '../fixtures'; -import { HomePage, ExecutionPage } from '../pages'; -import { captureForAI } from '../utils'; - -test('should submit a task and navigate to execution', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - // Enter task - await homePage.enterTask('Create a new file called hello.txt'); - await homePage.submitTask(); - - // Wait for navigation to execution page - await executionPage.statusBadge.waitFor({ state: 'visible' }); - - // Capture screenshot for AI evaluation - await captureForAI( - window, - 'task-submission', - 'execution-started', - ['Task execution page loaded', 'Status badge visible'] - ); - - // Assert - await expect(executionPage.statusBadge).toBeVisible(); -}); -``` - -## Running Tests - -Tests run in Docker by default (both locally and in CI). This ensures consistent behavior and enables concurrent test runs from multiple worktrees. - -### Prerequisites - -- Docker Desktop installed and running - -### Commands - -```bash -# Run all E2E tests (in Docker) -pnpm test:e2e - -# Pre-build Docker image (useful for caching) -pnpm test:e2e:build - -# Clean up Docker resources -pnpm test:e2e:clean - -# View HTML report -pnpm test:e2e:report -``` - -### Native Mode (for debugging) - -Run tests directly without Docker when you need Playwright UI or debugger: - -```bash -# Run natively (Electron windows will pop up) -pnpm test:e2e:native - -# Run with Playwright UI -pnpm test:e2e:native:ui - -# Run in debug mode -pnpm test:e2e:native:debug - -# Run fast tests only -pnpm test:e2e:native:fast - -# Run integration tests only -pnpm test:e2e:native:integration -``` - -## How Docker Testing Works - -1. Docker container runs Ubuntu with Xvfb (X Virtual Framebuffer) -2. Xvfb provides a virtual display at `:99` -3. Electron runs "headfully" inside the container, but the display is virtual -4. Test results are mounted to the host for viewing - -### Concurrent Worktree Testing - -Each worktree can run `pnpm test:e2e` simultaneously because: -- Each container has its own isolated filesystem -- Each container has its own virtual display -- Electron's single-instance lock is per-container, not per-host - -### Troubleshooting - -**Tests fail with "cannot open display"** -- Ensure Xvfb is starting (check Docker logs) -- Verify `DISPLAY=:99` is set - -**Tests fail with sandbox errors** -- The `--no-sandbox` flag is automatically added in Docker -- Ensure `DOCKER_ENV=1` is in the environment - -**Out of memory errors** -- Increase Docker's memory allocation in Docker Desktop settings -- The compose file sets `shm_size: 2gb` for Chromium - -## Writing Tests - -1. Import fixtures and page objects: - ```typescript - import { test, expect } from '../fixtures'; - import { HomePage } from '../pages'; - ``` - -2. Use page objects instead of direct selectors: - ```typescript - // Good - await homePage.submitTask(); - - // Bad - await window.getByTestId('task-input-submit').click(); - ``` - -3. Add test IDs to new UI elements in renderer: - ```tsx - - ``` - -4. Use `captureForAI` for screenshots with evaluation criteria: - ```typescript - await captureForAI( - window, - 'my-test', - 'some-state', - ['Criterion 1', 'Criterion 2'] - ); - ``` - -## Best Practices - -- Use page objects for all UI interactions -- Add descriptive test IDs (`data-testid`) to UI elements -- Use `captureForAI` for important states to enable AI-based evaluation -- Keep tests focused and independent -- Use serial execution (configured in playwright.config.ts) -- Mock task events for fast tests, use real execution for integration tests diff --git a/openwork-memos-integration/apps/desktop/e2e/config/index.ts b/openwork-memos-integration/apps/desktop/e2e/config/index.ts deleted file mode 100644 index 79d1a2429..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/config/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { TEST_TIMEOUTS, TEST_SCENARIOS, type TestScenario } from './timeouts'; diff --git a/openwork-memos-integration/apps/desktop/e2e/config/timeouts.ts b/openwork-memos-integration/apps/desktop/e2e/config/timeouts.ts deleted file mode 100644 index 2c8eab6f1..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/config/timeouts.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Centralized timeout constants for E2E tests. - * Adjust these based on CI environment performance. - */ -export const TEST_TIMEOUTS = { - /** Time for CSS animations to complete */ - ANIMATION: 300, - - /** Short wait for React state updates */ - STATE_UPDATE: 500, - - /** Time for React hydration after page load */ - HYDRATION: 1500, - - /** Time between app close and next launch (single-instance lock release) */ - APP_RESTART: 1000, - - /** Task completion with mock flow */ - TASK_COMPLETION: 3000, - - /** Navigation between pages */ - NAVIGATION: 5000, - - /** Permission modal appearance */ - PERMISSION_MODAL: 10000, - - /** Wait for task to reach completed/failed/stopped state */ - TASK_COMPLETE_WAIT: 20000, -} as const; - -/** - * Test scenario definitions with explicit keywords. - * Using prefixed keywords to avoid false positives. - */ -export const TEST_SCENARIOS = { - SUCCESS: { - keyword: '__e2e_success__', - description: 'Task completes successfully', - }, - WITH_TOOL: { - keyword: '__e2e_tool__', - description: 'Task uses tools (Read, Grep)', - }, - PERMISSION: { - keyword: '__e2e_permission__', - description: 'Task requires file permission', - }, - ERROR: { - keyword: '__e2e_error__', - description: 'Task fails with error', - }, - INTERRUPTED: { - keyword: '__e2e_interrupt__', - description: 'Task is interrupted by user', - }, - QUESTION: { - keyword: '__e2e_question__', - description: 'Task requires user question/choice', - }, -} as const; - -export type TestScenario = keyof typeof TEST_SCENARIOS; diff --git a/openwork-memos-integration/apps/desktop/e2e/docker/Dockerfile b/openwork-memos-integration/apps/desktop/e2e/docker/Dockerfile deleted file mode 100644 index cdfdbb54e..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/docker/Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -# Base image with Playwright dependencies pre-installed -FROM mcr.microsoft.com/playwright:v1.49.1-noble - -# Install Xvfb, build tools (for node-pty), and additional dependencies for Electron -RUN apt-get update && apt-get install -y \ - xvfb \ - build-essential \ - python3 \ - libnss3 \ - libatk1.0-0 \ - libatk-bridge2.0-0 \ - libcups2 \ - libdrm2 \ - libxkbcommon0 \ - libxcomposite1 \ - libxdamage1 \ - libxfixes3 \ - libxrandr2 \ - libgbm1 \ - libasound2t64 \ - libpango-1.0-0 \ - libcairo2 \ - && rm -rf /var/lib/apt/lists/* - -# Install pnpm -RUN corepack enable && corepack prepare pnpm@9.15.0 --activate - -# Set working directory -WORKDIR /app - -# Copy package files first for better caching -COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ -COPY packages/shared/package.json ./packages/shared/ -COPY apps/desktop/package.json ./apps/desktop/ - -# Copy skills directories (needed by postinstall script) -COPY apps/desktop/skills ./apps/desktop/skills - -# Install dependencies -RUN pnpm install --frozen-lockfile - -# Copy source code -COPY . . - -# Build the desktop app -RUN pnpm -F @accomplish/desktop build - -# Set display for Xvfb -ENV DISPLAY=:99 - -# Default command: start Xvfb and run tests (using native Playwright, not Docker) -CMD ["sh", "-c", "Xvfb :99 -screen 0 1920x1080x24 & sleep 1 && pnpm -F @accomplish/desktop test:e2e:native"] diff --git a/openwork-memos-integration/apps/desktop/e2e/docker/docker-compose.yml b/openwork-memos-integration/apps/desktop/e2e/docker/docker-compose.yml deleted file mode 100644 index eb0b6f3f3..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/docker/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -services: - e2e-tests: - build: - context: ../../../.. - dockerfile: apps/desktop/e2e/docker/Dockerfile - environment: - - E2E_SKIP_AUTH=1 - - E2E_MOCK_TASK_EVENTS=1 - - NODE_ENV=test - - DISPLAY=:99 - - DOCKER_ENV=1 - volumes: - # Mount test results for viewing on host - - ../test-results:/app/apps/desktop/e2e/test-results - - ../html-report:/app/apps/desktop/e2e/html-report - # Increase shared memory for Chromium - shm_size: '2gb' - # Allow running privileged for Electron sandbox - security_opt: - - seccomp:unconfined diff --git a/openwork-memos-integration/apps/desktop/e2e/fixtures/electron-app.ts b/openwork-memos-integration/apps/desktop/e2e/fixtures/electron-app.ts deleted file mode 100644 index 3143ac79f..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/fixtures/electron-app.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { test as base, _electron as electron, ElectronApplication, Page } from '@playwright/test'; -import { fileURLToPath } from 'url'; -import { dirname, resolve } from 'path'; -import { TEST_TIMEOUTS } from '../config'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -/** - * Custom fixtures for Electron E2E testing. - */ -type ElectronFixtures = { - /** The Electron application instance */ - electronApp: ElectronApplication; - /** The main renderer window (not DevTools) */ - window: Page; -}; - -/** - * Extended Playwright test with Electron fixtures. - * Each test gets a fresh app instance to ensure isolation. - */ -export const test = base.extend({ - electronApp: async ({}, use) => { - const mainPath = resolve(__dirname, '../../dist-electron/main/index.js'); - - const app = await electron.launch({ - args: [ - mainPath, - '--e2e-skip-auth', - '--e2e-mock-tasks', - // Disable sandbox in Docker (required for containerized Electron) - ...(process.env.DOCKER_ENV === '1' ? ['--no-sandbox', '--disable-gpu'] : []), - ], - env: { - ...process.env, - E2E_SKIP_AUTH: '1', - E2E_MOCK_TASK_EVENTS: '1', - NODE_ENV: 'test', - }, - }); - - await use(app); - - // Close app and wait for single-instance lock release - await app.close(); - await new Promise(resolve => setTimeout(resolve, TEST_TIMEOUTS.APP_RESTART)); - }, - - window: async ({ electronApp }, use) => { - // Get the first window - DevTools is disabled in E2E mode - const window = await electronApp.firstWindow(); - - // Wait for page to be fully loaded - await window.waitForLoadState('load'); - - // Wait for React hydration by checking for a core UI element - await window.waitForSelector('[data-testid="task-input-textarea"]', { - state: 'visible', - timeout: TEST_TIMEOUTS.NAVIGATION, - }); - - await use(window); - }, -}); - -export { expect } from '@playwright/test'; diff --git a/openwork-memos-integration/apps/desktop/e2e/fixtures/index.ts b/openwork-memos-integration/apps/desktop/e2e/fixtures/index.ts deleted file mode 100644 index e403854a8..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/fixtures/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { test, expect } from './electron-app'; diff --git a/openwork-memos-integration/apps/desktop/e2e/pages/execution.page.ts b/openwork-memos-integration/apps/desktop/e2e/pages/execution.page.ts deleted file mode 100644 index 60152a0f7..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/pages/execution.page.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { Page } from '@playwright/test'; -import { TEST_TIMEOUTS } from '../config'; - -export class ExecutionPage { - constructor(private page: Page) {} - - get statusBadge() { - return this.page.getByTestId('execution-status-badge'); - } - - get cancelButton() { - return this.page.getByTestId('execution-cancel-button'); - } - - get thinkingIndicator() { - return this.page.getByTestId('execution-thinking-indicator'); - } - - get followUpInput() { - return this.page.getByTestId('execution-follow-up-input'); - } - - get stopButton() { - return this.page.getByTestId('execution-stop-button'); - } - - get permissionModal() { - return this.page.getByTestId('execution-permission-modal'); - } - - get allowButton() { - return this.page.getByTestId('permission-allow-button'); - } - - get denyButton() { - return this.page.getByTestId('permission-deny-button'); - } - - /** Get all question option buttons inside the permission modal */ - get questionOptions() { - return this.permissionModal.locator('button').filter({ hasText: /Option|Other/ }); - } - - /** Get the custom response text input (visible when "Other" is selected) */ - get customResponseInput() { - return this.page.getByPlaceholder('Type your response...'); - } - - /** Get the "Back to options" button (visible in custom input mode) */ - get backToOptionsButton() { - return this.page.getByText('← Back to options'); - } - - /** Select a question option by index (0-based) */ - async selectQuestionOption(index: number) { - await this.questionOptions.nth(index).click(); - } - - async waitForComplete() { - // Wait for status badge to show a completed state (not running) - await this.page.waitForFunction( - () => { - const badge = document.querySelector('[data-testid="execution-status-badge"]'); - if (!badge) return false; - const text = badge.textContent?.toLowerCase() || ''; - return text.includes('completed') || text.includes('failed') || text.includes('stopped') || text.includes('cancelled'); - }, - { timeout: TEST_TIMEOUTS.TASK_COMPLETE_WAIT } - ); - } -} diff --git a/openwork-memos-integration/apps/desktop/e2e/pages/home.page.ts b/openwork-memos-integration/apps/desktop/e2e/pages/home.page.ts deleted file mode 100644 index 2e9ead2b9..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/pages/home.page.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { Page } from '@playwright/test'; - -export class HomePage { - constructor(private page: Page) {} - - get title() { - return this.page.getByTestId('home-title'); - } - - get taskInput() { - return this.page.getByTestId('task-input-textarea'); - } - - get submitButton() { - return this.page.getByTestId('task-input-submit'); - } - - get examplesToggle() { - return this.page.getByText('Example prompts'); - } - - getExampleCard(index: number) { - return this.page.getByTestId(`home-example-${index}`); - } - - async expandExamples() { - await this.examplesToggle.click(); - } - - async enterTask(text: string) { - await this.taskInput.fill(text); - } - - async submitTask() { - await this.submitButton.click(); - } -} diff --git a/openwork-memos-integration/apps/desktop/e2e/pages/index.ts b/openwork-memos-integration/apps/desktop/e2e/pages/index.ts deleted file mode 100644 index 054baf888..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/pages/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { HomePage } from './home.page'; -export { ExecutionPage } from './execution.page'; -export { SettingsPage } from './settings.page'; diff --git a/openwork-memos-integration/apps/desktop/e2e/pages/settings.page.ts b/openwork-memos-integration/apps/desktop/e2e/pages/settings.page.ts deleted file mode 100644 index bb70b2d5b..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/pages/settings.page.ts +++ /dev/null @@ -1,247 +0,0 @@ -import type { Page } from '@playwright/test'; -import { TEST_TIMEOUTS } from '../config'; - -export class SettingsPage { - constructor(private page: Page) {} - - // ===== Provider Grid ===== - - get providerGrid() { - return this.page.getByTestId('provider-grid'); - } - - get providerSearchInput() { - return this.page.getByTestId('provider-search-input'); - } - - get showAllButton() { - return this.page.getByRole('button', { name: 'Show All' }); - } - - get hideButton() { - return this.page.getByRole('button', { name: 'Hide' }); - } - - getProviderCard(providerId: string) { - return this.page.getByTestId(`provider-card-${providerId}`); - } - - getProviderConnectedBadge(providerId: string) { - return this.page.getByTestId(`provider-connected-badge-${providerId}`); - } - - // ===== Connection Status ===== - - get connectionStatus() { - return this.page.getByTestId('connection-status'); - } - - get disconnectButton() { - return this.page.getByTestId('disconnect-button'); - } - - get connectButton() { - return this.page.getByRole('button', { name: 'Connect' }); - } - - // ===== Model Selection ===== - - get modelSelector() { - return this.page.getByTestId('model-selector'); - } - - get modelSelectorError() { - return this.page.getByTestId('model-selector-error'); - } - - // ===== API Key Input ===== - - get apiKeyInput() { - return this.page.getByTestId('api-key-input'); - } - - get apiKeyHelpLink() { - return this.page.getByRole('link', { name: 'How can I find it?' }); - } - - // ===== Bedrock Specific ===== - - get bedrockAccessKeyTab() { - return this.page.getByRole('button', { name: 'Access Key' }); - } - - get bedrockAwsProfileTab() { - return this.page.getByRole('button', { name: 'AWS Profile' }); - } - - get bedrockAccessKeyIdInput() { - return this.page.getByTestId('bedrock-access-key-id'); - } - - get bedrockSecretKeyInput() { - return this.page.getByTestId('bedrock-secret-key'); - } - - get bedrockSessionTokenInput() { - return this.page.getByTestId('bedrock-session-token'); - } - - get bedrockProfileNameInput() { - return this.page.getByTestId('bedrock-profile-name'); - } - - get bedrockRegionSelect() { - return this.page.getByTestId('bedrock-region-select'); - } - - // ===== Ollama Specific ===== - - get ollamaServerUrlInput() { - return this.page.getByTestId('ollama-server-url'); - } - - get ollamaConnectionError() { - return this.page.getByTestId('ollama-connection-error'); - } - - // ===== LiteLLM Specific ===== - - get litellmServerUrlInput() { - return this.page.getByTestId('litellm-server-url'); - } - - get litellmApiKeyInput() { - return this.page.getByTestId('litellm-api-key'); - } - - // ===== OpenRouter Specific ===== - - get openrouterFetchModelsButton() { - return this.page.getByRole('button', { name: /Fetch Models|Refresh/ }); - } - - // ===== Debug Mode ===== - - get debugModeToggle() { - return this.page.getByTestId('settings-debug-toggle'); - } - - // ===== Dialog ===== - - get settingsDialog() { - return this.page.getByTestId('settings-dialog'); - } - - get doneButton() { - return this.page.getByTestId('settings-done-button'); - } - - get closeWarning() { - return this.page.getByText('No provider ready'); - } - - get closeAnywayButton() { - return this.page.getByRole('button', { name: 'Close Anyway' }); - } - - get sidebarSettingsButton() { - return this.page.getByTestId('sidebar-settings-button'); - } - - // ===== Actions ===== - - async navigateToSettings() { - await this.sidebarSettingsButton.click(); - await this.settingsDialog.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }); - } - - async selectProvider(providerId: string) { - await this.getProviderCard(providerId).click(); - // Wait for panel to appear - await this.page.waitForTimeout(300); - } - - async searchProvider(query: string) { - await this.providerSearchInput.fill(query); - } - - async clearSearch() { - await this.providerSearchInput.clear(); - } - - async toggleShowAll() { - const showAllVisible = await this.showAllButton.isVisible(); - if (showAllVisible) { - await this.showAllButton.click(); - } else { - await this.hideButton.click(); - } - } - - async enterApiKey(key: string) { - await this.apiKeyInput.fill(key); - } - - async clickConnect() { - await this.connectButton.click(); - } - - async clickDisconnect() { - await this.disconnectButton.click(); - } - - async selectModel(modelId: string) { - await this.modelSelector.selectOption(modelId); - } - - async toggleDebugMode() { - await this.debugModeToggle.click(); - } - - async closeDialog() { - await this.doneButton.click(); - } - - async pressEscapeToClose() { - await this.page.keyboard.press('Escape'); - } - - // Bedrock specific actions - async selectBedrockAccessKeyTab() { - await this.bedrockAccessKeyTab.click(); - } - - async selectBedrockAwsProfileTab() { - await this.bedrockAwsProfileTab.click(); - } - - async enterBedrockAccessKeyCredentials(accessKeyId: string, secretKey: string, sessionToken?: string) { - await this.bedrockAccessKeyIdInput.fill(accessKeyId); - await this.bedrockSecretKeyInput.fill(secretKey); - if (sessionToken) { - await this.bedrockSessionTokenInput.fill(sessionToken); - } - } - - async enterBedrockProfileCredentials(profileName: string) { - await this.bedrockProfileNameInput.fill(profileName); - } - - async selectBedrockRegion(region: string) { - await this.bedrockRegionSelect.selectOption(region); - } - - // Ollama specific actions - async enterOllamaServerUrl(url: string) { - await this.ollamaServerUrlInput.fill(url); - } - - // LiteLLM specific actions - async enterLiteLLMServerUrl(url: string) { - await this.litellmServerUrlInput.fill(url); - } - - async enterLiteLLMApiKey(key: string) { - await this.litellmApiKeyInput.fill(key); - } -} diff --git a/openwork-memos-integration/apps/desktop/e2e/playwright.config.ts b/openwork-memos-integration/apps/desktop/e2e/playwright.config.ts deleted file mode 100644 index 29ea63c26..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/playwright.config.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { defineConfig } from '@playwright/test'; - -export default defineConfig({ - testDir: './specs', - outputDir: './test-results', - - // Serial execution (Electron single-instance) - workers: 1, - fullyParallel: false, - - // Timeouts - timeout: 60000, - expect: { - timeout: 10000, - toHaveScreenshot: { maxDiffPixels: 100, threshold: 0.2 } - }, - - // Retry on CI - retries: process.env.CI ? 2 : 0, - - // Reporters (paths relative to config file location) - reporter: [ - ['html', { outputFolder: './html-report' }], - ['json', { outputFile: './test-results.json' }], - ['list'] - ], - - use: { - screenshot: 'only-on-failure', - video: 'retain-on-failure', - trace: 'retain-on-failure', - }, - - projects: [ - { - name: 'electron-fast', - testMatch: /.*(home|execution|settings|settings-bedrock)\.spec\.ts/, - timeout: 60000, - }, - { - name: 'electron-integration', - testMatch: /.*integration\.spec\.ts/, - timeout: 120000, - retries: 0, - } - ], -}); diff --git a/openwork-memos-integration/apps/desktop/e2e/specs/execution.spec.ts b/openwork-memos-integration/apps/desktop/e2e/specs/execution.spec.ts deleted file mode 100644 index 91f533081..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/specs/execution.spec.ts +++ /dev/null @@ -1,618 +0,0 @@ -import { test, expect } from '../fixtures'; -import { HomePage, ExecutionPage } from '../pages'; -import { captureForAI } from '../utils'; -import { TEST_TIMEOUTS, TEST_SCENARIOS } from '../config'; - -test.describe('Execution Page', () => { - test('should display running state with thinking indicator', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit success keyword - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - await homePage.submitTask(); - - // Wait for navigation to execution page - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for either thinking indicator or status badge to appear - await Promise.race([ - executionPage.thinkingIndicator.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - executionPage.statusBadge.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - ]); - - // Capture running state - await captureForAI( - window, - 'execution-running', - 'thinking-indicator', - [ - 'Execution page is loaded', - 'Thinking indicator is visible', - 'Task is in running state', - 'UI shows active processing' - ] - ); - - // Assert thinking indicator or status badge is visible - // Note: It might complete quickly in mock mode - const thinkingVisible = await executionPage.thinkingIndicator.isVisible(); - const statusVisible = await executionPage.statusBadge.isVisible(); - - // Either thinking indicator or status badge should be visible - expect(thinkingVisible || statusVisible).toBe(true); - }); - - test('should display completed state with success badge', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit success keyword - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for completion - await executionPage.waitForComplete(); - - // Capture completed state - await captureForAI( - window, - 'execution-completed', - 'success-badge', - [ - 'Status badge shows completed state', - 'Task completed successfully', - 'Success indicator is visible', - 'No error messages displayed' - ] - ); - - // Assert status badge is visible - await expect(executionPage.statusBadge).toBeVisible(); - - // Verify it's showing a success/completed state - const badgeText = await executionPage.statusBadge.textContent(); - expect(badgeText?.toLowerCase()).toMatch(/complete|success|done/i); - }); - - test('should display tool usage during execution', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit tool keyword - await homePage.enterTask(TEST_SCENARIOS.WITH_TOOL.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for either thinking indicator or status badge to appear (tool execution started) - await Promise.race([ - executionPage.thinkingIndicator.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - executionPage.statusBadge.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - ]); - - // Capture tool usage state - await captureForAI( - window, - 'execution-tool-usage', - 'tool-display', - [ - 'Tool usage is displayed', - 'Tool name or icon is visible', - 'Tool execution is shown to user', - 'UI clearly indicates tool interaction' - ] - ); - - // Look for tool-related UI elements - const pageContent = await window.textContent('body'); - - // Wait for completion to see full tool usage - await executionPage.waitForComplete(); - - // Capture final state with tools - await captureForAI( - window, - 'execution-tool-usage', - 'tools-complete', - [ - 'Tools were executed during task', - 'Tool results are displayed', - 'Complete history of tool usage visible' - ] - ); - - // Assert page contains tool-related content - expect(pageContent).toBeTruthy(); - }); - - test('should display permission modal with allow/deny buttons', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit permission keyword - await homePage.enterTask(TEST_SCENARIOS.PERMISSION.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for permission modal to appear - await executionPage.permissionModal.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.PERMISSION_MODAL }); - - // Capture permission modal - await captureForAI( - window, - 'execution-permission', - 'modal-visible', - [ - 'Permission modal is displayed', - 'Allow button is visible and clickable', - 'Deny button is visible and clickable', - 'Modal clearly shows what permission is being requested', - 'User can make a choice' - ] - ); - - // Assert permission modal and buttons are visible - await expect(executionPage.permissionModal).toBeVisible(); - await expect(executionPage.allowButton).toBeVisible(); - await expect(executionPage.denyButton).toBeVisible(); - - // Verify buttons are enabled - await expect(executionPage.allowButton).toBeEnabled(); - await expect(executionPage.denyButton).toBeEnabled(); - }); - - test('should handle permission allow action', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit permission keyword - await homePage.enterTask(TEST_SCENARIOS.PERMISSION.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for permission modal and allow button to be ready - await executionPage.permissionModal.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.PERMISSION_MODAL }); - await executionPage.allowButton.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Click allow button - await executionPage.allowButton.click(); - - // Capture state after allowing - await captureForAI( - window, - 'execution-permission', - 'after-allow', - [ - 'Permission modal is dismissed', - 'Task continues execution', - 'Permission was granted successfully' - ] - ); - - // Modal should disappear after clicking allow - await expect(executionPage.permissionModal).not.toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Note: Mock flow doesn't simulate continuation after permission grant, - // so we just verify the modal dismissed (the core allow functionality). - // In real usage, the task would continue after permission is granted. - }); - - test('should handle permission deny action', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit permission keyword - await homePage.enterTask(TEST_SCENARIOS.PERMISSION.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for permission modal and deny button to be ready - await executionPage.permissionModal.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.PERMISSION_MODAL }); - await executionPage.denyButton.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Click deny button - await executionPage.denyButton.click(); - - // Capture state after denying - await captureForAI( - window, - 'execution-permission', - 'after-deny', - [ - 'Permission modal is dismissed', - 'Task handles denied permission gracefully', - 'Appropriate message shown to user' - ] - ); - - // Modal should disappear - await expect(executionPage.permissionModal).not.toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for status badge to show any state after denial (not necessarily completion) - await executionPage.statusBadge.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.PERMISSION_MODAL }); - - // Capture final state after denial - await captureForAI( - window, - 'execution-permission', - 'deny-result', - [ - 'Task responded to permission denial', - 'No crashes or errors', - 'User feedback is clear' - ] - ); - }); - - test('should display error state when task fails', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit error keyword - await homePage.enterTask(TEST_SCENARIOS.ERROR.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for task to complete with error state - await executionPage.waitForComplete(); - - // Capture error state - await captureForAI( - window, - 'execution-error', - 'error-displayed', - [ - 'Error state is clearly visible', - 'Error message or indicator is shown', - 'User understands task failed', - 'Error handling is graceful' - ] - ); - - // Look for error indicators in the UI - const pageContent = await window.textContent('body'); - const statusBadgeVisible = await executionPage.statusBadge.isVisible(); - - // Check if status badge shows error state - if (statusBadgeVisible) { - const badgeText = await executionPage.statusBadge.textContent(); - await captureForAI( - window, - 'execution-error', - 'error-badge', - [ - 'Status badge indicates error/failure', - `Badge shows: ${badgeText}` - ] - ); - } - - // Assert some error indication exists - expect(pageContent).toBeTruthy(); - }); - - test('should display interrupted state when task is stopped', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit interrupt keyword - await homePage.enterTask(TEST_SCENARIOS.INTERRUPTED.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for task to reach interrupted state - await executionPage.waitForComplete(); - - // Capture interrupted state - await captureForAI( - window, - 'execution-interrupted', - 'interrupted-displayed', - [ - 'Interrupted state is visible', - 'Task shows it was stopped', - 'UI clearly indicates interruption', - 'User understands task did not complete normally' - ] - ); - - // Check for interrupted status - const statusBadgeVisible = await executionPage.statusBadge.isVisible(); - - if (statusBadgeVisible) { - const badgeText = await executionPage.statusBadge.textContent(); - await captureForAI( - window, - 'execution-interrupted', - 'interrupted-badge', - [ - 'Status badge shows interrupted/stopped state', - `Badge shows: ${badgeText}` - ] - ); - } - }); - - test('should allow canceling a running task', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit success keyword - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for either cancel or stop button to be available - try { - await Promise.race([ - executionPage.cancelButton.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - executionPage.stopButton.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - ]); - - const cancelVisible = await executionPage.cancelButton.isVisible(); - const stopVisible = await executionPage.stopButton.isVisible(); - - // Capture before cancel - await captureForAI( - window, - 'execution-cancel', - 'before-cancel', - [ - 'Cancel/Stop button is visible', - 'Task is running and can be cancelled' - ] - ); - - // Click the cancel or stop button - if (cancelVisible) { - await executionPage.cancelButton.click(); - } else if (stopVisible) { - await executionPage.stopButton.click(); - } - - // Wait for task to reach cancelled state - await executionPage.waitForComplete(); - - // Capture after cancel - await captureForAI( - window, - 'execution-cancel', - 'after-cancel', - [ - 'Task was cancelled/stopped', - 'UI reflects cancelled state', - 'Cancellation was successful' - ] - ); - } catch { - // Task may have completed before we could cancel - that's acceptable - } - }); - - test('should display task output and messages', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit tool keyword to get more output - await homePage.enterTask(TEST_SCENARIOS.WITH_TOOL.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for task execution to start (either thinking indicator or status badge) - await Promise.race([ - executionPage.thinkingIndicator.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - executionPage.statusBadge.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }), - ]); - - // Capture task output - await captureForAI( - window, - 'execution-output', - 'task-messages', - [ - 'Task output is visible', - 'Messages from task execution are displayed', - 'Output format is clear and readable', - 'User can follow task progress' - ] - ); - - // Wait for completion - await executionPage.waitForComplete(); - - // Capture final output - await captureForAI( - window, - 'execution-output', - 'final-output', - [ - 'Complete task output is visible', - 'All messages and results are displayed', - 'Output is well-formatted' - ] - ); - - // Assert page has content - const pageContent = await window.textContent('body'); - expect(pageContent).toBeTruthy(); - expect(pageContent.length).toBeGreaterThan(0); - }); - - test('should handle follow-up input after task completion', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start and complete a task with explicit success keyword - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - await homePage.submitTask(); - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - await executionPage.waitForComplete(); - - // Wait for follow-up input to be ready (may not appear in all mock scenarios) - try { - await executionPage.followUpInput.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture follow-up input state - await captureForAI( - window, - 'execution-follow-up', - 'follow-up-visible', - [ - 'Follow-up input is visible after task completion', - 'User can enter additional instructions', - 'Follow-up feature is accessible' - ] - ); - - // Try typing in follow-up input - await executionPage.followUpInput.fill('Follow up task'); - - // Capture with follow-up text - await captureForAI( - window, - 'execution-follow-up', - 'follow-up-filled', - [ - 'Follow-up text is entered', - 'Input is ready to submit', - 'User can continue conversation' - ] - ); - - await expect(executionPage.followUpInput).toHaveValue('Follow up task'); - } catch { - // Follow-up input may not appear in all mock scenarios - that's acceptable - } - }); - - test('should display question modal with selectable options', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit question keyword - await homePage.enterTask(TEST_SCENARIOS.QUESTION.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for question modal to appear - await executionPage.permissionModal.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.PERMISSION_MODAL }); - - // Capture question modal - await captureForAI( - window, - 'execution-question', - 'modal-visible', - [ - 'Question modal is displayed', - 'Question text is shown', - 'Option buttons are visible', - 'Submit button is visible but disabled until option selected', - ] - ); - - // Assert modal is visible with options - await expect(executionPage.permissionModal).toBeVisible(); - await expect(executionPage.questionOptions).toHaveCount(3); // Option A, Option B, Other - - // Submit button should be disabled (no option selected yet) - await expect(executionPage.allowButton).toBeDisabled(); - await expect(executionPage.denyButton).toBeVisible(); - }); - - test('should handle question option selection and submit', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Start a task with explicit question keyword - await homePage.enterTask(TEST_SCENARIOS.QUESTION.keyword); - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Wait for question modal to appear - await executionPage.permissionModal.waitFor({ state: 'visible', timeout: TEST_TIMEOUTS.PERMISSION_MODAL }); - - // Select first option (Option A) - await executionPage.selectQuestionOption(0); - - // Capture after selection - await captureForAI( - window, - 'execution-question', - 'option-selected', - [ - 'Option A is selected', - 'Submit button is now enabled', - 'Selected option is highlighted', - ] - ); - - // Submit button should now be enabled - await expect(executionPage.allowButton).toBeEnabled(); - - // Click submit - await executionPage.allowButton.click(); - - // Modal should disappear - await expect(executionPage.permissionModal).not.toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture after submission - await captureForAI( - window, - 'execution-question', - 'after-submit', - [ - 'Question modal is dismissed', - 'Response was submitted successfully', - ] - ); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/e2e/specs/home.spec.ts b/openwork-memos-integration/apps/desktop/e2e/specs/home.spec.ts deleted file mode 100644 index 19c875d91..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/specs/home.spec.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { test, expect } from '../fixtures'; -import { HomePage } from '../pages'; -import { captureForAI } from '../utils'; -import { TEST_TIMEOUTS, TEST_SCENARIOS } from '../config'; - -test.describe('Home Page', () => { - test('should load home page with title', async ({ window }) => { - const homePage = new HomePage(window); - - // Capture initial home page state - await captureForAI( - window, - 'home-page-load', - 'initial-load', - [ - 'Title "What will you accomplish today?" is visible', - 'Page layout is correct', - 'All UI elements are rendered' - ] - ); - - // Assert title is visible and has correct text - await expect(homePage.title).toBeVisible(); - await expect(homePage.title).toHaveText('What will you accomplish today?'); - }); - - test('should display task input and submit button', async ({ window }) => { - const homePage = new HomePage(window); - - // Capture task input area - await captureForAI( - window, - 'home-page-input', - 'task-input-visible', - [ - 'Task input textarea is visible', - 'Submit button is visible', - 'Input area is ready for user interaction' - ] - ); - - // Assert task input is visible and enabled - await expect(homePage.taskInput).toBeVisible(); - await expect(homePage.submitButton).toBeVisible(); - await expect(homePage.taskInput).toBeEnabled(); - // Submit button is disabled when input is empty (correct behavior) - await expect(homePage.submitButton).toBeDisabled(); - }); - - test('should allow typing in task input', async ({ window }) => { - const homePage = new HomePage(window); - - const testTask = 'Write a hello world program'; - await homePage.enterTask(testTask); - - // Capture filled task input - await captureForAI( - window, - 'home-page-input', - 'task-input-filled', - [ - 'Task input contains typed text', - 'Text is clearly visible', - 'Submit button is enabled with text' - ] - ); - - // Assert input value matches what was typed - await expect(homePage.taskInput).toHaveValue(testTask); - // Button should now be enabled - await expect(homePage.submitButton).toBeEnabled(); - }); - - test('should display example cards', async ({ window }) => { - const homePage = new HomePage(window); - - // Capture example cards (examples are expanded by default) - await captureForAI( - window, - 'home-page-examples', - 'example-cards-visible', - [ - 'At least 3 example cards are visible', - 'Example cards are properly styled', - 'Cards show task examples to users' - ] - ); - - // Assert at least 3 example cards are visible - const exampleCard0 = homePage.getExampleCard(0); - const exampleCard1 = homePage.getExampleCard(1); - const exampleCard2 = homePage.getExampleCard(2); - - await expect(exampleCard0).toBeVisible(); - await expect(exampleCard1).toBeVisible(); - await expect(exampleCard2).toBeVisible(); - }); - - test('should fill input when clicking an example card', async ({ window }) => { - const homePage = new HomePage(window); - - // Click the first example card (examples are expanded by default) - const exampleCard0 = homePage.getExampleCard(0); - await exampleCard0.click(); - - // Wait for input to be filled with example text - await window.waitForFunction( - () => { - const input = document.querySelector('[data-testid="task-input-textarea"]') as HTMLTextAreaElement; - return input && input.value.length > 0; - }, - { timeout: TEST_TIMEOUTS.NAVIGATION } - ); - - // Capture state after clicking example - await captureForAI( - window, - 'home-page-examples', - 'example-card-clicked', - [ - 'Task input is filled with example text', - 'Input value matches the example card content', - 'User can now submit the pre-filled task' - ] - ); - - // Assert input is no longer empty - const inputValue = await homePage.taskInput.inputValue(); - expect(inputValue.length).toBeGreaterThan(0); - }); - - test('should navigate to execution page when submitting a task', async ({ window }) => { - const homePage = new HomePage(window); - - // Enter a task with explicit test keyword - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - - // Wait for button to be enabled - await expect(homePage.submitButton).toBeEnabled(); - - // Capture before submission - await captureForAI( - window, - 'home-page-submit', - 'before-submit', - [ - 'Task is entered in input field', - 'Submit button is ready to click' - ] - ); - - // Submit the task - await homePage.submitTask(); - - // Wait for navigation - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture after navigation - await captureForAI( - window, - 'home-page-submit', - 'after-submit-navigation', - [ - 'URL changed to execution page', - 'Navigation was successful', - 'Execution page is loading' - ] - ); - - // Assert URL changed to execution page - expect(window.url()).toContain('#/execution'); - }); - - test('should handle empty input - submit disabled', async ({ window }) => { - const homePage = new HomePage(window); - - // Capture empty input state - await captureForAI( - window, - 'home-page-validation', - 'empty-input', - [ - 'Task input is empty', - 'Submit button is disabled', - 'User cannot submit an empty task' - ] - ); - - // Submit button should be disabled when input is empty - await expect(homePage.submitButton).toBeDisabled(); - }); - - test('should support multi-line task input', async ({ window }) => { - const homePage = new HomePage(window); - - // Enter a multi-line task - const multiLineTask = 'Line 1\nLine 2\nLine 3'; - await homePage.enterTask(multiLineTask); - - // Capture multi-line input - await captureForAI( - window, - 'home-page-input', - 'multi-line-task', - [ - 'Task input supports multiple lines', - 'All lines are visible in the textarea', - 'Textarea expands to show content' - ] - ); - - // Assert all lines are preserved - await expect(homePage.taskInput).toHaveValue(multiLineTask); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/e2e/specs/settings-bedrock.spec.ts b/openwork-memos-integration/apps/desktop/e2e/specs/settings-bedrock.spec.ts deleted file mode 100644 index d52a1836b..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/specs/settings-bedrock.spec.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { test, expect } from '../fixtures'; -import { SettingsPage } from '../pages'; -import { captureForAI } from '../utils'; -import { TEST_TIMEOUTS } from '../config'; - -test.describe('Settings - Amazon Bedrock', () => { - test('should display Bedrock provider card', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - const bedrockCard = settingsPage.getProviderCard('bedrock'); - await expect(bedrockCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'settings-bedrock', - 'provider-card-visible', - ['Bedrock provider card is visible', 'User can select Bedrock'] - ); - }); - - test('should show Bedrock credential form when selected', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Bedrock provider card - await settingsPage.selectProvider('bedrock'); - - // Verify Access Key tab is visible (default) - await expect(settingsPage.bedrockAccessKeyTab).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - await expect(settingsPage.bedrockAwsProfileTab).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'settings-bedrock', - 'credential-form-visible', - ['Bedrock credential form is visible', 'Auth tabs are shown'] - ); - }); - - test('should switch between Access Key and AWS Profile tabs', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Bedrock provider card - await settingsPage.selectProvider('bedrock'); - - // Default is Access Key - verify inputs - await expect(settingsPage.bedrockAccessKeyIdInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - await expect(settingsPage.bedrockSecretKeyInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Switch to AWS Profile tab - await settingsPage.selectBedrockAwsProfileTab(); - await expect(settingsPage.bedrockProfileNameInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - await expect(settingsPage.bedrockAccessKeyIdInput).not.toBeVisible(); - - // Switch back to Access Key - await settingsPage.selectBedrockAccessKeyTab(); - await expect(settingsPage.bedrockAccessKeyIdInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'settings-bedrock', - 'tab-switching', - ['Can switch between auth tabs', 'Form fields update correctly'] - ); - }); - - test('should allow typing in Bedrock access key fields', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Bedrock provider card - await settingsPage.selectProvider('bedrock'); - - const testAccessKey = 'AKIAIOSFODNN7EXAMPLE'; - const testSecretKey = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; - - await settingsPage.bedrockAccessKeyIdInput.fill(testAccessKey); - await settingsPage.bedrockSecretKeyInput.fill(testSecretKey); - - await expect(settingsPage.bedrockAccessKeyIdInput).toHaveValue(testAccessKey); - await expect(settingsPage.bedrockSecretKeyInput).toHaveValue(testSecretKey); - - // Verify region selector is visible - await expect(settingsPage.bedrockRegionSelect).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'settings-bedrock', - 'access-key-fields-filled', - ['Access key fields accept input', 'Region selector is available'] - ); - }); - - test('should allow typing in Bedrock profile fields', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Bedrock provider card - await settingsPage.selectProvider('bedrock'); - - // Switch to AWS Profile tab - await settingsPage.selectBedrockAwsProfileTab(); - - const testProfile = 'my-aws-profile'; - - await settingsPage.bedrockProfileNameInput.clear(); - await settingsPage.bedrockProfileNameInput.fill(testProfile); - - await expect(settingsPage.bedrockProfileNameInput).toHaveValue(testProfile); - - // Verify region selector is visible - await expect(settingsPage.bedrockRegionSelect).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'settings-bedrock', - 'profile-fields-filled', - ['Profile field accepts input', 'Region selector is available'] - ); - }); - - test('should have Connect button for Bedrock credentials', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Bedrock provider card - await settingsPage.selectProvider('bedrock'); - - // Verify Connect button is visible - await expect(settingsPage.connectButton).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'settings-bedrock', - 'connect-button-visible', - ['Connect button is visible', 'User can connect to Bedrock'] - ); - }); - - test('should display region selector for Bedrock', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Bedrock provider card - await settingsPage.selectProvider('bedrock'); - - // Verify region selector is visible - await expect(settingsPage.bedrockRegionSelect).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'settings-bedrock', - 'region-selector-visible', - ['Region selector is visible', 'User can select AWS region'] - ); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/e2e/specs/settings-providers.spec.ts b/openwork-memos-integration/apps/desktop/e2e/specs/settings-providers.spec.ts deleted file mode 100644 index 6dc99006d..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/specs/settings-providers.spec.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { test, expect } from '../fixtures'; -import { SettingsPage } from '../pages'; -import { captureForAI } from '../utils'; -import { TEST_TIMEOUTS } from '../config'; - -/** - * Comprehensive E2E tests for all provider settings permutations - * - * Provider order (4 columns per row): - * Row 1: Anthropic, OpenAI, Google (Gemini), xAI - * Row 2: DeepSeek, Z-AI, Ollama, Bedrock - * Row 3: OpenRouter, LiteLLM - */ -test.describe('Settings - All Providers', () => { - // ===== GOOGLE (GEMINI) PROVIDER ===== - test.describe('Google (Gemini) Provider', () => { - test('should display Google provider card in first row', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Google is in first 4, should be visible without Show All - const googleCard = settingsPage.getProviderCard('google'); - await expect(googleCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI(window, 'settings-google', 'provider-card-visible', [ - 'Google (Gemini) provider card is visible', - 'Card is in first row (no Show All needed)', - ]); - }); - - test('should show API key form when selecting Google', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('google'); - await expect(settingsPage.apiKeyInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI(window, 'settings-google', 'api-key-form', [ - 'Google API key input is visible', - 'User can enter Gemini API key', - ]); - }); - - test('should allow typing Google API key', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('google'); - const testKey = 'AIzaSyTest_GoogleKey_12345'; - await settingsPage.apiKeyInput.fill(testKey); - - await expect(settingsPage.apiKeyInput).toHaveValue(testKey); - - await captureForAI(window, 'settings-google', 'api-key-filled', [ - 'Google API key input accepts value', - 'Key format is displayed correctly', - ]); - }); - }); - - // ===== XAI PROVIDER ===== - test.describe('xAI Provider', () => { - test('should display xAI provider card in first row', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // xAI is in first 4, should be visible without Show All - const xaiCard = settingsPage.getProviderCard('xai'); - await expect(xaiCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI(window, 'settings-xai', 'provider-card-visible', [ - 'xAI provider card is visible', - 'Card is in first row (no Show All needed)', - ]); - }); - - test('should show API key form when selecting xAI', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('xai'); - - await expect(settingsPage.apiKeyInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI(window, 'settings-xai', 'api-key-form', [ - 'xAI API key input is visible', - 'User can enter xAI API key', - ]); - }); - - test('should allow typing xAI API key', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('xai'); - - const testKey = 'xai-test-key-67890'; - await settingsPage.apiKeyInput.fill(testKey); - - await expect(settingsPage.apiKeyInput).toHaveValue(testKey); - - await captureForAI(window, 'settings-xai', 'api-key-filled', [ - 'xAI API key input accepts value', - 'Key format is displayed correctly', - ]); - }); - }); - - // ===== OPENAI PROVIDER ===== - test.describe('OpenAI Provider', () => { - test('should display OpenAI provider card in first row', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // OpenAI is in first 4 - const openaiCard = settingsPage.getProviderCard('openai'); - await expect(openaiCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI(window, 'settings-openai', 'provider-card-visible', [ - 'OpenAI provider card is visible', - 'Card is in first row', - ]); - }); - - test('should show API key form when selecting OpenAI', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('openai'); - await expect(settingsPage.apiKeyInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI(window, 'settings-openai', 'api-key-form', [ - 'OpenAI API key input is visible', - ]); - }); - - test('should allow typing OpenAI API key', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('openai'); - const testKey = 'sk-test-openai-key-12345'; - await settingsPage.apiKeyInput.fill(testKey); - - await expect(settingsPage.apiKeyInput).toHaveValue(testKey); - - await captureForAI(window, 'settings-openai', 'api-key-filled', [ - 'OpenAI API key input accepts value', - ]); - }); - }); - - // ===== GRID LAYOUT TESTS ===== - test.describe('Provider Grid Layout', () => { - test('should display 4 providers in collapsed view', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // First 4 providers should be visible - await expect(settingsPage.getProviderCard('anthropic')).toBeVisible(); - await expect(settingsPage.getProviderCard('openai')).toBeVisible(); - await expect(settingsPage.getProviderCard('google')).toBeVisible(); - await expect(settingsPage.getProviderCard('xai')).toBeVisible(); - - // 5th provider (deepseek) should NOT be visible in collapsed view - await expect(settingsPage.getProviderCard('deepseek')).not.toBeVisible(); - - await captureForAI(window, 'settings-grid', 'collapsed-view', [ - 'First 4 providers visible in collapsed view', - 'Grid uses 4-column layout', - ]); - }); - - test('should expand to show all 10 providers', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.toggleShowAll(); - - // All 10 providers should be visible - const allProviders = [ - 'anthropic', 'openai', 'google', 'xai', - 'deepseek', 'zai', 'ollama', 'bedrock', - 'openrouter', 'litellm' - ]; - - for (const providerId of allProviders) { - await expect(settingsPage.getProviderCard(providerId)).toBeVisible(); - } - - await captureForAI(window, 'settings-grid', 'expanded-view', [ - 'All 10 providers visible in expanded view', - 'Grid shows 3 rows of providers', - ]); - }); - - test('should toggle between Show All and Hide', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Initial state - Show All button visible - await expect(settingsPage.showAllButton).toBeVisible(); - - // Click Show All - await settingsPage.toggleShowAll(); - await expect(settingsPage.hideButton).toBeVisible(); - - // Click Hide - await settingsPage.toggleShowAll(); - await expect(settingsPage.showAllButton).toBeVisible(); - - // DeepSeek should be hidden again (5th provider) - await expect(settingsPage.getProviderCard('deepseek')).not.toBeVisible(); - - await captureForAI(window, 'settings-grid', 'toggle-behavior', [ - 'Show All/Hide toggle works correctly', - 'Grid collapses back to 4 providers', - ]); - }); - }); - - // ===== PROVIDER SELECTION FLOW ===== - test.describe('Provider Selection Flow', () => { - test('should switch between providers in first row', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Select Anthropic - await settingsPage.selectProvider('anthropic'); - await expect(settingsPage.apiKeyInput).toBeVisible(); - - // Switch to OpenAI - await settingsPage.selectProvider('openai'); - await expect(settingsPage.apiKeyInput).toBeVisible(); - - // Switch to Google - await settingsPage.selectProvider('google'); - await expect(settingsPage.apiKeyInput).toBeVisible(); - - await captureForAI(window, 'settings-selection', 'switch-providers', [ - 'Can switch between providers', - 'Settings panel updates for each provider', - ]); - }); - - test('should switch from classic provider to custom provider', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Select Anthropic (classic API key provider) - await settingsPage.selectProvider('anthropic'); - await expect(settingsPage.apiKeyInput).toBeVisible(); - - // Expand and switch to Ollama (URL-based provider) - await settingsPage.toggleShowAll(); - await settingsPage.selectProvider('ollama'); - await expect(settingsPage.ollamaServerUrlInput).toBeVisible(); - - // API key input should not be visible for Ollama - await expect(settingsPage.apiKeyInput).not.toBeVisible(); - - await captureForAI(window, 'settings-selection', 'switch-provider-types', [ - 'Can switch from API key to URL-based provider', - 'Form updates correctly for different provider types', - ]); - }); - - test('should switch from URL provider back to classic provider', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Expand and select Ollama first - await settingsPage.toggleShowAll(); - await settingsPage.selectProvider('ollama'); - await expect(settingsPage.ollamaServerUrlInput).toBeVisible(); - - // Switch back to Anthropic - await settingsPage.selectProvider('anthropic'); - await expect(settingsPage.apiKeyInput).toBeVisible(); - - // Ollama URL should not be visible - await expect(settingsPage.ollamaServerUrlInput).not.toBeVisible(); - - await captureForAI(window, 'settings-selection', 'switch-back-to-classic', [ - 'Can switch from URL provider back to classic', - 'Form updates correctly', - ]); - }); - }); - - // ===== PROVIDER SETTINGS PANEL ===== - test.describe('Provider Settings Panel', () => { - test('should display provider header with logo and name', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('anthropic'); - - // Verify settings panel is visible - const settingsPanel = window.getByTestId('provider-settings-panel'); - await expect(settingsPanel).toBeVisible(); - - await captureForAI(window, 'settings-panel', 'header-visible', [ - 'Provider settings panel is visible', - 'Header shows provider logo and name', - ]); - }); - - test('should show Connect button when not connected', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('anthropic'); - await expect(settingsPage.connectButton).toBeVisible(); - - await captureForAI(window, 'settings-panel', 'connect-button', [ - 'Connect button is visible for disconnected provider', - ]); - }); - - test('should show help link for API key providers', async ({ window }) => { - const settingsPage = new SettingsPage(window); - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - await settingsPage.selectProvider('anthropic'); - await expect(settingsPage.apiKeyHelpLink).toBeVisible(); - - await captureForAI(window, 'settings-panel', 'help-link', [ - 'Help link "How can I find it?" is visible', - ]); - }); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/e2e/specs/settings.spec.ts b/openwork-memos-integration/apps/desktop/e2e/specs/settings.spec.ts deleted file mode 100644 index 46fe5a1bc..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/specs/settings.spec.ts +++ /dev/null @@ -1,750 +0,0 @@ -import { test, expect } from '../fixtures'; -import { SettingsPage, HomePage, ExecutionPage } from '../pages'; -import { captureForAI } from '../utils'; -import { TEST_TIMEOUTS, TEST_SCENARIOS } from '../config'; - -test.describe('Settings Dialog', () => { - test('should open settings dialog when clicking settings button', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - // Fixture already handles hydration, just ensure DOM is ready - await window.waitForLoadState('domcontentloaded'); - - // Click the settings button in sidebar - await settingsPage.navigateToSettings(); - - // Capture settings dialog - await captureForAI( - window, - 'settings-dialog', - 'dialog-open', - [ - 'Settings dialog is visible', - 'Dialog contains provider grid', - 'User can interact with settings' - ] - ); - - // Verify dialog opened by checking for provider grid - await expect(settingsPage.providerGrid).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - }); - - test('should display provider grid with cards', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Verify provider grid is visible - await expect(settingsPage.providerGrid).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture provider grid - await captureForAI( - window, - 'settings-dialog', - 'provider-grid', - [ - 'Provider grid is visible', - 'Provider cards are displayed', - 'User can select a provider' - ] - ); - }); - - test('should use 4-column grid layout without horizontal scroll', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Wait for provider grid to be visible - await expect(settingsPage.providerGrid).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Get the settings dialog element - const settingsDialog = window.getByTestId('settings-dialog'); - - // Get the provider grid element - const providerGrid = settingsPage.providerGrid; - - // Check that settings dialog does NOT have horizontal scroll - const dialogOverflowX = await settingsDialog.evaluate((el) => { - const style = window.getComputedStyle(el); - return style.overflowX; - }); - - // Dialog should have auto or hidden overflow-x, not scroll - expect(['auto', 'hidden', 'visible']).toContain(dialogOverflowX); - - // Verify the grid uses 4-column layout (grid-cols-4) - const gridContainer = providerGrid.locator('.grid.grid-cols-4').first(); - await expect(gridContainer).toBeVisible(); - - // In collapsed view, first 4 providers should be visible - await expect(settingsPage.getProviderCard('anthropic')).toBeVisible(); - await expect(settingsPage.getProviderCard('openai')).toBeVisible(); - await expect(settingsPage.getProviderCard('google')).toBeVisible(); - await expect(settingsPage.getProviderCard('bedrock')).toBeVisible(); - - // 5th provider should NOT be visible in collapsed view - await expect(settingsPage.getProviderCard('deepseek')).not.toBeVisible(); - - // Capture for verification - await captureForAI( - window, - 'settings-dialog', - 'grid-layout', - [ - 'Settings dialog uses 4-column grid layout', - 'First 4 providers visible in collapsed view', - 'No horizontal scroll needed' - ] - ); - }); - - test('should display API key input when selecting a classic provider', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Select Anthropic provider (a classic provider requiring API key) - await settingsPage.selectProvider('anthropic'); - - // Scroll to API key section if needed - await settingsPage.apiKeyInput.scrollIntoViewIfNeeded(); - - // Verify API key input is visible - await expect(settingsPage.apiKeyInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture API key section - await captureForAI( - window, - 'settings-dialog', - 'api-key-section', - [ - 'API key input is visible', - 'User can enter an API key', - 'Input is accessible' - ] - ); - }); - - test('should allow typing in API key input', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Select Anthropic provider - await settingsPage.selectProvider('anthropic'); - - // Scroll to API key input - await settingsPage.apiKeyInput.scrollIntoViewIfNeeded(); - - // Type in API key input - const testKey = 'sk-ant-test-key-12345'; - await settingsPage.apiKeyInput.fill(testKey); - - // Verify value was entered - await expect(settingsPage.apiKeyInput).toHaveValue(testKey); - - // Capture filled state - await captureForAI( - window, - 'settings-dialog', - 'api-key-filled', - [ - 'API key input has value', - 'Input accepts text entry', - 'Value is correctly displayed' - ] - ); - }); - - test('should display debug mode toggle', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Debug toggle only shows when a provider is selected - select one first - await settingsPage.getProviderCard('anthropic').click(); - - // Scroll to debug toggle - await settingsPage.debugModeToggle.scrollIntoViewIfNeeded(); - - // Verify debug toggle is visible - await expect(settingsPage.debugModeToggle).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture debug section - await captureForAI( - window, - 'settings-dialog', - 'debug-section', - [ - 'Debug mode toggle is visible', - 'Toggle is clickable', - 'Developer settings are accessible' - ] - ); - }); - - test('should allow toggling debug mode', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Debug toggle only shows when a provider is selected - select one first - await settingsPage.getProviderCard('anthropic').click(); - - // Scroll to debug toggle - await settingsPage.debugModeToggle.scrollIntoViewIfNeeded(); - - // Capture initial state - await captureForAI( - window, - 'settings-dialog', - 'debug-before-toggle', - [ - 'Debug toggle in initial state', - 'Toggle is ready to click' - ] - ); - - // Click toggle - state change is immediate in React - await settingsPage.toggleDebugMode(); - - // Capture toggled state - await captureForAI( - window, - 'settings-dialog', - 'debug-after-toggle', - [ - 'Debug toggle state changed', - 'UI reflects new state' - ] - ); - }); - - test('should close dialog when pressing Escape', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Verify dialog is open - await expect(settingsPage.providerGrid).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Press Escape to close dialog - await window.keyboard.press('Escape'); - - // Dialog might show warning if no provider is ready, click Close Anyway if visible - const closeAnywayVisible = await settingsPage.closeAnywayButton.isVisible().catch(() => false); - if (closeAnywayVisible) { - await settingsPage.closeAnywayButton.click(); - } - - // Verify dialog closed (provider grid should not be visible) - await expect(settingsPage.providerGrid).not.toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture closed state - await captureForAI( - window, - 'settings-dialog', - 'dialog-closed', - [ - 'Dialog is closed', - 'Main app is visible again', - 'Settings are no longer shown' - ] - ); - }); - - test('should display DeepSeek provider card', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Verify DeepSeek provider card is visible - const deepseekCard = settingsPage.getProviderCard('deepseek'); - await expect(deepseekCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture provider selection area - await captureForAI( - window, - 'settings-dialog', - 'deepseek-provider-visible', - [ - 'DeepSeek provider card is visible in settings', - 'Provider card can be clicked', - 'User can select DeepSeek as their provider' - ] - ); - }); - - test('should allow selecting DeepSeek provider and entering API key', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click DeepSeek provider - await settingsPage.selectProvider('deepseek'); - - // Enter API key - const testKey = 'sk-deepseek-test-key-12345'; - await settingsPage.apiKeyInput.fill(testKey); - - // Verify value was entered - await expect(settingsPage.apiKeyInput).toHaveValue(testKey); - - // Capture filled state - await captureForAI( - window, - 'settings-dialog', - 'deepseek-api-key-filled', - [ - 'DeepSeek provider is selected', - 'API key input accepts DeepSeek key format', - 'Value is correctly displayed' - ] - ); - }); - - test('should display Z.AI provider card', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Verify Z.AI provider card is visible - const zaiCard = settingsPage.getProviderCard('zai'); - await expect(zaiCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture provider selection area - await captureForAI( - window, - 'settings-dialog', - 'zai-provider-visible', - [ - 'Z.AI provider card is visible in settings', - 'Provider card can be clicked', - 'User can select Z.AI as their provider' - ] - ); - }); - - test('should allow selecting Z.AI provider and entering API key', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Z.AI provider - await settingsPage.selectProvider('zai'); - - // Enter API key - const testKey = 'zai-test-api-key-67890'; - await settingsPage.apiKeyInput.fill(testKey); - - // Verify value was entered - await expect(settingsPage.apiKeyInput).toHaveValue(testKey); - - // Capture filled state - await captureForAI( - window, - 'settings-dialog', - 'zai-api-key-filled', - [ - 'Z.AI provider is selected', - 'API key input accepts Z.AI key format', - 'Value is correctly displayed' - ] - ); - }); - - test('should display all provider cards when Show All is clicked', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Verify provider cards are visible (using provider IDs) - const providerIds = ['anthropic', 'openai', 'openrouter', 'google', 'xai', 'deepseek', 'zai', 'bedrock', 'ollama', 'litellm']; - - for (const providerId of providerIds) { - const card = settingsPage.getProviderCard(providerId); - await expect(card).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - } - - // Capture all providers - await captureForAI( - window, - 'settings-dialog', - 'all-providers-visible', - [ - 'All provider cards are visible', - 'Provider grid shows complete selection', - 'User can select any provider' - ] - ); - }); - - test('should display OpenRouter provider card', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers (OpenRouter is not in first 6) - await settingsPage.toggleShowAll(); - - // Verify OpenRouter provider card is visible - const openrouterCard = settingsPage.getProviderCard('openrouter'); - await expect(openrouterCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture provider selection area - await captureForAI( - window, - 'settings-dialog', - 'openrouter-provider-visible', - [ - 'OpenRouter provider card is visible in settings', - 'Provider card can be clicked', - 'User can select OpenRouter as their provider' - ] - ); - }); - - test('should allow selecting OpenRouter provider and entering API key', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers (OpenRouter is not in first 6) - await settingsPage.toggleShowAll(); - - // Click OpenRouter provider - await settingsPage.selectProvider('openrouter'); - - // Enter API key - const testKey = 'sk-or-v1-test-key-12345'; - await settingsPage.apiKeyInput.fill(testKey); - - // Verify value was entered - await expect(settingsPage.apiKeyInput).toHaveValue(testKey); - - // Capture filled state - await captureForAI( - window, - 'settings-dialog', - 'openrouter-api-key-filled', - [ - 'OpenRouter provider is selected', - 'API key input accepts OpenRouter key format', - 'Value is correctly displayed' - ] - ); - }); - - test('should show LiteLLM provider card and settings', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click LiteLLM provider - await settingsPage.selectProvider('litellm'); - - // Verify LiteLLM server URL input is visible - await expect(settingsPage.litellmServerUrlInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture LiteLLM settings - await captureForAI( - window, - 'settings-dialog', - 'litellm-settings', - [ - 'LiteLLM provider is selected', - 'Server URL input is visible', - 'User can configure LiteLLM connection' - ] - ); - }); - - test('should show Ollama provider card and settings', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Click Ollama provider - await settingsPage.selectProvider('ollama'); - - // Verify Ollama server URL input is visible - await expect(settingsPage.ollamaServerUrlInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture Ollama settings - await captureForAI( - window, - 'settings-dialog', - 'ollama-settings', - [ - 'Ollama provider is selected', - 'Server URL input is visible', - 'User can configure Ollama connection' - ] - ); - }); - - test('should filter providers with search', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All first - await settingsPage.toggleShowAll(); - - // Search for "anthropic" - await settingsPage.searchProvider('anthropic'); - - // Anthropic should be visible - await expect(settingsPage.getProviderCard('anthropic')).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Other providers should not be visible - await expect(settingsPage.getProviderCard('openai')).not.toBeVisible(); - - // Capture filtered state - await captureForAI( - window, - 'settings-dialog', - 'provider-search', - [ - 'Search filters provider cards', - 'Only matching providers visible', - 'Search functionality works' - ] - ); - - // Clear search - await settingsPage.clearSearch(); - - // All providers should be visible again - await expect(settingsPage.getProviderCard('openai')).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - }); - - /** - * Regression test for: "Maximum update depth exceeded" infinite loop bug - * - * Bug: Execution.tsx called getAccomplish() on every render, creating a new - * object reference. This was used as a useEffect dependency, causing: - * render -> new accomplish -> useEffect runs -> setState -> render -> loop - * - * This test verifies Settings dialog opens correctly after a task completes. - */ - test('should open settings dialog after task completes without crashing', async ({ window }) => { - const homePage = new HomePage(window); - const executionPage = new ExecutionPage(window); - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Step 1: Start a task - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - await homePage.submitTask(); - - // Step 2: Wait for navigation to execution page - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Step 3: Wait for task to complete - await executionPage.waitForComplete(); - - // Verify task completed - await expect(executionPage.statusBadge).toBeVisible(); - - // Step 4: Open settings dialog - this is where the bug would cause infinite loop - // The test should NOT timeout here. If it does, the infinite loop bug is present. - await settingsPage.navigateToSettings(); - - // Step 5: Verify settings dialog opened successfully (no crash/freeze) - await expect(settingsPage.providerGrid).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Additional verification: can interact with the dialog - const dialogTitle = window.getByRole('heading', { name: 'Set up Openwork' }); - await expect(dialogTitle).toBeVisible(); - - // Capture successful state - await captureForAI( - window, - 'settings-dialog', - 'after-task-completion', - [ - 'Settings dialog opened successfully after task completion', - 'No infinite loop or crash occurred', - 'Dialog is fully functional' - ] - ); - }); - - /** - * Bug test: Green background should only show on active+ready provider - * - * Bug: Both isActive and isSelected were getting the same green background. - * Expected: Green background should ONLY show on the active provider that is - * connected AND has a model selected (isProviderReady). When clicking another - * provider to view its settings, it should NOT get the green background. - * - * In the E2E test environment, no provider is connected/ready, so we test that - * clicking to select a provider does NOT give it the green background. - */ - test('should only show green background on active ready provider, not on selected provider', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers including Z-AI - await settingsPage.toggleShowAll(); - - // Define color constants - const GREEN_BACKGROUND = 'rgb(233, 247, 231)'; // #e9f7e7 - for active+ready providers only - const DEFAULT_BACKGROUND = 'rgb(249, 248, 246)'; // #f9f8f6 - for unselected providers - - // Get the Anthropic card - const anthropicCard = settingsPage.getProviderCard('anthropic'); - await expect(anthropicCard).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // In E2E test environment, no provider is active+ready, so Anthropic should have default bg - const anthropicBgBefore = await anthropicCard.evaluate((el) => { - return window.getComputedStyle(el).backgroundColor; - }); - expect(anthropicBgBefore).toBe(DEFAULT_BACKGROUND); - - // Get the Z-AI card - const zaiCard = settingsPage.getProviderCard('zai'); - await expect(zaiCard).toBeVisible(); - - // Verify Z-AI has the default background before clicking - const zaiBgBefore = await zaiCard.evaluate((el) => { - return window.getComputedStyle(el).backgroundColor; - }); - expect(zaiBgBefore).toBe(DEFAULT_BACKGROUND); - - // Click on Z-AI to select it (but it's not connected/ready) - await settingsPage.selectProvider('zai'); - - // BUG TEST: Z-AI should NOT have the green background after being selected - // The bug was that isSelected triggered the green background, which is incorrect. - // Green background should ONLY appear for active+ready providers (isActive && isProviderReady). - // A selected-but-not-ready provider should only get a selection border, not green background. - const zaiBgAfter = await zaiCard.evaluate((el) => { - return window.getComputedStyle(el).backgroundColor; - }); - - // This assertion will FAIL if the bug exists (zai gets green background when selected) - // and PASS once the bug is fixed (zai keeps default background when selected) - expect(zaiBgAfter).toBe(DEFAULT_BACKGROUND); - - // Capture for verification - await captureForAI( - window, - 'settings-dialog', - 'green-background-bug-test', - [ - 'Selected but non-ready provider does not have green background', - 'Bug is fixed - isSelected does not trigger green background', - 'Only active+ready providers should have green background' - ] - ); - }); - - test('should enable debug mode and show debug panel on execution page', async ({ window }) => { - const homePage = new HomePage(window); - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Step 1: Open settings and toggle debug mode - await settingsPage.navigateToSettings(); - - // Debug toggle only shows when a provider is selected - select one first - await settingsPage.getProviderCard('anthropic').click(); - await expect(settingsPage.debugModeToggle).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - const toggleButton = settingsPage.debugModeToggle; - - // Check current state of toggle and ensure it's ON for the test - const initialBgClass = await toggleButton.getAttribute('class'); - const isInitiallyOff = initialBgClass?.includes('bg-muted'); - - if (isInitiallyOff) { - // Click to enable debug mode - await settingsPage.toggleDebugMode(); - } - - // Verify toggle is now in ON state - await expect(toggleButton).toHaveClass(/bg-primary/); - - // Verify warning message appears when debug is enabled - const warningMessage = window.getByText('Debug mode is enabled'); - await expect(warningMessage).toBeVisible(); - - // Step 2: Close settings (force close since no provider is set up) - await settingsPage.pressEscapeToClose(); - // If warning appears, click Close Anyway - const closeAnyway = settingsPage.closeAnywayButton; - if (await closeAnyway.isVisible({ timeout: 1000 }).catch(() => false)) { - await closeAnyway.click(); - } - - // Step 3: Start a task - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - await homePage.submitTask(); - - // Step 4: Wait for navigation to execution page - await window.waitForURL(/.*#\/execution.*/, { timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Step 5: Verify debug panel is visible on execution page - // This is the key assertion - debug mode toggle in settings should affect execution page - const debugPanel = window.getByTestId('debug-panel'); - await expect(debugPanel).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Capture the debug panel - await captureForAI( - window, - 'execution-page', - 'debug-panel-enabled', - [ - 'Debug panel is visible at bottom of execution page', - 'Debug mode was successfully enabled in settings', - 'Panel shows Debug Logs header' - ] - ); - }); - -}); diff --git a/openwork-memos-integration/apps/desktop/e2e/specs/task-launch-guard.spec.ts b/openwork-memos-integration/apps/desktop/e2e/specs/task-launch-guard.spec.ts deleted file mode 100644 index b7714f138..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/specs/task-launch-guard.spec.ts +++ /dev/null @@ -1,303 +0,0 @@ -import { test, expect } from '../fixtures'; -import { SettingsPage, HomePage } from '../pages'; -import { captureForAI } from '../utils'; -import { TEST_TIMEOUTS, TEST_SCENARIOS } from '../config'; - -/** - * Tests for the task launch guard functionality. - * - * The task launch guard prevents users from: - * 1. Starting a task without a ready provider (connected + model selected) - * 2. Closing the settings dialog without configuring a provider - */ -test.describe('Task Launch Guard', () => { - test('should display provider grid when opening settings', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Verify provider grid is visible - await expect(settingsPage.providerGrid).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Verify at least some provider cards are visible - await expect(settingsPage.getProviderCard('anthropic')).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - await expect(settingsPage.getProviderCard('openai')).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'task-launch-guard', - 'provider-grid-visible', - [ - 'Provider grid is displayed', - 'Provider cards are visible', - 'User can select a provider' - ] - ); - }); - - test('should show provider settings panel when selecting a provider', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Select Anthropic provider - await settingsPage.selectProvider('anthropic'); - - // Verify the settings panel for the provider is visible - const settingsPanel = window.getByTestId('provider-settings-panel'); - await expect(settingsPanel).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Verify API key input is shown - await expect(settingsPage.apiKeyInput).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'task-launch-guard', - 'provider-settings-panel', - [ - 'Provider settings panel is visible', - 'API key input is shown', - 'User can configure the provider' - ] - ); - }); - - test('should have Done button in settings dialog', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Verify Done button is visible - await expect(settingsPage.doneButton).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'task-launch-guard', - 'done-button-visible', - [ - 'Done button is visible in settings', - 'User can close settings dialog' - ] - ); - }); - - test('should display Close Anyway button when close warning appears', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Try to close with Done button - await settingsPage.doneButton.click(); - - // Check if warning or dialog close occurred - const closeAnywayVisible = await settingsPage.closeAnywayButton.isVisible().catch(() => false); - const dialogClosed = !(await settingsPage.settingsDialog.isVisible().catch(() => true)); - - if (closeAnywayVisible) { - // Warning appeared - verify Close Anyway button - await expect(settingsPage.closeAnywayButton).toBeVisible(); - - await captureForAI( - window, - 'task-launch-guard', - 'close-warning-visible', - [ - 'Close warning is displayed', - 'Close Anyway button is visible', - 'User is warned about missing provider' - ] - ); - } else if (dialogClosed) { - // Dialog closed - a provider must be ready (E2E mode may pre-configure one) - await captureForAI( - window, - 'task-launch-guard', - 'dialog-closed-with-provider', - [ - 'Dialog closed successfully', - 'A provider was ready (E2E mode pre-configured)', - 'Task submission should work' - ] - ); - } - }); - - test('should allow closing dialog with Close Anyway if warning appears', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Try to close with Escape - await window.keyboard.press('Escape'); - - // If warning appears, click Close Anyway - const closeAnywayVisible = await settingsPage.closeAnywayButton.isVisible().catch(() => false); - - if (closeAnywayVisible) { - await settingsPage.closeAnywayButton.click(); - - // Verify dialog closed - await expect(settingsPage.settingsDialog).not.toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - await captureForAI( - window, - 'task-launch-guard', - 'close-anyway-clicked', - [ - 'Close Anyway button was clicked', - 'Dialog closed despite warning', - 'User can proceed without provider' - ] - ); - } else { - // Dialog closed directly - provider was ready - await expect(settingsPage.providerGrid).not.toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - } - }); - - test('should show all providers when Show All is clicked', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Click Show All to see all providers - await settingsPage.toggleShowAll(); - - // Verify all provider cards are visible - const providerIds = ['anthropic', 'openai', 'openrouter', 'google', 'xai', 'deepseek', 'zai', 'bedrock', 'ollama', 'litellm']; - - for (const providerId of providerIds) { - await expect(settingsPage.getProviderCard(providerId)).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - } - - await captureForAI( - window, - 'task-launch-guard', - 'all-providers-visible', - [ - 'All 10 provider cards are visible', - 'Show All expanded the grid', - 'User can select any provider' - ] - ); - }); - - test('should filter providers by search', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // First show all providers - await settingsPage.toggleShowAll(); - - // Search for specific provider - await settingsPage.searchProvider('ollama'); - - // Ollama should be visible - await expect(settingsPage.getProviderCard('ollama')).toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Other providers should not be visible - await expect(settingsPage.getProviderCard('anthropic')).not.toBeVisible(); - await expect(settingsPage.getProviderCard('openai')).not.toBeVisible(); - - await captureForAI( - window, - 'task-launch-guard', - 'search-filters-providers', - [ - 'Search filters provider grid', - 'Only matching provider is visible', - 'Search functionality works correctly' - ] - ); - }); - - test('should be able to navigate back to home and submit task', async ({ window }) => { - const homePage = new HomePage(window); - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - - // Open and close settings - await settingsPage.navigateToSettings(); - await window.keyboard.press('Escape'); - - // Handle close warning if it appears - const closeAnywayVisible = await settingsPage.closeAnywayButton.isVisible().catch(() => false); - if (closeAnywayVisible) { - await settingsPage.closeAnywayButton.click(); - } - - // Wait for dialog to close - await expect(settingsPage.settingsDialog).not.toBeVisible({ timeout: TEST_TIMEOUTS.NAVIGATION }); - - // Enter a task - await homePage.enterTask(TEST_SCENARIOS.SUCCESS.keyword); - - // Submit button should be enabled - await expect(homePage.submitButton).toBeEnabled(); - - await captureForAI( - window, - 'task-launch-guard', - 'ready-to-submit-task', - [ - 'Settings dialog closed', - 'Task input is ready', - 'Submit button is enabled' - ] - ); - }); - - test('should display connected badge on provider card when connected', async ({ window }) => { - const settingsPage = new SettingsPage(window); - - await window.waitForLoadState('domcontentloaded'); - await settingsPage.navigateToSettings(); - - // Check if any provider has a connected badge - // In E2E mode with skip auth, a provider might be pre-configured - const providers = ['anthropic', 'openai', 'openrouter', 'google', 'xai']; - - let foundConnected = false; - for (const providerId of providers) { - const badge = settingsPage.getProviderConnectedBadge(providerId); - const isVisible = await badge.isVisible().catch(() => false); - if (isVisible) { - foundConnected = true; - await captureForAI( - window, - 'task-launch-guard', - 'connected-badge-visible', - [ - `${providerId} provider has connected badge`, - 'Badge indicates provider is configured', - 'User can see which providers are ready' - ] - ); - break; - } - } - - if (!foundConnected) { - // No connected badge - this is expected in fresh state - await captureForAI( - window, - 'task-launch-guard', - 'no-connected-badge', - [ - 'No provider has connected badge', - 'User needs to configure a provider', - 'Provider grid shows available options' - ] - ); - } - }); -}); diff --git a/openwork-memos-integration/apps/desktop/e2e/utils/index.ts b/openwork-memos-integration/apps/desktop/e2e/utils/index.ts deleted file mode 100644 index 3686ce8b4..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { captureForAI, type ScreenshotMetadata } from './screenshots'; diff --git a/openwork-memos-integration/apps/desktop/e2e/utils/screenshots.ts b/openwork-memos-integration/apps/desktop/e2e/utils/screenshots.ts deleted file mode 100644 index 00ec0b573..000000000 --- a/openwork-memos-integration/apps/desktop/e2e/utils/screenshots.ts +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Screenshot utilities for AI-powered visual testing. - * Captures screenshots with metadata for automated evaluation. - */ -import type { Page } from '@playwright/test'; -import * as fs from 'fs/promises'; -import { fileURLToPath } from 'url'; -import { dirname, join } from 'path'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -// ============================================================================ -// Types -// ============================================================================ - -export interface ScreenshotMetadata { - testName: string; - stateName: string; - viewport: { width: number; height: number }; - route: string; - timestamp: string; - evaluationCriteria: string[]; -} - -export interface CaptureResult { - success: boolean; - path: string; - error?: string; -} - -// ============================================================================ -// Screenshot Capture -// ============================================================================ - -/** - * Capture a screenshot with metadata for AI evaluation. - * Includes error handling to prevent test failures from screenshot issues. - * - * @param page - Playwright page to capture - * @param testName - Name of the test (used in filename) - * @param stateName - Description of the UI state (used in filename) - * @param evaluationCriteria - List of criteria for AI evaluation - * @returns Capture result with success status and path - */ -export async function captureForAI( - page: Page, - testName: string, - stateName: string, - evaluationCriteria: string[] -): Promise { - const timestamp = Date.now(); - const sanitizedTestName = sanitizeFilename(testName); - const sanitizedStateName = sanitizeFilename(stateName); - const filename = `${sanitizedTestName}-${sanitizedStateName}-${timestamp}.png`; - const screenshotDir = join(__dirname, '../test-results/screenshots'); - const screenshotPath = join(screenshotDir, filename); - - try { - // Ensure directory exists - await fs.mkdir(screenshotDir, { recursive: true }); - - // Capture screenshot with animations disabled for consistency - await page.screenshot({ - path: screenshotPath, - fullPage: true, - animations: 'disabled', - }); - - // Save metadata alongside screenshot - const viewport = page.viewportSize() || { width: 1280, height: 720 }; - const metadata: ScreenshotMetadata = { - testName, - stateName, - viewport, - route: page.url(), - timestamp: new Date().toISOString(), - evaluationCriteria, - }; - - await fs.writeFile( - screenshotPath.replace('.png', '.json'), - JSON.stringify(metadata, null, 2) - ); - - return { success: true, path: screenshotPath }; - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - console.warn(`[Screenshot] Failed to capture "${testName}/${stateName}": ${errorMessage}`); - return { success: false, path: '', error: errorMessage }; - } -} - -// ============================================================================ -// Utilities -// ============================================================================ - -/** - * Sanitize a string for use in filenames. - * Removes or replaces characters that are problematic in file paths. - */ -function sanitizeFilename(input: string): string { - return input - .toLowerCase() - .replace(/[^a-z0-9-_]/g, '-') - .replace(/-+/g, '-') - .replace(/^-|-$/g, '') - .slice(0, 50); -} diff --git a/openwork-memos-integration/apps/desktop/index.html b/openwork-memos-integration/apps/desktop/index.html deleted file mode 100644 index 4a0055ba4..000000000 --- a/openwork-memos-integration/apps/desktop/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - Openwork - - - - - -
- - - diff --git a/openwork-memos-integration/apps/desktop/package.json b/openwork-memos-integration/apps/desktop/package.json deleted file mode 100644 index 17680c922..000000000 --- a/openwork-memos-integration/apps/desktop/package.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "name": "@accomplish/desktop", - "version": "0.2.3", - "private": true, - "type": "module", - "description": "Accomplish Desktop App", - "main": "dist-electron/main/index.js", - "scripts": { - "postinstall": "electron-rebuild && npm --prefix skills/dev-browser install && npm --prefix skills/file-permission install && npm --prefix skills/ask-user-question install", - "dev": "node scripts/patch-electron-name.cjs && rm -rf dist-electron && vite", - "dev:clean": "CLEAN_START=1 vite", - "build": "tsc && vite build && npm --prefix skills/dev-browser install --omit=dev && npm --prefix skills/file-permission install --omit=dev && npm --prefix skills/ask-user-question install --omit=dev", - "build:electron": "tsc && vite build && node scripts/package.cjs", - "build:unpack": "tsc && vite build && node scripts/package.cjs --dir", - "package": "pnpm build && node scripts/package.cjs --mac --publish never", - "package:mac": "pnpm build && node scripts/package.cjs --mac --publish never", - "release": "pnpm build && node scripts/package.cjs --mac --publish always", - "release:mac": "pnpm build && node scripts/package.cjs --mac --publish always", - "preview": "vite preview", - "typecheck": "tsc --noEmit", - "lint": "tsc --noEmit", - "clean": "rm -rf dist dist-electron release", - "download:nodejs": "node scripts/download-nodejs.cjs", - "test": "vitest run", - "test:unit": "vitest run --config vitest.unit.config.ts", - "test:integration": "vitest run --config vitest.integration.config.ts", - "test:coverage": "vitest run --coverage", - "test:watch": "vitest watch", - "test:e2e": "docker compose -f e2e/docker/docker-compose.yml up --build --abort-on-container-exit --exit-code-from e2e-tests", - "test:e2e:build": "docker compose -f e2e/docker/docker-compose.yml build", - "test:e2e:clean": "docker compose -f e2e/docker/docker-compose.yml down --rmi local -v", - "test:e2e:report": "playwright show-report e2e/html-report", - "test:e2e:native": "playwright test --config=e2e/playwright.config.ts", - "test:e2e:native:ui": "playwright test --config=e2e/playwright.config.ts --ui", - "test:e2e:native:debug": "playwright test --config=e2e/playwright.config.ts --debug", - "test:e2e:native:fast": "playwright test --config=e2e/playwright.config.ts --project=electron-fast", - "test:e2e:native:integration": "playwright test --config=e2e/playwright.config.ts --project=electron-integration" - }, - "dependencies": { - "@accomplish/shared": "workspace:*", - "@aws-sdk/client-bedrock": "^3.971.0", - "@aws-sdk/credential-providers": "^3.971.0", - "@radix-ui/react-avatar": "^1.1.2", - "@radix-ui/react-dialog": "^1.1.4", - "@radix-ui/react-dropdown-menu": "^2.1.4", - "@radix-ui/react-label": "^2.1.1", - "@radix-ui/react-popover": "^1.1.4", - "@radix-ui/react-select": "^2.1.4", - "@radix-ui/react-separator": "^1.1.1", - "@radix-ui/react-slot": "^1.1.1", - "@radix-ui/react-tooltip": "^1.1.6", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "dotenv": "^17.2.3", - "electron-store": "^8.2.0", - "framer-motion": "^12.26.2", - "lucide-react": "^0.454.0", - "node-pty": "^1.1.0", - "opencode-ai": "1.1.16", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "react-markdown": "^9.0.1", - "react-router-dom": "^7.1.1", - "tailwind-merge": "^3.3.1", - "zod": "^3.24.1", - "zustand": "^5.0.2" - }, - "devDependencies": { - "@electron/rebuild": "^4.0.2", - "@playwright/test": "^1.57.0", - "@tailwindcss/typography": "^0.5.15", - "@testing-library/dom": "^10.4.1", - "@testing-library/jest-dom": "6.6.3", - "@testing-library/react": "^16.3.1", - "@types/node": "^22.10.2", - "@types/react": "^19.0.2", - "@types/react-dom": "^19.0.2", - "@vitejs/plugin-react": "^4.3.4", - "@vitest/coverage-v8": "^4.0.17", - "autoprefixer": "^10.4.20", - "electron": "^35.2.1", - "electron-builder": "^25.1.8", - "happy-dom": "^20.1.0", - "jsdom": "^27.4.0", - "postcss": "^8.4.49", - "tailwindcss": "^3.4.17", - "tailwindcss-animate": "^1.0.7", - "typescript": "^5.7.2", - "vite": "^6.0.6", - "vite-plugin-electron": "^0.28.8", - "vitest": "^4.0.17" - }, - "build": { - "appId": "ai.accomplish.desktop", - "productName": "Openwork", - "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", - "directories": { - "output": "release", - "buildResources": "resources" - }, - "files": [ - "dist/**/*", - "dist-electron/**/*", - "node_modules/opencode-ai/**", - "node_modules/node-pty/**", - "node_modules/electron-store/**", - "node_modules/conf/**", - "node_modules/env-paths/**", - "node_modules/json-schema-typed/**", - "node_modules/atomically/**", - "node_modules/debounce-fn/**", - "!node_modules/@accomplish/**", - "!node_modules/opencode-darwin-*/**", - "!node_modules/opencode-linux-*/**", - "!node_modules/opencode-win32-*/**" - ], - "asar": true, - "asarUnpack": [ - "node_modules/opencode-ai/bin/opencode", - "node_modules/opencode-ai/package.json", - "node_modules/node-pty/build/**/*.node", - "node_modules/node-pty/package.json", - "dist-electron/main/mcp/*.js" - ], - "afterPack": "./scripts/after-pack.cjs", - "extraResources": [ - { - "from": "resources/icon.png", - "to": "icon.png" - }, - { - "from": "skills", - "to": "skills", - "filter": [ - "**/*", - "!**/profiles/**", - "!**/tmp/**", - "!**/.git/**", - "!**/.browser-data/**", - "!**/bun.lock", - "!**/*.test.ts", - "!**/vitest.config.ts" - ] - } - ], - "publish": { - "provider": "github", - "owner": "accomplish-ai", - "repo": "openwork" - }, - "mac": { - "category": "public.app-category.productivity", - "hardenedRuntime": true, - "gatekeeperAssess": false, - "entitlements": "resources/entitlements.mac.plist", - "entitlementsInherit": "resources/entitlements.mac.plist", - "icon": "resources/icon.png", - "target": [ - "dmg", - "zip" - ] - }, - "dmg": { - "contents": [ - { - "x": 130, - "y": 220 - }, - { - "x": 410, - "y": 220, - "type": "link", - "path": "/Applications" - } - ] - } - } -} diff --git a/openwork-memos-integration/apps/desktop/postcss.config.js b/openwork-memos-integration/apps/desktop/postcss.config.js deleted file mode 100644 index 2aa7205d4..000000000 --- a/openwork-memos-integration/apps/desktop/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/anthropic.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/anthropic.svg deleted file mode 100644 index a7434a4e1..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/anthropic.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/bedrock.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/bedrock.svg deleted file mode 100644 index b9b9ddc24..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/bedrock.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/deepseek.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/deepseek.svg deleted file mode 100644 index 6e64a5274..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/deepseek.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/google.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/google.svg deleted file mode 100644 index f9211621c..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/google.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/litellm.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/litellm.svg deleted file mode 100644 index 0b84722f9..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/litellm.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/ollama.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/ollama.svg deleted file mode 100644 index 507ba05c1..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/ollama.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/openai.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/openai.svg deleted file mode 100644 index 6b52fa907..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/openai.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/openrouter.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/openrouter.svg deleted file mode 100644 index ed2bd9b6e..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/openrouter.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/provider-logos.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/provider-logos.svg deleted file mode 100644 index abc304973..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/provider-logos.svg +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/vertex.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/vertex.svg deleted file mode 100644 index 0016831bc..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/vertex.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/xai.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/xai.svg deleted file mode 100644 index 909d6d3ee..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/xai.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/zai.svg b/openwork-memos-integration/apps/desktop/public/assets/ai-logos/zai.svg deleted file mode 100644 index 9c1fd5cba..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/ai-logos/zai.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/icons/connect.svg b/openwork-memos-integration/apps/desktop/public/assets/icons/connect.svg deleted file mode 100644 index b43c4aa55..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/icons/connect.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/icons/connected-key.svg b/openwork-memos-integration/apps/desktop/public/assets/icons/connected-key.svg deleted file mode 100644 index 0e40bd387..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/icons/connected-key.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/icons/connected.svg b/openwork-memos-integration/apps/desktop/public/assets/icons/connected.svg deleted file mode 100644 index 0ae338003..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/icons/connected.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/icons/pending-key.svg b/openwork-memos-integration/apps/desktop/public/assets/icons/pending-key.svg deleted file mode 100644 index 85373f9fa..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/icons/pending-key.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/loading-symbol.svg b/openwork-memos-integration/apps/desktop/public/assets/loading-symbol.svg deleted file mode 100755 index 1b5634182..000000000 --- a/openwork-memos-integration/apps/desktop/public/assets/loading-symbol.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/openwork-memos-integration/apps/desktop/public/assets/logo-1.png b/openwork-memos-integration/apps/desktop/public/assets/logo-1.png deleted file mode 100644 index bb69319269160d32ee9b3ba695de3de3af081bd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3636 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 Z_y%=#6mKNhMwb8p002ovPDHLkV1h<4$J+n^ diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/ai-image-wizard.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/ai-image-wizard.webp deleted file mode 100644 index ce7e762613b297a60a304cec937c4858d9c9db73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2828 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/automated-reminders.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/automated-reminders.webp deleted file mode 100644 index 31e16c0933616b6490ce423f365cf38332fca558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22282 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%0D4x} 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 Qyz;k~+3yYXH5lkP=>Py=(9(Qr2mln3 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 CXaLLr diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/career-document.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/career-document.webp deleted file mode 100644 index b202719bda521f9a0572c237530a5233e1d9bde5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23348 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/clean-data-output.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/clean-data-output.webp deleted file mode 100644 index a3a900e674c7fbe8146c2bdd0608912acf5f8413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18054 zcmaHRbzB^=x9{TaMT-_I6n803aW4fHm&K*HySo;5r^U6n`{J@V#ogWa@w@kr`~JA^ zC6kkHPR=CfBs2NsWJXO^O3GIX0MPs1k8UfSqTZ1VVL(K0A~0< z6#l)+*3Q{cO-6Cre=z@V{P{oF_`mVj|6n&~d*^okpi3mY5-|~_e-0Hy#+fGofcU;WBt7q-%O^|Z z0w0d706PVl0l!1r&M- z{VxJlZR<=UG6Ke#`fw_;9?#ZkRV3V6R^HYTK)@No=#`B`m8k=s3V12E<2NGRB+Jy) zp%vV9cliTncQY1oC5=*ToVFcnjgX8sshH%oQwc4!?>e&8Z7+6gz{;svplJdLJiMh+?Ocq?Hpato@y1nWo_c}BHUAZ;c zRPLoOWw(W*jEk2d+TMfm8>1_}*Du#;%hNOY?H3Jr+f6N>F=_oQ=T13KJ>1u+sZa)M zx6!-qw@ef}*ws60m!8=5TrInXSu$5=r-TmFIa|zG0#h0f;zw4gUCkX@3x$?Fxg<&& zE5b(Ny3ijT*)cK%NX|xnH#V(0nKOe|lPqHtuG{y?PrtPxEw8QCYE0;LSt)`WN{Y8J zQ%*C|h`5?d#cGz9h1jo1UoD8@MV~C%qM8g9o$cK|X;D`+ri6qHcve^fbB=pj(3xkK z*FZo8{nAD~tt2Nxh%tLxQe#S^J4rCB=s^buTs$^1TqV#NbY`gmIa)28KHA7h3EOiT z=gM$3_hgFVX3to2P%L#Kq)yt*fm{iYa7;R{R*tMXaib{INr&GE8yN-J$Y7Gdn?(Ue zuYIQ*tKt?|NZD(|%lKw}@GHXdyO-sXi5n}k6j(no-ktf9i?a5<&pjgm8zcV2!VNry zZA(IYW;r|+&s{k}@@#E=Pf548)Pg3_Ce6k*Zrx;EnSe1$to5PnT7f4!ZAqPrCUDf-)Bj1+vX zxLNKOpqpJ?S!1syo{L^EGRESmK>_0# zU+xNZFG~Fq(mN=IIjnhD^rtnU_@W$R6ZKr(fa7PogQQ7vO8`bTVt=q8{M9A?>*S}C zcFOf{aAs63J9HTtyHPH)dSEs37_z06hTvyCjBYZH7UPkz z?)hZCMYeSXi!)^O?rwLa*_vNAcZukfFz7{v(W!_Vp0fTUk(VqPFad`5@Ro>bImz+< z*c)WTh%_6Y7G+s6woAsl(Ji)Kxb#VO@VPH%>=6#w;DYssnKOx}Zumr)vsk%V_|x1u zYm=^wP>MWcVPWn7GZVE)h=VRVog7!*)Dg3I$hFp1qu7-E|FFd)4-;ubyCl&S1Q>(4f(HZx`|+t^w(Q~1By_7k2irjU zFSw{Z4kK6V=Rg3e&e zc$gx=1kv?`%U}M%Cs_-S3IIbYX=^9|(V-5eInc;MTCr$q+kHVAmT1`YW4s|!hb2hn zF9>nudmSIIH__lM3j;iLa2lU*H(i7dLEz5#1q~cc&L%g`RRdudJtC3+S`xg}r+{n_ z4N5$bhxAB21D8^2G(1PkP6-VLkm{6@Fe$Z4x8btE3}I_y2RbK@+RxDg5IpeH>22Qr zB?Bi;iD~Egg{GYv1zm;)(``UM&0#zpg=oJN1`);34TOxNZ7fX;sgR-JB}}^CDjtcbt8iOuKZ<&aTGAt;UGbq1p0cVAt=#|1|F{*n= zNeI)2+b!rA0#E3GA&6v_^lS&KYs(nKw@8+#OV>t+Yhk6)&9^e2F)uSL=$Np;a15lP z5+xZX;|&(uDp(TxNvGuqt`nz=k9TM=`dVxqi4qS$sc}k#A451z(Ql)q(IT}GHPdz+ zN31eyPIQeG42Dlp^pK{JE%_ovn$42Lov>O5LsUd-POq4b`2Ld77`A6BHakuSn6+Cj z0x`ZQ%KW8)e+(@LwH5@n|zTSzAlC$Rwg~>A9e6Xb|tp#sKh?XV= zw>irO!~?U)Erh`)UYA749^~9XM@?na6#)>WXUA2jvqr^0*X`lcf{ixc;Fh&Coccv3 z37d{$_VjzBSWSr4Kq+752br21tS9= zH#{h&6vudkmYx*@ef!1?CpyXwLZ?sXk(Qo*IVPCFt*Ob@H{nS~RkcVK;xAY(_=Plu zMp4(D$5h-^MI4qWLT`SBN?K=`8jpi@G#VaGu#}38jV)e~hr^N*ZcA5ly=kXJ&k_PZ zGa(xt{|?1qYsUB%xy4}FhQG*l<8z1|<(a{3kA6JL?EDZ>h(SI3Exd(>(|8zpAxWk? zFX9&qgPXr7=gDVX81(LD^FDNr9wo;R8oY%lSX>m{h#(0!}~`)aAA?5uCDA!tT8N!;W+Sw6c^c2t_t{x3XhV1 znJq6O)#Dp01}ED=8N334*j6l@83HcbVcw4EmfRs3PAC;ojblv$qSmmGP9TizvTOt` z_ID!a>j;9+B^40}7R5Eb9~@u$vVh^U-DgJ2-c5;#IgX!)vhmMvBk=7}BBRJZVirR@ z(JbTvY|xzN_tZ_puD`4*nj|PIdNsi7d*Rvn)`Qf1CE!q+Gy{tlPwBfCC(@b4`nClp zzRD0oqg)ppOjC1MUkx4IeOV8qxIk~{-XY`ihu3`sPx|dz`JNYI0U~}rsjZ(eX-Wjf zqrYuj8$3Q}3qxPAL_ScCc*`t`1<)E91C|VYUibZ8)ZR`BMV{i#jpIdSNdKKgjX9sz zi#)_pJSCjJK5z&>pNPC26~+mpqL08Qy3J-}AOsXmzU}5huh9ZdYxN<$o

q@{xvh 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/competitor-pricing-deck.png b/openwork-memos-integration/apps/desktop/public/assets/usecases/competitor-pricing-deck.png deleted file mode 100755 index 7722812995d917000603ef77996b072442f7ff34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31960 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 E0Bm(O^Z)<= diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/custom-web-tool.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/custom-web-tool.webp deleted file mode 100644 index 35b0c4b8592de47b37f8fcbfca2142548304d744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21396 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/document-translation.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/document-translation.webp deleted file mode 100644 index 494cae10e667a9e1163238b1d3f153fd39052d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19248 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%0A99Z(gd_;oo2n7=$}&sISfcUJ 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/event-calendar-builder.png b/openwork-memos-integration/apps/desktop/public/assets/usecases/event-calendar-builder.png deleted file mode 100755 index ec4d1382f55079b2e7d379670da948fe59a64bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10030 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/export-to-table.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/export-to-table.webp deleted file mode 100644 index 39144e29ef55ce97a8ce60280f3e708c0872ef02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45222 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/inbox-promo-cleanup.png b/openwork-memos-integration/apps/desktop/public/assets/usecases/inbox-promo-cleanup.png deleted file mode 100755 index 0ca9512b6cd39d3ddae75635851ef67b5c52f637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6400 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 O{>;u<7|{$IWBv^=y-&#i diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/landing-page-copy.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/landing-page-copy.webp deleted file mode 100644 index 3cb74bb339ef07532c0976db9ee722976eca067f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20858 zcmaHSc|26n`~Pg1VPuSLP?}+E*~S_v#t<`>6cx%c#AM%>M9eTmkumnIC|g-0*(zhF z$dgYk2*h+iT?=m-~4YZ^B?T=-}vl* za7dtU;1SQo|6u>i7Wzln`3TG0{6DbM|ABA#`u~SN;fUv~muJv_`ub1$k9Keu?<0E$OQ<>;m=12ptZFA`4*A6<1&^!mqIFQ3{i(r$D%@D#!tXhWle7DO1R z-kgcBU*b)~WI5K78aG1#dKsvu_5OtI)`tJrH|hcJB*dktC;uJZJvb~ljQn=9yDbA9$aNFjlK=qykHT;-FiU25~ zww)*uk3b8Ju;@563~iONjf$e5U^>P-V$O9_Q?FbFSgDS~C15xf4*H@G2UR9kD)5P0 zft`6RtieJw98o+`z8&Yx{qCr%;ZECLtX6wl2b_q;M6)2ibqhD%x|=H_kzf;@Y_1x1 zVkMb@q05uSof+S+h|p`&F{nxp>sWaiIU6Uc9+g@)YfP~aiFIKBovEqv8NFHTU!BN> z-|x|q8K}Q-E-N&{_xXK@6<)kOZA3*MAE!#<@>K^j1lkKb#2KU1J^`>luL^(M2*4I7 z4^~meDki>DD{N=si1;zI9Swnoqf@#?C|Q_Zr+CL$NvboMQH??oV;!M1xi6e3s$M!& z5w%qA0ie_tl1RaLW-zP#w+jrcI=p?`-wofyPR2s8w8g0aDnOMvGH0sD4M&r5*kDLo z(uH^v)oeDfuQcU3glS@eg-7?nakDr$m_Y=j;B-plYN>%P4fcR#&IL|uighl9Y+j8` zQCCK?jxB?5EDE zMx*$Gdqb0@shV6v-zi}-nMxxOd+uTINGWF+^6Le3hnsCqryC%+1>2D}sJ`>K$SCvo zdDVQHe-r>d2~!2*-pKgL3da`tX>p+&jmhk$!aaUsNGd*;eF8`TNYVYg@FRYCS#5LT z9bg4{u&??!5v$+E62OuO!2qsk%3UnHK#HM=O>$jF_X=RzHMzldy>vJWPRHSFmBDL7 z6*`vTE6vEm!EC2t@)!w_pR#JR9RbM>bie`jV&QxsI8GHp zl&AG&24}O;u&P870jYx1hPR6t1A6J%SUy+56hs@7VT*2UcrAGoo$RPaqB>K^cY(F0 z4BGEYJyKM7J47WLdlr|XIv-f4hDbjde*%reQf)4PF{T6p0d31RS5_N7q?w~a0$UOM z6OE>Lk=PFib|NaSC-LXBkr zfGU0MR5)LoNR15~LxtP43N+afiVZ}Ri{yw$15aUM9AmNcECd=>M)#8?foKJO!XP?{ z3Mmdll>i(mJwYf}tS}k~MUmLi!bIi*rv>5dTbHIDJ}_8?CDH~cG=O5TrUVrdsF%`u zG|*jaBq~lMUlst~r=eGqW5T z@^BcUhru|ZLg6K<07y{UiT8N4pD3D+>o_Tcbv7GJf(*)|@eGQ;6a!y;KMTP<-s{q1 z)ea%}D&t^`hSY6$^4UROzZf+r5Zvx_nD%S`Plz5s?}Fah%0+(sf(0HAK|mNu;ypL@ zjtGsZ10bk4di_%6;+6t6*I%|}H|KCxH$oSW#-Sl9te+h5HXi%Bd0LpQBnP?P`a^E;!}b3 zfalNW_+8UTM)0T!HL96>T9%X~W4nST_5t(5>I&1Lq)Z@tW~0box<>|P*kvq(zt0^; zw-)3vwPF!3)P`WI`A}p)WpJ}vf=8{CeSlP@ttk1^3|cF3H9+$t42_lr+7Z3@nM7)v4A(wkt-rX@61}gJ)DMa2)MNHUw`cx}(#9ssB{Y#wY2#cLGQK@XF2ljhs_(`2q2pxcBLXapPH7n}c zDVIBDQj&Od5;qcyR%X_(aw4KS0wlo%Rpx20cnB6h%m->MH2oapibdU|Pb*<M5j3KH0AOWOsXB8hyBr|M?3Lg~;?R8aCqxyQ45T6tHv$br&a0OQ7aTnh5TW@S z8i<{2I1&xEE!@S(+0kM$ePp#HafCTq)_oM&jj{6pjw8Sd!$Fzlw%4Ox7nuUMAj1#8 zh!f4Q8L~=~XdsM*Y__v4mK%hilqTUg6ST6JOfn<4lKyJZLY@yCy%zCB#6jSj!XiKU z%iF9!R6us63eJHE>?+dxwr+s2tupPgM=~(h(3+^}B&<}zJFJ6c3a=^E1+g_yU0lrN zdfN=2@_{b5Ad#SSO}t!5)-G{?QaG(hcjo4UJ`ZsgMlxySvqS1VQmpK>a3eG#!wfsY zhqIN84wUW*Sul>mWJ&&k)VN7DURXGBvnfilf92je^f|EZAC&wXW{iAl`dQ zF07?mEnk+z9QVSfpB)3J0^&2gx@2jNTdMD|fs+09mQ5gMy2pCo!fCe@Th zl^KgBW57%HK;3abJOr10t3MrU?UWVRoPfafAysCOWb7BtbiXhOS+}=p@X+oWC^8?Z1?3yo+yIiC*dZEnK9lM$o${C$91S9*sKylS z*I2s6TQz#m?j7$Mh|^d-KPXnu67>_j3L>Hxf}}IDNWr>jKAgUa%?!UV2!-Y8V(vQO3f=I-41=`&j) zZsYCd33a_L1Ew{lzB#aymG_`HWZ_tmFtS0!Jk?e;-v-kg5~yLo2ebJCW>F#V;nB|) zAQ*-{^W5D1c*mMIlG(UybYl0{G+;yKt9dD8U%qVLLq?@gf41AOw!bvh)VDuQS|paP zEsWoOkWU-!!^w z7=Q)p&X>uSy)GUI&J=d8e@DjxktXX3!VC^<{O=w$oo3K_c8Y4F+T4L*mk?jVxaaU} zb~^SyGeWuj)=(CNFTT7IQGZ&Z71`7NIT_gFj^`_xKBj`BN=fvFKq_<13_)FBi6^iC zX~43ABX+W!J)MWxMnv<;hnr-f8!aur+}4eTWT(~VQIlE6+`3dH>3#4pb4q0{h$eSV zJOv8}u1e~~H8$0fGXtAD>acbgtOH-=WNN%$*N;Rv5wDW{nU6w7h@MC zzaS~iEty5`lCVs-VWmk`*E^HmtLP$NDks0(D>tld`Zi|*O2}mN;Kp}n-xfK-%w8=) zRJ2@T#26=NSfA@{EEQn8G%CZ8KzLKa7%(JE>@yJ|XjXN7>O?Y%67Lr&WSeuIk+$Wz zFq^GbCcMRiReduts154dek`}J&tM~cg2CU_J7X6*-N{?EbaYPILSKdfb0S7>9pHZn zeIeTSRxd2pIsD}=uVDTpTe=bq4CMpcK9rH?l!Rztsx*OCNC~Z?T|IVmr!!;c9-NpB zPoOXSjTg@9i2@vPyZZC8&Nn>*Hc+IPv{&;Kwt0A{J0V{WWWAo9gN&M#eZCsOK$bWT z{z+$MB6>~;VVm>5b7F6HbzIkg_n3l!a|e|`%dS~=xmmjP zy0r}-v@zm*%WrPysAR(i9Sr7Zp`x=lb@H~};f^Rk!dH;Bm|O|<6JcbvY-h|2nop%d z{jwLqI?~viDf>Tt_GZU7e!bZtB_zcsck$VgppC(jho4%u|GwLqcK8>I51D$7hlk-C zL{1*rmimL~nQ*Pc?HnJ?Cw|HA=s%@x(1IW}xiyoPjnfYOx(8#YF$FF4%qjSrjUx&kw!ev|jTD5E{piQF(LA+zT zlA!xvocyJFw+?%&4wH5Ns?J0R&m2}b>@ND;`F@?INC9C`)ae0&3ekk=qB*~NxT$;C z^~>>_qY#05rxVu)XCR}a&t?I@^n|2D54@8VH4B)D5mqA+Vu9>ESw-~F!Wh3JtFFRG zSWq!Vq7;9U`FUwXW-jNZW%7W+9 zq=+gIq$*JiMIoUxfK0^6{yZX}05X3qDw8!ThbO3DaVZNpc!H8BnQW*}fqlIvhb)1> zkWe}Vb&|UspsLCu3#NRhESmOtOP80qV6iAXj6nI~j$(kyup~6Y&yAW&gvlCM9@%pb zeNd=@e%t$FADk^}#nmrzHi|o=t2H1*G##tQ_k|Nm%PPahYA-(4TQ?YIu>{(%3{@&b zzCVweip1%h#z>NTI5QDcI?Wk{%skRSLnu&>0cRj#u5-hh+{grvc#~c@25%CKR0(0> z;B8`z1}KRSA4}>^Wn^6xskKhAiAtu*5yLffMDYGzwkCrRGEt}y!KVj;5p0e7-`;Ge z@UgaQXk|1AIWDGwkLKK~uONx*X(zffoe05go`S?^2*Xwqp0a54moRtD7_6#V&1Hh- z#_0@*CllE-W2nMp&|eL8)QT!m=R_r9qmzQ<|S&9)kli<;w4adzt!RRHp0NmP+HDqcZ#TdwBTVtvqGOBa= zvl76@ikQ%M2Pyj!yd`bjGGn^v1vD!ja=umhRG-?FieSh8Awl<>8#A_)7DuWSH{4J76|L8NX< zkSyb{2Wd!|y}%5A-m8w` zQvouwkIbiva-~($C>OMG6@k8Cd;w-f#HZhEA~aDH@qCq-k{IEmHI^DLk(f)!q(N$r zq+^e5MPQfTXJ6D8IwAqtqwd?D=BH%hZAD{S`B4;G6A-NTlmpK=G0dRhD<`>4B$JX= z{SBf4T0MG!=P3I&buZ`3ECm?TPV`(rv+mm7h*JfDjlNtB|Moy?|65r`@k9TEn848w3kT%$PUVi3jZ&M-0n215{`3>X%}umSaMW&?V=`{3Mt=Z}H{ zs<%P(yD`8@$%d|O2sA|%s0zmsV_|Bz=UBA7ex*JfJtCk2Ro%(NS7sTx z(mjxPv^7JR40UYs&ti~jda?|d%+h*wL|%8BeSELATSTb&yV6n2aMJ<&nM_Nl`#Dg-NA z+5=SyICncsfH{H<=vB9}>ZyZZSH+Wi0@+mNQ=OID1z1!#3mu?LgC7I-sY6w%3@ovy zk40V38y6Nfs1$BcY;$rua-jOsdWb{`s~R}OS;1~6Qy8Dgeq<3G6*JOpvu6ppHc~Lf z9ua3eCEZpUNN*6q0#UtLygbKx``BQ8>NuNZUr7cFjTxEr)?EJHpTKhyVl{bhz05Ws5_j|4j+s z+#5X9{d35(e;COJ0UUh^L)&Tq0EkLJ9`KX_&;Y38g-bCi6fY=}zRE?;=Z?SWJu3EW z*GT@vS?bpfziy+IhN3S%mY+BppEOU-jBmGxZ-uw)96W7oyB&5A|E>Q0#`}N|;D1Y& zM)@2WMs-F%l~xB{1V3vrZzdo7+TqzxIVdU9O$Z;~itO=Oix@uqc1vn0a_ivU;pyGF z?MJ^KH934~wA>!uk1RD>(CyW2kDx?GZ9Ux4-E~;pQ&6ATh}?Kh*!SKU-;Vsz^10=E zBy-z$Cuz?7G9X9(>;m`IofUvZQ-> zxV8^E(Arzt3)xcoJ@YrR^N448OZmI`U+IY_o8Vs|TYEEHy_R=lz}8mG5*|+W>MF?# zV*K2W_QttqWklLurD@)}s2&q!i^JTWYB_h>ki)6?#Oa)Gay(*>%OfM#_MYdRs?zh0 zlqtxNF1d~Tp>)v?bAsX$-n1x$AkXW2>;znq{;n`)4N|bL|4=|KJf@C z{OpF0(aptGzaZ`{E4;dM*7#)*)8+glr}#&V#9gz0N-aA#ThvBkD_hLe+X7_SZp)i) zK5ykDoPqZyTo68lst9Y1pFo*K6#Ote_MuH?IrZ~nowIs)J;Rz_%PKRDgZx|VhLUM3`OETMO|%QA{gW=g;LiEZX$$gV07{|6Zvd zx$*B2DO2n;E3tFUCBo_LF|wvUpYod3*e_4@tk zv!9KJQZ*#DAkYM7bc@h#{aKCF#>CGb3;?M&9XHe7pXirt>945RU{;4XaS{^Uw0MS$ zpQ8rE`y32Ulk<2LZjgC;pZ7YA-c1-X6n7!D+IJlPC`hq*YH~}Zj!mT| z?m!x8XIxl&%{!`6$YK(ypWzr(b*sjg&5(BGf$>`5G21)E>MlXAss8SMCZ3UAcQ*uQ zy!w9&7re!A6!k_vg~_%r_r*4kEY@6q`1RO}8KAzKjrREwaISs-HdO>3)t|FARmd`r=%9FvXtYF(yr0f2Z|ELf!lVU!F6qaNe=0CPYfTrm zv$31}j+%`P@-edMT-Se_ngWvJq?k1s}VEc#>m}04B${z^-jp$i9+M>_eNQeHFO8#NpWod^* zjc3yC-;K#>&WIAK$r4rgUhIk09G9QIza75%Sc!#jT@H{r9vvItq^!jKD-baPKU?`& zE$L_V)+*_Rt!8q+I^*P4g?+U59wZaNSNZhKN2bJ`Kxc~ zbl-@Nt&WZd8`BCZvo9-83N-m_Is8_Bh)i>BndCa2&;`r*_~A?_S&S3KvFv(#E*U#O zmX>X$o&Dws0lCFqPOs(W=NCqQxyeRW<2h_wfaq&ek=+eV7H=f2ATgOyzcTEKeTX0l;eTGWy#UfZ2RPnSHVVn zLn~cXNj6q*-#)C)Gsc1f&{#{=B#19a%&o#P3uNFIK_7U560_B{(}csTw1hfsFRk~U zPo7>*{geH_O+e@=-?e-X&h^W)v-mNAE&$-*ACqzPMO!kG%ja;P@qN!?2gd31^y#xN zvUP2}vgaNGWiME`4vW4R{{B+s(yyIc@{#Nsbu2=~HFokj+GJzrzkpUuO$72rjSy(; zmiu2tU2id!#LcI#Uq^WdRgdbb38om4-feczC4czxW|Q-uuk#PhwdC(6D_+F5+f{Xu zJ#k|xH8;dR!0JkMNPEi84%xde&&vpvVJ|0EJ-eo$@c7Q(7(+z+o99B%^_cj^ZW~Cg zmBF+4gaSKCqCib$F{WrK^v?r^?yZfFywzc2+w~nBVxOMt^UzQ{mTe~e?oh9OA)n%d z^(?--pH!CpJ~W&UylZ&Lvrs>2*Y4-Tp<|U)as{j_srESUWv+qB)Vr-g=?=%uJY-*W zmGyEaU3fA9JDAZl>AC_t`|Oj<-*4c&J6{t2}#oV?`@F+8Vf1c-b;~tRX^LE>b-xio^X` z24-zTve}~LABqs$?-{8si}-gvW`x&O%jjB z?~cS%`Y{n%mwmS^6))>lOgPCL8b{w$%?1BB{o5chxC+d8^wrwC>h^8ue8}P7DJ7dM zsl(i*cVoi)$1WaR*D;JZ4tTBB{^MVKAE{hZkTv@mMY;4K#p*Ln}=4}_M69tDf z>ULPn(^Fy1DHCF3j?&55#?;F==eVaa(XZ6c{tVdqLm#{l_zCyoWb#9E(oB)jzfRJ4 z_^J72j-rDt-I5B%{<`(+`~%KFDK-tK*6+r?4}w5h5Ak4l%?0KzA>oK{F6SH62*B~tOSr!JeQxBa~R5v8m#%@ zb4vV4kP77@n@Fo~jF+Jndir0f?f^+&vY7k&zovs*dP~c@-twIsQaJw44}|w5H>$oZ zY!_wbBkRlsSwfVO@+pMID ztKG{JGC0kCJ&LPcDUw|@DyB*M1xK1s=d`ljI#q)jU}Ulho!rW__6U|a^Kz_d)ADJ? z70BOCqU`mR8Rd$?%9>Z*_s_k4B=xu>?hsM=qU=iB=!t1YeSnx0jL$_UXb9xS1Wbqh zxm4|GZhq~Ply+v$l8kij=>cX}IK)|I!4~u%x55^TE!30=I(2cy7N`JwGz^PuVwd_tclUSfZp3 z{1&*f0lyd*Tg0i8i2=O!cHYL0W$ zIaweg^qdy^)0ihOH`-1<8W9!K;hhz6vb)*fIorjPf#%Qfr(WGgOXY6_niK3q&3DZT6p>17n8Eliua z+C=;Gmu;Tb9lNO3jMhG}{QjIqbVeB^_J!3qr~Dl$gF|-sw2YUTjsMUGFG_UVu1jP8 z>qpYo{4eyjS0(qYyq63OD)`wd&Cj3GecbrmFB6f40|QgZeWQh9wLcJ znhQPbO^IfC6#Al~LfKyVbqv|>6kPD@ZGqge{ak-z#dFbE@NB4TJ5}xP7W11nk8cVm z>qONC(@@iPd#m<@N!Mp{A(^r@FUNyZ@45_Cgs}yp-aQ?8Y!U4jzQ0eG;c5Bvto(+M z4g{h7tDY{WkGosaETPwH|Cz5t=UUzhhm4E$yoY22DzX(3Tw-^4>LB+j? z8f|(cZT`n^&x)SZ9+Zaut;ib0!W6pgXS3ud{@rl?Wq3p67n0}c8?}#ry|o2b0+)O> z5`jYPVeCjo-ix77&?U@!9rIP}w|kaaXGmpPSrVTAXz%JcVtC&ZrR^!1oZJ=_7&k{{ z`X>Kq>Uq$@ROO`;4@W_R05V(hoz$h`17WM1pWh-z^>oX@`|fkI+t#8#4f_l4ix1_sS( zMr!4AE#8Qg0L+^I0>ldJkmu#Adt7K<$s()SymsquUIzD}MC+BoWtlvwQ>0brnS{GWb9@P`jhjiq`+43rdRbuQ zGv)OeFAw}}%bA88nBxVIxGu;{d7U4+VzoQ(0$FfkAX5B&ztF_Diu&)DW$tz;DX76) z!~U_`SgvF35-XJB_d;*8d^syCQbcd|doI;^t=;ZS`1+QedyTWzh`eqfo}pPJ>~egs zLa43abC;CJs>Mz3;itKuvKQC}ft6+L6aGd|9Jvb<`BmTbp!NJ3Ug|o4QN^+@SEtNW z?tzEo&D_CtXTlcz&i;bVI+fY!o;dGXz`B@s{|&i;4bqag8Re4d!6_gT8L6$zX&{ktgT1|!8QF*j}S;kpAa`bOApZHwP5+o5;~?%wj@w82#_KxCxO)S*5Y z!O^BR!;5)2&wPT=eUWnnV~5w&l_7;p*iEe_KWe14d-Bub%cs8+mL3@^DU4n8*N8?Z z&0P=q*bywZWRl;YcWbY0L5kz5hJfaw(&`@{=gJN(m|Yx1!w-3Z@81hSwdwCT1?`HC zvFQ5^KlDlsG`$n@DBS*M>J`A5E4Imd6C}!2C3O(ndNJNZ(5axcY9$Lilr0fIc9p@#0N4Pl-LIQ}(3??@Ge&LX>}L<=9)=*EQT*>`z6_s2Ui;AN=twEloLXmc_4n zYhukln2&z04f^`oqK5UodD=haT97fG&~2Fuc^KnD37#@j*sb~atktE2vsjs9lSx7i z4oqZdhCE0u{W_U#7jmC=xL>1|n_r(~{w`S{WbwXW`rjynCl&85yNOQ?AFsY)<5pab zt2F2_Rkd-?oScvAr24V<-@bjY93%C9)`iJW<@U+VO{Bnl*zdFyv%UR1r7obctf7sb zI#p@8QMLAccc&=0cUxvv;`QLkyDgE^Ws>ErE25mA7_$y%#(H0vt|+-kX|&wUOUGNw zhN)OHAF}`OYUkim&|hJ8`F_d_iFm9-oi+NBj1k>l`G>p-j_-Mt&ymFGW(jHp@-`BG zYuVX6Pq00#ikuM&Z?RPjdv#yQ`0wEZ$uk^z^j`dp^yaq7-Q%TWuU?Dqg{ynf4NIc; zCq7_Zc|ez9hX+gux2E{tx_uIUdCmB4S=qwiY3bm52jU*U*)>mw`I*=3$E2FhHrtE# zfwYGEnN49WY*y+-zsjA{(w3iJWPZHb5Ea(K*{U`F^uoQQ8rapi5zmPIV1?&1@ylyv zPgcu2K`nwa9~x)k?<+jP6iyFRr2nM?bP5|H92Pi;*`lAk?s#~1<87~z@*Xu7xZ3k5 zT)*(@$Jh4s4^<~WN1xNA%Uw`$)sg&np46Xwb^6>l$P1wNONGDtc#BHD*!b?~v0qns(`=8g1nONuIR}zgNB-$Wy`tJ8sD_S0;@wT8~}%e2`BuhqY^a zoXN;k8q2-SW6^Wt-WAU_;V-CWZgy7ncR{`Z;M#3p?H|q0A3ZgnJ-2PK`}A#kc91() zBIu-$$MxNz);qYy&`&)Mqxa<=#0y_IxY{4saqJ`<@!QkK8}s;#&?JC+^Fg%X%YPBe zqbBt9VRP!kzt{brpSF#FzE*m0o_pthGX8L59hl1?{9esdaBIm{q#ICy=vzs7s?4*ug7_XD;YDcB>NF4zJ=b{fg=pdAShR zIAzf^Rd`vfVqXt1x{ZHbr8Tzm@oj>wqE`Dx=|}nDHkYQSyzBWHb{T8>=H>t~v!t(Q zSkXN?s834)wmH8Ne?OCL28@^5J`ic&Njqry)1xmnyxX%*Vux8iUVf zxX?|aPK;hXd*bS!uWBFf_>}5hI*=DDhc9!Max5!TQv|9?kdr#KQm;(4k4s4!UbRTq zR#v!R{_(lmo$a{UHB#%pnQPb^o)qjJb4u~w>8Ee+gsNYA-E(#^mI97QAr$7cf7jXD zteY8D@3Q`+jp+S#|8jf>DX$V1-K=AAvGJsw`8!mM;wy@en%lzI--mSQ&H{qHXvKIH zb2{lZF~T$Sd~9#7lbO?GSeLB!<8DEn;k}~B8*KaB5E)+FOUrcOx3x~~PfcayN+bJp zv?l0Ne)79NBie0K{0@L&3j2v7g&X1Ap05>NCf6&`Q5}yX)Q9 zyYJ%lwkw;Y`Cg0r=CI|JCR}#L_3e#;Z+$We4JHyR^3?H@$4~N4A`*nR-xxX6UNQ(W zU>ZF7+HXy$ay$5xLE1ld+@U#V^miy-6xs6U7^N&P&9P3#81F(NYjuLM-i@Ux7&j|i zKt3Hc?OyQQdOB>vyPtC+QG7iPVe*a3RXfIPf~C9iC~FcbEIUV>5L&NE9lXMI>rNPv zW?vJNE`F@jZh|LF&9RL%ZDe3!y^@=I?X9E8Ya#o2rqDr?Szs-vr)F;UXXl6UHzsq; z;}ZBtL8T2pc7i`APGxdOu&QTED5<9o?sZQv)s?=RQ2Qe{AC1^=#1lV|`qWeB?b`%Q zJ~rxnvl@Y_7Z;r)81G+|p!a@1=g&P$imZZJJ+s0DD!$zMd=gX1rk1{T5|Vo@*#$Rw zC_RlV47#(ppCaS)S1mXh4N{Xh$hTLC=I8kbpcD?ct;*KzYkeifB@BE^?r=%J67|dY z{kX8IckzJu+z7$I<+ZZmZ=vepT8kJZy-3Bh|N z_!hLhU(&Ybz>hsFxj1pPQ}k}#2eRI!rGU+Zz{ewkZF~tu36sCihov7!)QebWKt+CO zN=*z{HaEj?tAlC*eGTvi%e8ziwW?S5vwe4Ps=+r0$&+VW~^U zBn|4l<`e4~xEA`Z!EoiTYY*?!)W6v|3gRMyLkja5>=uQhKDdlbdCIk`kn-_IB?RZI zu|tB=|3VqX@9H_IT1hH;v#Rm@cim(^tPTmQYbHEQpE$q6yM~!J{*=di!mEU^+Ep}rmuV( z9l3q!nKtEu5z4zOGQ4c`!1CG+UzHQOWme12okznp8n`m=R8?RsEa zb&np0n06 zU6Q#+QFbp{wTvq@HX!UherGr4x`h5>>@>t1rWfWzJ09M@&=A8vp1=8#FnX>ezWNsf zY|>Vc_#h&KB&GWNtkSxDd|LGyb}Qi1o}9XQY?`p<#!H#^?>pyMK&TBm=&oV;ou-fZ zHH#fNExKR+cHd`Pepjy7&0lc9))(!NJ}FCco2_QEca&~F?TE5A09F5(MmU@w<~Py$ z{4vVWsDXC)@iOBdwN0eXa5*<{!rhG3ZlIMHk+wX^y!5*&=K54$dFsp0QSmmdOiOro zghBBBUF44jm6u+hD-OavZr}Lc5_(QE!z(T1lU5 z-o5g4CuH|?UHi1lY*dfXlIqUkD|n$e^0;#_j!$-Dg;e5B+}L#u15f6~z4~FU0+0H| z^_}2hE(DUJ4L%xgBj4%T_b=RZf|-SCDLWQcw7duGS1gMvS97Z(Y|3)tPQp>@FSN0s z!`%-RwA)jBWW>7<7f0uKiX9&sOK}Qs@L{aO-W`kQs@~Kb_qv$xeEp`V9`%-wTuONk ze#6u-ntsP_s>U&F+o>@W)hcdKd5=A?Q(r?%dX^mJcz7x-y=|FoU_!bohcr39 z1q!Bt|Io(zM#Jx+n5VrBu`B(@la!ygnznq+3entyF}9X>O(!xRPiI4gt;gLu+6=y7 zOoyYIjcw4G%@2>QeW)I?y;k3uTDx(>s61A9_<`mRK@qpEYiz5T<3IIHtDe^S#bs=j zcE)^?HBRH<&}omN`~=a60F!#6eDo)Q8Oh=5M!|!m{tR_bS+=aig+- zZkSP;OQnJ{BCt>O&TbgL(38{W3tF3KcMNze`9#VjEkXKVG<2Z;!7|L!>){h^wBAJ7 zm>V{73Z?|vf27zyRzG+Z{=47#lqUxQaY3?%-(kaHN-6jyYc1clStItxg^zwozeP28 z)5kd;d@PR1^~z29B90M+2;8O_w=}e+{#&Y*M;KrMaB+dF7cEUGY;!dqrG7*sNAg4U ziEIeA7KX~xGdx>!8sTMq7S;~WhXlM3qbiBQ%%J#>WqZ3=DFaBvGtq>R!C+HdCmEh8DWkGunG{z_rIzS*p{5aq8y#sI&qFnOdex#k**mIgG%) zJAd1@)6;?qM^pn|Y@Xw*^63V#jo%+yyZ31%H|S0N4UTU3=?dm(SNN}3ML^l>bJbt{ zD;FDN*D8*uc#84wH~l*2fc*aC@{NEruoIW|i9fIcBgLw&@%f4mIXQ(k-`GCGz)Qi& z+vR(ROF)LHgVxVB@uxIRX+-VVwSGZ;_O^AeKf3`nS6fpDKZ4#USm-Z}akNb6n|YTg zTvW-hHIS5nbEN!(uKzg8{_Iy)oh+5S#3^9xY=jU!zy;yJ z+R)IDpkNm*vb@#LMlXJ)wLzo$--eF{jV?Xt|1tHBq5JWT*o5Z0dv4_GKR5cX{PFh} z1&vu7JXvu5iE)xH70gHju(f;SNhjsdwM&kX5KW?*fu$`!7I=)az2N;iK?xkPfgkbA zGt;jHO6%`VTvsU%?DU;L_ga`LxT_DYA`e8qM*vNAw+Qf#4Q z77<>d5u^Ifx6NJN{}f0s|fQAlv8-#BJ5NanoC5?}bo{@@;*SXIihM&pWs8J}#;` zo<8>XUd>DOB#TF5ZCDEIQR^?23G7Sh2dCkWitq7YR^N?pdo{Pd*Qm$IP;05&jJ7Dsu-lP0BVsF~xN8w|JS*``XMx9{CE zMAhp*e68R#ovr1bvTlQh$P{d(m9k3(`scAPY1w{xoAKo%<=$pr&?z$i7&O;!`C<}u z_(xsZWBrA6Ahp7*m|CO>J2iZ3-7C4l?aZXb`|WEgcH&^GM46OncluSZ#8@V+zVVVn}J^dxbZe>fV}v9KTcXN4KBhHjj;xg(xC=HaiCd@s;_ zK-9Hct&*{$cZMe`T;SZMfJ{E?Z0n~W6k6wSdw*c-b9|3Z!K~E)_!C$KsN9$e2 zrH1~A-$Q$gpVn)9(hW(qc`hC)H7`07czGyYa}2Vu`il#?AkHQnqU(EKIb%4>FqeuG zV7IvP)X;;CD}~`zZG^Wif{U%I<|L-g26Y;Gfz=k&-=?co{gJ1sE1gjibkt(I%CmTQ zA z?>P?(39PYf`JQqj_f((m%bkMiHanTyz5ZM1okS(aD;ZrJ*3wDY1w`C8<< zc3b8tB|cG+2rbFLi|17NRzU|6r$TJho(!1vi8tRB=C3|pHr!W#tl&)sZ%y2VcNLlH zozVKz&wYi9C8`M>Zt9WL^-lXhip}dk4dGwqox|Sv{18u=(Yw@63hpbyeYjl1R&^-d z*(+1~T;r*<$?h$XK=oZ@!ZE3!Cw2GnyG5D{Tsl84ieIfA=si6)B-L*O;3-v>Ho$LI z-)t^RKkKBXTzvQJ(4{pA&$u^sSbO9l+PyR!wmN`(p`5(D(w%;5^uyV*!qMq+r;e%| z6(w9@Ls47GrT5c}N~0y0C;P4j{?MS6_rRGgY_+nN66DI+_iT?G zGvc+J`eWO2W&6l=44&UIb|Ui4w{8~NhR0F4-LCbIpZTNCy7{5=V04CC%k!Kg+ge~h zVdESe_st-Ul>Tq3t6TW~0P&c{){pNS=NYfoxr~rZq-tP)MyVY84KdKA8%b-1U%^=y z8Q|!OGR;$EQ@P9iDMQOA>)q$T^Px&^mjnk(GEZFfc?iZdKG7{`{7wwyTP`ku>&|YSlJblF?1(Gg;l@GY0)vYh)x-uR# zzciijZosfJr6V5+Cy*TND;d)r&Vk8~1tZNN{BnhJ`P)_z_n%)FroEba`?r$& z;)yJ?((au4y4ghP!QJOhR~H*f9UI0x)%J`6?n4(J%*5jz3Ub}=iROhyO=alf$}6VO zf&za$lL34O*|bo($Gdf9e;y>awO@50OJ~=c{6(;OM5isovP;AB=z?g{f;`CW$Yh{L)D7=N(mKJ{P@{m1MR^6A>24F#l>sBMW^tCHLT#C%%MMi&``K$Wf7C^^cq=} zFOc8WbPUvw zz2=Z5#<%<7cyBOi!|{;8cr$@!3mTW?@JK zt(iX>o^{HIBj{hXyYACAAwmDQI~5Vn?#!1BI*D2u{ONRerA<{fQ*_Apc^(2rT61Jy z(%xuteC5iowEk9oHzlj*g6e?JG@C(l-sX&-gOx;q+s*jTr>>K~ZeLDue^g#Ds`q=F zr|a!hYQXf@ExUomPE8T$`|c*`Uw1Q(D>SsWe+yQ;k*#(c^y0PFZcb;azpw1%wq96{ zETN%by>|GNoK4NhQUO9*Nf2XDXGU)DH)-RaIn%(=#|JGs=e7Gq3dinxhc9RQS@!ks zYPVAUR{#hQ_wN;d%*tOSVw9{#^guqWB#y!Vr%Sp(+hV!S{@Q=u4)R-L@8OlpNIkXn zqK0@0x5)@yG#Ucz3ViD^#-Mb!#;t!~{D5=8>y268cLvp{&%h;8}0Wt(4;>87A4*+|N z6ajSd6>GDyw085B@Gob6^X!ubLygmGKi^3?3F^tvoND+Yj&1#sU|Qw76&>AU@>t|r zafd>%ZSdkkpk#eb#q{%Z4sTfY77Tf_ZC=!EN)yQ>3aUp={`KIhN>!T;=Ce(A>w10U z`JZgyC*~DJ%mHcPRzYi~$w#SnlMBZ>-WTEhBvv~#4%9*H0Lb5&eV4)Ju6rpre>|3m z`bd_XUg>@3<|zwd-QRu20xr@L9OGPhzz8H$y)S{!u+b@>+P5o8>QmZ;K>uvmI}aT7 zK%A<>sqawp4$1#vp2s_wr1EZ^dG54^B3FP?Y4Gn$Ot~m)na==V0nJd;RzsDyABkfD zv+lSinvAnaj-)Z1&oet)d+aIosGflA61d5+Ef<%4ZswIHd1jLzjJ58RVt|DWL!)6? zct#)UBikT4d^o4q(5Q)cl)GCf%i(mbgqo3N4kqYlh@gcQcf@g9r?_wBc#Y1_1GJk2 z2+Af6MQZg?Y$6+>hscCA^}{UP!{}}b`)PPNL3!y?p7Q$fUPTuFvJ%f&@qjW-rAZOY zy!gULIz6L>LmS84iTkWdpHQ$gHZ^R(?}ZNOyvv;TK;;3>j!l0j2x@>&B~)=H!z zAg9lo*KSn`v~|iWcVaUx$lnyQ&@*fy+ZGpD45y=5ve$HPc8c_HWQ}VlQEg&K)dFGb zZxbj$^kn4=!WUvHNBr`cyzIIw&bh2QHy6Nd3~)6$Rr~Oc{8a!F?j|!LgR`syG+L67 zYyeS~&8QeQHi&yy;0LD$$n8>UqNNtLTM*YOixCTVC!v5#EGPm6LU?~0aob;yCl}q8 z@yp`LMNb~TfTPUFVl;}89BHXPSz%a=JOHE#uE%m7@%}|BbCJlB1Z2 z?j?}wR3$nhE;e=UcPA+4u*((KU#dQCOW@7{%g?mH%?%Fb!NK`>sP^oW__j=S)K+vA zI~J}rvT^UXS@5yeH$>FJJ~vq7Lb#mVc%1n4I0EI|X6YLfDpX{S`&(@bjZ4x_yvl6h zE$Ii(lb05Jx3+Ek$%OanEDiZ@ovE#*KL-lz&LGTs&y4Z#Y4DU#e{+zbAF$Raq{2w~ zApctJNrDin3pIP7ELAfkHl2$>D*aSaLsOJ*+nQ4Z9o%7}=T@eqJ4qQESp!0n=%uqr z1EGaFYD-Qc$X<%{XWc9HJ|S+!=)VDq#f=%)Y?$bGaKlB&_POv{0U3%EWvW){9ZbBY zSWsS84%^OGcQo5D2sb-yRs-E67>x*gOQpa?^v7jQ*4|Sz>FJ%AUks|aptQvd{osYR;o4}+{ zxjissIX$FdmW|wL-NFvQgNZ>&_#u~^TJjVAC!npJyxmJZAy4=Kyr?cRvB1g&ta;uh z1jB02MX-PX@(m#@&^R}8^|Jk*`7+cFR$KCl2U>q)^_oG0bkH2}`tdfbcLQmzrg?@W zu*oY^)YC#cC9AMgCv+9i@(_r%W^h4qbUNDP-d^H(v3iFtH$gK_a=GO1^f zo7g0Y?`w5$eds;Rw&HQSxs^*TNnViOQFr_zpn<0ke^5XVkwe;{Ag|WonWN2_kGi~x zq;^2s=#zSVpuR?uc2!fwrNoE8y9gUfk|lV~qx|#rNjCt|x-C0AoPocV4PQsilM4`t zIp70^Q4i+|oEPbHHSHvZDNA4RO8Aa%LU}xuKD1m3LVIZ&rm>j?uE`)?*&|JQGeDU` z+C!HumCw7O6y~o|5?6#$(bVU@-`$iTuOd5irOT$tP5=WmJ)UDd2T!S&hmU-QLZnTX z!$Ku3x`7d)+5?^aFIH@V(X_9g4V_as{Vvg7d8nmo5 zcN)P6kT;f7HT6W5(JJ76v;NQ;DR<{A(T-Of>7PvA${MZvfx=t`hgPYk`fb}Y$th}> z_vv^hB!IC=hZy3n3^QC+%aS}<07ZbAooT`H4zA-Oe;P4-!k?#Wn4_vU#p(~en1Q0$i^|T0O|&;l8EQBAKfg; zW9#Yave2q~_cs<8Q|)5h#!<_33P>}5Wut|t%KN6GG#<4gW|4fkOMT+ zUnT@lr{)p4M}%M0h<*myhy(~3R~m04M;%9s2*K#Jwg@~3n}mBXs~I@*LGm)eoCV3r znI4@5r=9r3mR zJ}a@bJ!Vy*lD4LZtm8e=f-5B8YBiLrP~yy#z|trA!k3>2gJ1xM2+)ykLAlfg?ucT@ zhGeJ#8synk!$}IK{*0OJvsEp|OH~smcRhmDP;ubs{P7JF1~#HO7lMnLI_+Cwh2{`| zx5%)qd814WpNaoI!dLSg;E6 z9Pr?_jX@8BQ>TQ8_H41(SoL&lVojT)-9KuZFstGqnD!-vcp!;vl0F01C5OKDG|7sQ z$r#}r0?fo4>{Y$%&toi?&sH7!i(&HZz4Fk~6rZL|AxgG;dY_k70!ZKDoS%nFa9o3J zp0iE<_n!lZm#qHGa3TmE@8&6r%dSaE*g0gyS|}x8=^B_##*dms(N};N1(!*O2;&#~ zR`TO7SN|)OK;BRA@!M7PRw44*E^e)A>@xFeCVO&a98sRsPTFWMic1 zx(+dGE}57;6pdJ(*4P|q91k#^5rHG;-Hb+}igT-EU`Se*g@hu4d?`BCt4NRivuzaG zHVh9MKKKA}mR(BD#Pzi@P4doA5pg|>BgE%D1Uz%qd}O9s3p~~gppRCBwkQP`{D(Pd zElz^$n_&?R(E`DaKEBLC*NAiiilgOlbFV6!q9(tC~Tz-CIf3*u1uf`?Mq;)=H30R;4^ z>m9y?pz*^o2ZeMXRV)SeT7V-e{jiZL^pWLUL!n*G^Ip%Mz^yKHKVwPekOY;S_SIUI zN|-Q#dqxa*&P`oG+x4zyJNxp{UV^0)@{J4<(mjmh3wc5(wBo3Eu|8_8bF)SQkHKed zr!+{kBZ~uh-DAaDTfr-iHsJ24`n2_HeMx{+Dz`|95pj(%kxw-~Pw+={P}x5T-d(>C zeFx!Z`j6l@VnhmNR_R9jvlaNlp}IB}EfO~xz+$bHGHjvzkO+=c({utu;wE{N#>>}0 z#mA|{RC-yn2T236TGmaRJ&^$6G%Q-4X1N7;G-8;}z+CIG2A$nQ<-ea50Nr3TKrN7j zA6{Vbe(usrjs<6P@V^ooQyMeob`pBeF^KQ+oXT5V24EW)DT_2o^^G(NsxwQVQz6j2 zcuPXN(DpaDc`%~{GHAAGXP%(M`hx&(HhevQPbJMuj|1iX(Wj{Z7G#IGmSgl2UA7RR z;OZU{-XpDvA9wMI4ZBl-?cm+yGaJ-MAs;Mlcwy)D?A6wsuodAPCQ6j7&R;>tiRhg1 zxJdcY9L+WsKfw1-fYfI2A2AbQ!r-uYc0dD?LU8q+gF_uzWuuK+{@J&tz9rwzC3*eL zEm)A2CvmYU2{*dXM6&-FjF%>&x7*l9t$UhS2C{-m^}aP#mm+?+W59zM}? zQrO%_LvCiRT&_qg!uG~o;naq~MGG{LYNuRf%GgNNZ&{OuC0ZyPfESMTmMK0i{6=)2 z-}4R0x|yh>v>>2Tl`2K5^bUd0TL?&zUIY~oL8VCVy$DF} z9qGN3%l~;kyzhs5@1E@DcXnrYW@l%2GkZ>SR8>?m)BpfIWrgRjoTy&l(K=cg^Ap{Em;NA5YkEg@I`+S` zBmDob6#xI3M3!$|E$&G6?;_0Qj`^KTw0D@+`hPLcf7twgvDAOq)6LoKj^_D)*yV+e z;vKfU!#vji7dHRDu!XbBfAleTG*S-s?*H-nFZ|a#(zlK;b??3j?;_czOZ=;9>qxo_QJoP!$RQFi!oSJXj6@K!FATDhK~h-v7~wvzd$8|1<}_ zOF>pv0Kj1p06=B{0MHBp0K`WBQ+Aj9f5-;8D`LHq%jxd22G|4M0w4fYfFr;H@c0f1 z-3_WBKuliaIiiE%uGIxQqiJDPY`$v)z_piD_z@FNRnt9@8kEXwc|2yefs2?9@e!+7 zG<&S;fB-;=nM!F7-uouM@CHS-I8SvuPqXd$16z3C9CZEx7r2Tuxxnc~CZjbJAl!5LRFN zaQiwl>U=svRcfm=D?}Jd7Z1@#3d3j!SxM{;)fSwTIYC4yDCrAO zUu;eU?}z6$FD0l1HR4RpL*{~Kms(l~0wQTpa;bQbjBkA4Ru>JSN=*cWh-e#y2OG}d z?3M#DIWc1fXiY~4(culnE)JQ(moGSn1O z1zQlo_~-%+6|e&QqXGyPW(I<$nS~uQ8t8Kd2_^)dnk+aiUL3Ew{mu|rKU(#xcdx&! z)pImq67EE6bL%n#CCFf7$zf1RW{hg88M0X+gOjp_9opIlP``Q-&@sQ;8`{gz;J0|v zd-I#mB(RSEtgKgo5JT+>X50WnRfU37Ov8{UKr0#|4BiI%$O;w&D&8Vx8nXsdj#k|o zGPK57Ov=tyeHu-us1XohB0MP^aw%gkbIyIAE6@nIr!B+hXvKteQdA|&yVH%rh^V9Vnylfm`g3ztQggUi2L zdylKGZcg(lErxBB!Y~ey6I;+z_lIqjL!5YwB9QMU-y2g%QUun=k1kHE$FFXFUwhSF zp4detsD=?eC6mKW!dtz9MuJ4nuRJy$+^Jij=;%Lj{4ajbl=YqjG|u)1LEe8r!{lY8 z@bQre*RlRr-RmQ(ewQx4GX~4nw_F+nPPSsV=(^yQBNIP6+ha6^7sh2{vIE338;z@t z&s}QnG&#O15O~weh}DGxHnmasDAk2W95)vyehnFc%e@!#Hv(K3h@NS@T3AQnku}HM zRZ8Fy1Fp-26f@iu5&i;8I&I3zfnR<7An;Z;2tbr^U;2KKs|HQ${s}55@TgNZ1;`8R zP<%HT@ykHgm*+hG_N;LNK}dZls2X4{CLv3I{Q$>fW+i7H-!%od&^TJB=vZaIy+lGg zEj5;MMH8!~7_a?tbkr*OD^#L3Ki{D(<2wXydk(o}|FXx^B8pHVYpZ`2s&1(j@WT=b zh5&eYZp5*?kxs#76rC5HS~U8lpD4OX?eS2Sk`da(pPD1Xk9ytjo0`UMbGD$J=}hH7 zV#JG@@8kA?HMc;bBEVRxUj`O~v6N^A6fxqX@J)4Ey}hM&19PYla>4$j+-BUs$y8Fc z94ay)6zRc^?t$&VdmpJ}*#%bliZnkowiGcYsHQ+FM=0FkCdAF`cgfOqa8P|CAJmj_ zNJWeUKnuW`AVeC*3=q5N#j-Zd6Dttkc}M_l&dC3;ld6g-R?!J@H^qPw7A#?C5$+gq z!i(F3YFslI(S&7t0waYt$ziFfNhu*T5h9)GMueQNy0&BgB;q|}f}>ktvK z%=@ZXRcb;?M2xB!$XUo7ygqVpQZ2^<`0N~yP!#b3NEHqHg#9;+s6^4eo ztbvrh#*8?r!toT+$b@polrehqAj<)uDr1lwx0$SD=9@v2fui0}5{kXU`;>d!wS3|Z zB34-Z*cg0OD+?b9|C)?}JIfvyrZ{m)&5>Uk{eEM>vLzS_?}k0Tv-gpdkqeiARqe+5 z7*e>+XvFLX2oMi%)4K8Y@|j7!G15A#=}Nr<3F!5(u9bge+GlbdIlq=>{082H$lyGk z%8?g~!*w|A8^19@HlT3N>Zp2Bp$^fruQcty6;5ssyItRoTVKx^IXWGaJ*rA>#<0tAU9cAP65scDt(Kk21GKMScOy312A<486NY%>++5l zHUY#myINf*lvrvQ(p4+S?LM-3!N*(1kpKb(_GU;bk`_*k-CX+xeFCa7mshEnchQ!W z4R)RYp5AK(*qe}cW812;voQ>l$RL$%dusCyun}^w^DtP$AYFWxsWnIiy>N1JQC*LD zdap2b+dg0Adekvx-9lW6d%Am9tVIl_m_-$o{k>Nel#IN&0A7r2d;W zW-b`4QUJq935vbioUCT&w!xS(UNM7mb@8xQ7k3mY7~52?9b(fGew23Axb<=XAvHqb z^l1V$Ud!sS{S5gKp)fRO7O3D%yjk};i>gQ@n9|&utO=qSd{;~vJW@bqD)|FBhNP)} zlNGxKb-phLnrMLC%`}z#)nm&Ua(u=#SoiM7yDhrw>Y_%U9Fz;Tx*MCWTC(47vZAl< zrY0z1`x_9Xiry&~WERIXQpkJaVvoJOuUW6R`40q^?{lX!GRo z1z$M&f*0^WVcVHANJMe1YDDq{oztos{qaQxhZNGL8Tc)KP+euDir<5qic8Z0l7l`?-XdTkJQm=yqoePv00q2Zq0=YLSZ59Mww)92 zYIb;s#bW+;$g=7VoLTFJ4I0|`vX?C|Ma`BWeyWvx9dJ?y=&Kl?5Lo{%cm zUrdb5QcZ@gmxOzP75%(Yb`gJ(mU4G}eeqP`T%&au>tNsG8SrAWlY zx&}3M(aOo82%iAHehhXNx%?oUugH4Q2Z92_nO(C1c*2lo$Fjke9f*d(1Jg>awBnVU zs|y3baMJ|x)IeyMbokB`L$`9Ztt4Kfc63s$U|nsi$9yy7u%NftI|=2&0J+i>z0Gh! zGWh9K#^E=4**Y1LGez!nRV&{QOjx;(vRT=oTR>hxBFd>Rzqsg`|6@Ph%u78+sBkKt zm_(h{b#llzLqTLIR=8aq8`(~1V>vUZ)pDW?f=)UXL4c9&R(Gb<>|*L*irKC&cYGeR zwdLw8EeA>?n<}T|g!7}fR>k$nuUCHFfUqic9K9E|2*h+3n{bgO2zt76&T33i=S1zB zg)dep8r-oL;7y*a7@UOJ{>>#9?1a~0eAo7P2o<)waEHzcX`sHcb0U6zdOy9RGO?aq z7=;!|9&vS+)quhhVV=D)?)hjxW=Dd)9IC5qRS>MHWs|p>9gz|D#Nli%J7g#MNEd(~ zi@h2Apo>SUj~r||xd&8i$(V9{%V^5T_{Jm~HBF*Qjj*aQGBpd^Y`gRbz=tG))k&xL z)#ZdTxQzwwYP17>z(%?q!y&p5)c*7VQ#D&K8r*@lt^LKs83f)A2*BSZXle=)v6$zF zz9$Z-m%^*Ui_`^hb_|HW<=5?+-V**^X9F_@AW!|{`VfF+-a3w@*(UI`U{L~~`_ji7 z-%$X>bl+^-CmC(ZVl1H5bVDg9gy{0evs0qRcGGxC1B5z7RGUuuRhtk+GjBK=S1}ky ze3jjga`tMB=j5QaJ~b@}xI0@*k6pO-@HuZ_UyA_qLC*$B;gx&q&z!_f z?ZeR9b!JG_43Kxdl+PKS9Uj7BZ$vfZjOBRed}Fr3?gJFR(lvRLHZ=tHKQ*dBk?y<3 zaMQRPEgHPWH|+ISB*9!;mS=D86Cr^a^T_zQllDlmLQI(Jx}3Rgi;cLf&pf#k9wCtQ zhktJY)!hcLwUzJbFE|2GeIO|yZ=nW4-|X+tQh;HMl)J_};HOlG-SuaC)6vLg{i4Zl zX6U+fk=>$adzT;!1@0g!-+97mP};JO_x`Rx+GY~0?UY{;I|DI5#?PJrpfEWLh3y+J z7GNdUQTTZ0?&Ctb#`Ro>92}tZ7SplNXr^x;lx=jESQg!qizd#q7bpjs*7i{ zj+oQzzT28tZby674HZB&6`8{Jc$@`yBjIqtVDe@Sq6)DTKAnXK@=eygVUNS@H~Oxw z2cEn6NV5wB`a0sy@2U|JSva;05HN4LJ-X{g2ggNVgUd}|3WwADZq>-v`ts`WWzW{u z{OIBOZCNV`CYcdty4@&xU*x;W%wT-S`}c9;9qB*)Zg97kdjYj?>SvMb+1W^0SrcRt zXRpakbl~Rd>OJsq3)uOP%FtZozN%wce8<)}u;FBLM>l3pMl`i@CUCD|CV9*MV$5@% zja&f0gpYm7C5u)mQAFHnS_Bz*Lk3dm@*!U%Yy!a0Xbquq@nD(Y4CcG3;w=>~OD;H; zNF^TL%}PnV!0HON`Zz+ltmvjzw@3RQt1tK9<_ptBK~1C?!9;0kbpkZ9_#LG4>UU}r zc^VMS*n}4R)5Hr4W3q~%X;r}tbz+c-FmPA+a)8UbNbrD+GAIml=YCm+6&wK7n|4nA z=sy)xn72O{`>vnP6x)qxkqc6Ra#&$8j4O(VdRn?bbhiyTigX8T=P%cN;0^pDG|_Y5_`jIp0k!qCBm4v$=X!hQt(tLgG!r?a)Lb+=hfm znZ7pkrb@@oq5k!g&Sfwu9txa+P=J8%+`3O1R}gCE1oWNXDNS32Tl2+tts|p`I=@q3 zRN#gZsX#b>sSZ(;#kcKbpUR+9Hp|p$xOlmaQGRtvjnuCL7vp6EAWiM{zmqwD> zm|Dfn*{}dz$|mZrzXTs2K?KLfdzbg;uLnHCwMH`5yjl}z(m3tl1f?oWrda#a1Vk}d zA;PJM!0bZ3@o3g_J~Z|TQ(}VPvjf|>NJ~a6YzzKGW^{x1MtmF%3b zk<@JFME7iL8Z}|Jgldt9VSBh;x0NaArW4nfHCuhhh~jLzO0si#efi-0;^@yvdW5*F z^3$~!86raKkd9-AR5K8mkTOgTbO3xpXomqV?p@ax)z|P>tyc1lb5yfSHsF{@En89* zR5;fjIFlEG`lvR33SNmYx%PdK3$kaC^XoF}a?{|qy(q&?O6w<2$4>9u8TqQ0RDcY7 zeCJ?5vX|Z%(I*rPrRkmrjzAVtTd0Yd3j^&rV<@I3e!`#^6aicDH?uBAj=e6m0#&OX zQta`p@pl3bK2s>fs_xlKisDh{%QG?(QTL&+p@0$o5Df%GW`jBdo0hhceK{U*vzPO> zX102+Ztg#}Z1F|Q2VU2GS3*?Gxd%wHJ68cE*f~lFp(KP-E^$5ya6ugI zXx-Ka?#&lYSIq48I^1=7dDCmjZOA2Z601s@R~Fq&Z){5qJ~trpRXF1;yjWo2{~x;&G1u5n*29u8BLnbq+2Q#Bx?kN;bR?zmP3Sz zlo9 zM}ku=yA7R#0h3+S!{48A$HMVcy9)4i@t_!;mW&W_^J#JJ`(SPj#t}MHnkZt;d8xw^ z%*Z|3C7#;Ki^jN`s#3>0aHl4qEy;o{N5u2w@lAtJmSIeUcZYr&U}12D3a{DSqVp(2 zj5{BVemMbI0*VQtVTuT9Yz`G81ZYL5+nND_by?xx9gdkHbnvJNTj6kM2B%_B8zeIP z2^mCD0b=>iv@YBJW4Ra&bqjp%2^{l^nh+Qhsj`veDJ<6oMj*xx0O2|knuKsT?9P|~ z!ip7b;zAv?gy>g6L?wJOnu=qpK^QP1hF2~OmR7QChIEZX5JFLyzCI0}$t3iITO2bH ziqa~K2xdv$VQ8)!f>8l;Zz?S>k}L9+GecElDTVk#jYHF7ZIPeaU^LX&3=7VfUqPXj zAJr5J7HA30)P@y*z0M{^tLUm0C7CLOfvpCBP&peB?lo4H>9jO^W;g+yAT150BE&T* z5~!MR50>widiTiT2%p*`-939p#W;DOp_Cv z3KC)*Ays5n0>P$LL15Y-sl!|#vQ0?r9yO#D!<){{xW__?k5I56hRJnF#G;81kCtZH zB?wVy05BxxR~i7CP6U4zyDi-f9*)tpkZdM27tZR({3>puEMjp5z$h6d^ul7lxM~1N z@%X4w3WSiXdAXSWJ~;#&Li!V?QW9#LiqTLN<9d*O@WQ&<3;^t?gkelOPG7|Q(p^dk zIv6N?^!)=ErW%I7DFTNtrG%m^ts)ZeiAUoL>;nSEc^?Y9hd3mCX74wlu=q)%*B3{>EZxaOXjpZ0`Iy%SKiZ zyF15ueIahZ5_K7PO|VoJl|2{8igS}T+h1J^w36kQIcfNad(_G>;PvQwes_F5u)`O5 zTU;L)F+Y8Y4lugjyAD6az2ZpU$sLxR3d}emIi=V%S(WX+J;kM8@Lu3V0_p<$&j7c| z*NxZfXW4UFhq$|N(|oIiBZ&2!Y83dgs~a zvTK3;xE&nXf0Z^k4ms8v*BYyFDY)j_2X{H~HG}83V>lcCh(_JOKesM4LOIx{3(NU$yb*Ij}?F#k|`0^uRUEKB4yFpWSq~Z82wae^`jhKt^cb` zf2O^bo?Ct*-@H$q#Cl5j`?UDU+oy55tC66UP-IgI_AotKoxlC#3%gRXj5-yWFqy__ zEy>m`5?cM|N-GF&>!PIFMMk-)aEiBp@}sZ)$>e2PM=OdHpEd+v{8>GKdRQW%nI2kF zX6gMkNO18i-do|^<*%hab(()DOWHpv-!m*qNKnm+h-+fGU>M{km~PEWe5Nf!7)_zi zF14B9=U3nUD#@U&spxm6=yr0PA@6PG_cW$Ap|=Z>K{lLZ?Ry``J`M5a^h%L6Gprxf zCWtNu{5>b0^#3~^`>kRY()WdTE>7xc#-}MqhqjzY37w1w`I=M zkxWrjuC| zYD61vI&&+F#PA9h`2h+K-8EdA`1j(AKrqcO+r4`j$|p7OJ-t&aF{{2o>ihtSl?+Y8 zuny^V9s|8VUxI+8VFAnoj8a%}+$5ijd1m+S7Ibf@P)%Frm-23$zrj`Y5fMP9rHwBC zL*b=hrNWtSbo-|mzXACweMK3_$pB_3S!+gwzQkkPF;Z1lvo$44Wa6xIYw4MV$%j?a zFLbGxwCY+%e0p}9P|vbzO?Bnh}0iso?cwsa5TyDa;;lDtv8}Dnb7D7As_M5=J~Z4GE?!1 zF55)$c;%gas*5}uo27n8C~0V~idFsm(&*4`l*~Um8d>3bLdwQv@|-TlcyXYoL0=#* zM29V{^(%9zK5n9NF|bZDC75SPMX06YV*9n<1~1^DzL2T=ThceI!a1knSCYa4I*UzM z3!ZIwaWDRlN*|A^naEFnLtdOOCQwz5&9f}^6;8Q~zv8b8H%q)kuCvF8Fov7O@ynm%ZC-U!`>O=3yFd|RoAjU`twJ`aG^WTyO(JWdVTh3H}QBS7k}>*^5_qMBy&+UWeHuQ){9@ZT;ZBDoZam zP44(vh7?_^xyw2=>HXBR7}HhOF@h^!#8--xVGno8GcB1fno~DyrP+gjH{|Ks)fM{+ z{-lP-#(571ufO6Rm*WmMC6TAyv;H=lXdW$Z{o$PHp&fg}U#>m-#J>_>Vy0oEVxD~t zM^Q_Zi7JQx+9)L1dFb0oMCqJP|DcASXKE9_lZ!V~*YK$Q=T-bkYjuGbb0beTkvi3p zUbwyO=f5p8*2hhm)+6nr>nqSX16NonX(kbmCYims5w#DMxu2I!Zz1{CddD?jW#uV1 zC_ORzC>}=H_i&DY|Mq$6psa-$VN; z!$IcK+}m<#BhOh|Od*|KMwvYeC;rP0FMNK9a!TI+=~pqet)pI#e$u|!1D(~LdmQq$ zhFdlp8Eu#B{($?D=!$%%9CwOQ^6$^sCzYRlfYH=?COz0~iFC*JzF!ntEZGvA*es!a zx&!@6VG(>=c?4}BcT#$WkN zJxkS-e^!vsu$f3Yf1iwCgSB=3q5gh!G7d@ecf?;q-JmN;!Tui_t4H1Om!i5Fr)N#! z^@XMMv%<)h1K!VqPL&VEc0X0+E{&9Pe|~N2;BtrbqApI^hbbZKFg9xeH$iQ*OXqFP z&$O}vCx(3{F9%za&f>C|cbc+encGiANQ4#2iC8-muNx$|IKSkZb1D4@6lZE26ZjQ5 zk^k@MJsqvQp?zl|WJ~#HYMd2HoC?42*pPlx zD-ZaB+aI)Js~5B#qB$Hm|M-1>)WqT{sn_(TekdP~Va_nk!8=TfH^)4YaXoB|uTE$! zfs*Gvpw5$>%1!1zWYR-^7CEWY(qg5-I2T;wuj^^j!s^4394nOXo}cal{d)3yhs3W% z*LB(Ni$Wc7-@~_uJ)@}yo?JbPj!|B9*^}V}J^#LsdH3|Ae-!g?3(CL8o{A?>zbc?{OYa9PuPSrTM)K*je``BO^*!+Q$cc%w!IqJTgWb?sk=MFy=LZ$= zIgQNly1IEm-hw{s^A-+)AM} z02}jWUD3>YZ_K&-s!Y7r$xzC8nriJ~uezkz$v+Lb>zBPGsD`}3$HE-@J9>EBIO(qp7d0;YFF0n&>$7}Cz|#%{PAV{^ue_|k6{jWcqeYU~>3H<49uu`a^KsKN)bokr-LxN6lTv#jkpPkK@B7{5 zn;Cc-KqCMUF6c1U$Z2*EN#^pd!CahYuQv@IikP;qa7B)38kSRxx8E7zYSuY zYH{bc-oCR>^y4IMzx)Uy5A+deig*w(%jJsu8|0q-Z+-i#=VjK{$2!b^jqs_qe+W#o zHxa!Yk8CZYcVdaYWGg<>a7cf`aCLF7mZ>B@N!76SyV*wby^$rgzk1I0th*$2Ly?$S z&%2*QpG8kzJw53yk3gbV-`&p4hTDBBqa2ZXXTHPJs{dr}I`frpl~TaZkB%lz;kqU2 z?3QI|+|=Yn{aUs?wk`>t+L%7?KPNFgo*1h4dmJ;%#1%W;*Advq!x1CB{kr@$aT~~6 zD(9%o)V7zYCvzgcUqDB488Rh7X-cgB{P1UXt=t{v-FyrwIEW$bf;J6y>t^L7${xn! ztcLd&saCC|Od#gZ9lXCfTfWxeRVa-%dh!*&d4Oiee2CvJ<=07Uo4g{vaET&!3KyRBC>4HfrWyS$ikP1H&A zP0n*aeGMBP{TdTgM4T^a7j-;=?w|w+G^^CZ@(CVrmN-kAXqUIw+MExniZHw|kNnqG z@=N<6kVuzQr?h8iwz+Evb+1eyo!Ya$?r6hb>beE~*F3qr_$SMeTD_B+>rd)Tx>T1$mlmUmo=GbS|-l z6|Pt`yPjS1ihowZgG<;(9X)z8H1Z>B&SFn^4#$GI1isx^kXdm#O!J@5F!cQ(crOtSdX4r9{wr2;BUin>0ZN6ofgyxi}2YvLYRG~Gs`jl5oBfUB?&jZDKRUt zS@a{U!r!335klJ)rK*OIs~ze0n;0PMXANkh{FEN9b=@d0TNSqAS}`i#gM2{tiw#WL z?znW_74enmQ1IJ>9PZFXJ-&&x?;UOj*FT6ZInE`$ERUQi93OjyVtm^RlV7h=o@8x` z$0TJm3}i+5P1=!_DB8+Nw5jzqw*uuirGazK=42(b525>bKlFoxtBP%=i@JgNot{xW z@7%}l{jMtE)m}e433vUB^*m<+F0(pV6_FJ$@9=(0v&TqSOM~MGu`!;uZ&cP~$HY<&5kpsnp zf}8@lmBkx+&D*s>^YOqqZGax7yRUIRq)GGh#tj&Uh?>z3yL#1?fOY$Us@PAM{TxPa z%QK^-?@pv9ZT{{ZtQ_aoDtjmt#L$zF*LaVy94nJhI7w9~F&Ce=kh3kC9`eB;k@y7*?TsFf?72<=S>)+r2 zrJ7I5PjJK?!;cfRf@Wt*2cJ-;6>kPb67D;F<@g>(D$?0R7+jb`a0npdG`u$+i_B!- z7q%rigW6Y}L~Y|6|5F>K#}b9m0-6Pjas=N8bV6PC|Fsy)G3Y{6*491!UhUl~Ea@S3 zlJJ4Tq*HtfDiX=J6b&|xj`cViB#CA^^B}`EoQV zcjwNKp3L9+ogbq)ipktKF9;^XX*T6ZFe6mY^L##r*=vXNbGf*K2H$v;?V_R#Jw-6@ zcFyZ3lE}7ij2!(8@tLmA6S+dar6foPAC?>`*1TWpa-z+8Nk@w$vwRr+yA@4)fBER| z%M+!fgC(htZ^0>>G->bAf}Z$aGn^jX`I;qE%m|y1MRt<%HK8xR8z#K{pD{j6s6-J{ zP<&E>zvJliq54zqx)YgSf28GqTQK^7C8@%%RD8wzaY%YQ7IgC>x?FI-F{Nf&0=5HZVzBk(2m6t|Z zkjtWg47%Wap~>!8)gqVor7?^Q2qmxdU>ZW%!Aq785`b>HO52d;x917#J&$Rhx2xSx z3h_;upe44qp*;h;pK?1N#>vG!yzcotBsWy~%=-$NU7G?i;tf9JG}n)n7~8%4vyuES z=L^o@@lpA*QsHn_h%f#AP+Klhkk_zF_aC2|Ppo9oO?>#NG5HCVrLg=?TZtQ+cl-y! zr707EhZ|ZqWb=JV(kc6On%7n$aE<%<{qMZh*u^Zqf&*Vq4+6bZbQpzsS*``frB zi1GqPXV{i*D9%>Qy)pqcR+Qumw?^I*U=e$>DZMzInUDPuiMM6c*vkk!RUfoJ2e6E+ z=&10r@-7ra{L?!?)oQMYKUu)t%k+)2Fg6{YMvtYW!LNJ&mhG$(NdMdko@jl!(D7>W zO{8oZxzInekq%}i4AUZ4B1}8ZT4SXtQzo}-V)aqW$B1S%n&?yfDbG=seY)#{YZHg5 zf+S%11A_Z&C%*50+?V?1oYTwqr}`NFfZTauxSDpZ#ls-`UfKMs)#q1LJv}x{ie@`# zimPogcma}=_VW|kWi?N_C9{H;qXT_o09uQk#$Hv~DS{IYeUIGt4;rOx8_9}IPOI@B zQn-bnsLO#<3P#b4BVcd(c@j0zj6um#QvxTdV&dKSgrH@X!@c3qbglFPr?D527g*jb zy@%3x@evvd#1Vl-9AD!2{~2~Ke<8VhpiRB2p5L{<>!~HNY=h}%yStd~|NzNXfB4HTI z&A?CRRLVe}hpH<#cFiRRR4Lq>Jj}o?s9VeH)X@vUm>T}-=R~kGp;16R7L+ZvQ+2##|wj@G@%My$xv+?w^LwG1Goj^ zIe9PBRHzCsR26_~OOxeFYBOp)5?&@egxANVS>Syh?q;%K9s2gJF8kl~N+m92svWml zSoeag;bIyddC20Vx&1{`V!I8k()lX_P@djxSYs8qP484RghHZUuZ{Uav~pJ`95gTx zWnhrMeoX^DE&#xG&QhfD}u1a*M8k6k&pm0Om zUOXpCw)kD3ZcFa6g1uo%D}T?vzC$+j!5mfFV5Y(Xp>-1t4jMDHx55J6QB^IfT>X~o z5+e)#1+f_WefEQ_Erg%nDb6rJSt`56=4%>evoyQ&F+w?efY?zT9TQy?1BKSxk5N7l1e)s69&gU9C ze=E!GBdqE8Es55{r(nhpXUM~nveSz*x1X^E-&T~|8n2alKHL}iRiM1h?Dp(8f{k*f zX8poOwnymVv^1;M*roY}8J^qT_x5>W<#*rnkSf-+sV_`!wTyxYRl~c$Q?y0@ETvFW zvoI~A_=aR@CS13e%aI=kS*#Rn>sAk+be+Ae(@;B`f*f!l-X;oG*64-~lbVF6b%%2dP$my3=Hw@@Q* zLVIbo#4gCXYwp`!H1K%uT|oBm=PwnPt{sUTN}-*6GZ8Uo;ea|aBck{STduZy2`gOB z+SsLqkfl2nl!N%co2(l<}gfZ79*W?nJfAzz+Qv3`svas=c47plUoNr zU%wYmF>-br6E;r6Fx1nU*$imCq%I)KN02_dGJ$`%Jh(7;&?}44j%zp^(y)17Zf$ln z)iLYs@k~g(Ku^S_p0dO|jVsGY^LIO1Ddww9Z0SGu9t&&(VIe(!8O6tfy};NRzSBS5 zo6lZw+y_25w`gHlplX2@BFD1Ada@U)-eC+mbM)AOx=F4!tMKA!--w$`|bYwM6!r4s_2oz4%EwLgi**$LN zX3|E!jX(?Rn?sxD%D2t|oFv~Q5|T+Om)az|^(OLa(I3)S!OxL$jk+T=pKB(1db!tfA+Rc#9L<0AQ%iP*}iW52c3hQ0t0@n%K{gpkp@#reTXJO}9X?Ea%4I3o+>(d9ft{*x)6axVAK zh_SxA6-b?YmG1%V*-2#$xZx}>=iLU-_MYUb{3?++g^5e&)#^|3-|gR{Ki0JcFBSJQ zy4%Tv<=S4KfLUuHjo$-*;ti4e^JIJVG83_g-srG@t4Mmg}k|GwhZ_UBP z?mUz+h3`WywEgK~??-TMwmQF3WLKbzVawV{q-W^y)qbty>NPXsF$>3&Q{i*G z_bC!y&@%G&Z{7+gL&K!r%W_u7Fln`WpE+5h-NnPGvwg({7HP@Xf1d_Vw7H+WS(k`| z`qP>Oz0aF}h1Lx-&{GF=6PnDTW0T_E6$bUhe?01(pN>%v*^@NI6Q{TDCYB4U#ELM8 zY}6!Bd}qtX9i;*O%B_(!H4#5M`7CN+HS%Tew*g(8$8R2ojiLjXA6J5gO1&i`1hZLIRRn&myjSrkU8iN7qn=nwub$Yv9N z@0#sR!5a7&(w43$6Gjw#8fg*(cT#D)V)f7U$2Lugc7FPz)b@xwC@L^aNo7AO_**KcrMhL&Y*ni}Hu|+~@6Mxgw$)c$mM+NwtM7{oqx`1Nzs>NCK-2f44_v zYZ}8IAG+TWx|#ciq&(wg7T_AW=XB;jKI7e6j;KivJ0;NxO7ut>;Ihcmo+0(y`aqBF zkJjtCdVWyFQ?gJ3ex{5c^mLYVUg4$xLujCg$-aJ^YWfnnGNq5Ar&?jU&oSb@9Tva2@8t^7e0Y!#MT(c!sYw z1y$u=kVaWaIQ<;p1RStE;_^oSO{O(8EQZ%$+>P=Ecp`Y-ed;6D)Aiqxfyq>~M2pAA zj=lu8w-!F?#C=~~a~waV<2C1)x^^`_3@`rJ`^7^~hr`3_S;sx#xB53)gchiHGZ4Xq z0+>1C89e6d6 zN9U9CiIbg;rcw3dQu9+5S6jcywS|7kG^+KKpL{7KTpuqD|`Q)oY zbphq%2!1j;kd1^;Oh0A0*m?1ONL|;xzPhwp-%l8z-3~VcCi9M?u}QhYH96 zi`$un?a|X(ahOs7t3s!LAzr&@6px@(GRNEjG}wzYlml7q#NLcB@T-{hp#FM#;TTk~Ow6)bWf``Q!OIsg`4tEwkmK0OO zX@6B#{Qm6ze&=WaK~X~SN%#^!UJ((gI}ERRf1azer)2s4NY^T#yNKh87SZYO)^j~O zmmx#!I^%?Ld5X*a^LQlho)>J>vEzZ0daBl;@07SgQMn*sGZJZYXr?;VzL5YScb`}> zv^ckHd;IjHYLCxB(%FDPe}3YD3$E>m_4Pq5#lsB=qv2v@YP!VUWI7GEpUH;d?IM}e zUcNuNCS(h^13BZPKmK$tJ}>@+)~sO%XH?N~Azt4=3P27He-b=qxb>lIFP%%e93KV; zl;bZ@NU^@7YG-|46BJlu$&LB;Z{?X;@3=C+YMp24anddFA^CU&P40VO63MpQP<=`9 zJHJcJkDGprr9Zv$mTyW;m)hILgLuk;@{h8VSCR*-BA#}B`qcLfm7X^O@js;e32EPu z@VD$-(iYJN-Cv-3`L*rA@Pl33Yh&{EC5qr#{_nJpUTyV@`~&ta1h^s`dr9ln@osl~wfJT=>iWwEQ$9Xl^j2o|wucC7eInuWZ+ag0aaBMohrQHq zcSDu;7+XGZsP!1VQ4H`~Iav%=p339>>a28<0cz$PG&ctYF4fwA13y6`wFreg8Vc4t z3HmI??%%u;eQQm?Vsf7{z9X21&K)Txqt%HN+?`LFUL6Y{tTkkK()!V9@s~?t7sK;X zsxS0(L)Fv0?1!a|_qIpBhM3?UJ^X(H0tx;0Rk6ijm>bN`7jMr5+QD&AA~VYapaMa+ za2%aUoJF=xXIX-lD4(aPAH2OYue&I~DB-%O5O3qThO;Z+9AU!LIK<2IpZe5)6=zik zx&IE!t}rthPTIb;1dr5`XDaZnKT$V5=Z>Ch?INa%F604t@UdP6MOpSi->Z4VcUPF7 z>OCho&MG~NT&lx-m9Oc*ld_i3KZ@ysKb<+ZdRiUG-90d-xOvu>=lGV3{DHNFVg^hc zrs)Ko*Sa*c; zj>WZ4?YNXm13{lBAQMqjzmr+Td%#<_qdIj|xdkTletsxRA^~;qv{4L3oZOlEGT2V+ z>;3BK^9wdej&TWZlpRDhYRku11WkX;PU|UY8U{YGsy)Jw}w9dVv(r#w{;# zk~W$6{eX`Q(t4LY@Kr5Um`v2#hgddxk9@)BNnKgZ!Gft6N`4cQYRbp=y)1hNG^tKK zmf0M=+#~1uwa6GC02o&)WyavWyD~6TQkDIaJTYS-{zwWve%Y6J6<)5!+u2 z@bZN3)6U_{FqYvO-q6f&RquWTbt=Y;7Esz~I8j_M+}ubT#{n5&K-c|iEn)Z25x_Fb zno^AmP7O~oDsc0T>p#LEH-j9AcV(~BE9TXVyuANk*oO4d+fLLm5c7evBIL6Q56bj# zaLNZ|O|>Fn)#WESC$GMEUq-Ljm_8|N64()F%12#ZurfvHF<`4*198IaJ8M{8aUZhp zavkViI8jrU1DHFhA5$BZBe}(Vzci^w#KIbP+l#7C38U%s7+A-cRP$L2B#lKOr1etJ zOV0Mx@OXs!)I9_!Bwaa%N{r{vT-LBID(|H8K6P8-E2rdMK*LDpExNF&AtF}GR^mB+ zbIhl=PVHPN?Kr3YXrfmn6{F})w*JSfT+ylwx`6(-D_KMb4*;DFemJ5WHJBnWp?uP> zV~c>`4+?NbqsfE_v-uAB-b2HOjtZ+kZ||ajvJ1)gSi4Mm)#m>0XJ8?i#yO&3i^~1A5L)?jkh1Mo(ZSr-m~QAgkdox_H{Htj1)b0BW{&8d@Vjhc zVKRx+I%v$q`-s)r$t1zDd3o}2H@3&ifE_RfFYM_^Rv%A{-_zWT128H2vT5(GLa|Ku zki-q3@i*;fvc9|FSX(dG$$2aC($}($=>K-z*#3>=p&(;E*2qNZG}A2pd^!Nz$IMjf zjH&NCC&#?oD!s}q1LG?Y-a%4%MKF*WK7Shb{Y3^R26>jYeN7~-Y72~^_h{sDfl$dx zrp~AMnM3PBy-c9KUM_?28hZ!NfcQo9R38=NL`{Yx3|FRuV3p*-1EAZa1u4d6D2#)( zYWw|8hc&FAbEu|n71JThKF~I3A3)MiZxz3#5B3o1%(wu6YzctRcAsU=#hrI0K=vX9 zK_j-a66Si=Bduy!>`o_emnJrfp-xjl=ML+TKw5-r**sD&B>tn~p!J1SM$5;&W4yQR z<3cn?Zg6<7<4|MQiN=zC8^wn4ldNO=t5v`jwq|FJg?-2A{!0JEmlrj9e+R&j?DYYQ zJYII2(!*W_@lSerI?*0Ok*G(HNo}iZ;aWto`Tx48&U6N%?fP2Z;*EkF1&6+aJ-e^{ z`^!w`_jz``zbKO=)sc2>Rf+m=r&I8c9WpB@NTAG72iZaVZCNVeEz3{fWpp1NVE;}HL zI~NeN`E_N7!Y*ilg1msbLSP3@UTQMEPx(Bak1g+4h=E&Ibv{NAkC( zs(NC7j&^r@BAj^wVenMr*EcJR+{?ie0^s><|FB@=J?SFz66g*yNDZggT>vK-YuXXG zsO+VnA0u7*M;#Efq$c6uu|XHko8VzlOJbtz=$=oz;1!T`iD^G(qNqh~#1biH3Ss8U z#s|qLDXrjh9(bWaE9fJ3ArJ0|nN!d7iZ7zxJ05?+4{3&(qkSZAL|N4l-#)n{XRM&>rIgK7oA5R^$3u;c9ek$2eU z$$L=$J{J@&4lJi=g!{B> zAcYkyJ&e>JjMq>yg*jKcpiBXekCZn8j+;MX38ETDz0GGzJ_J1~4*NX%C2LEWjvdza%-W>}n4!lXSNZ`{L$_0}55^t)l6s zfA}81@^gm}{U9=tP7fnG$#a>n()ANgQZ)UNBtkK6OlYz7%eL~hA(Z7^3s719O`>f< x3gYU4fQ=q@aEfmg?uvhnis^+yA!`H6^krgFLm38~U&oLKulo>?00000001vn=T!gz diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/notion-api-audit.png b/openwork-memos-integration/apps/desktop/public/assets/usecases/notion-api-audit.png deleted file mode 100755 index 2ee301a6188d5bf06e797c215cc4bb87f5f1c722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5158 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 KS;cAZgns}t!zJzj diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/organize-data.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/organize-data.webp deleted file mode 100644 index 7ce1e8e6797ce295cdb7f07d7370453fc6abc5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcmV+{2h;dcNk&E_2LJ$9MM6+kP&il$0000G000300093006|PpNS*)y00DPkkZt7L zAHmh&R6Zi&JWaCaVU$;`N#YAUB`<0-4fB(KO$R_j0 z^{>MHd4DR&?vlU4dqV67cz^N#@%zCUfBi>uccY)#YXZjy{LfZA>U~H5EBt4`PwM~s ze!oMML_|bHL_|bHL_|bHL_|bHL_|bHL_|an)&pJ2`-)6-^*0CNjQ}O_daGtbIgLQu zn^p%^RaD~q_Q-l9`loz$kfRrD(=}oHgsl#p*))#Bp~4a^Y1ibJqeV3>yx zb~GOnsZ-+a?12QM@7Q0{CJLc0mgZp*=>qgV!0m$wENB zM8C#a=|g?YnyP~?el^S-D%WBO`$uetAsQEl=WFpRh0Ev zEn=Ix7`8R`%Ia8uOpJf!v5lZN2EZWDfCjb$lQ*q5V>$k3!WUu{q|ElX0hV-T{U_m@j76p->+Sy3^GHLi^Ji#HoJNp3H z$Kw`oCgfb?wxaMNVs&QfUgjgw$J{OaS(guuXXG;PxYR^?zn9!U{FNP;C8?GN&=NZuH1 zo&A<4?9=iGb>*f9IL@gPfJr5)o524%!zA;2Mo%N8oG+F_S(_hDIsT@LD)JKP&poCZNckwPx%Li7)a1@>Me2cy!P zQva&{rMhyDZzrbllp=V#x&&)~tph6s=e86a;AiMJ6GOtY@Q?83F^X0;Lv_aWkQT1n zB`g?3TShPQwAjlu#CmO!w`e^v_PG_;xfgF*ktH9e*8|8(o5Uq>T2lMrUf`H#ZHIKO zReiO;V?qEPCI6XdEJyNyqc%U^H{_6~*efK=*tSB-{CJ=V0>PzU(S)tn)%%(4lDhxO z-+&KR9@{01u-S5rFR2V_%ge>az&q?CjTKEv7?IAB1~r#;8GaI3+s`qv^q%oog>lY9 zkMV8g6H{99Xybsz+w-5N_`-j}Mu;jgc|y19Wu0~QPXdx33Twse=yj`$-|1~f{TOIh zL&u2Y*;%v@7R-EG5axs6T>;o%?_W5wgvpy%Wu8L1 zoe+Y$_0`1t8l=5QDxX$t3r|Q+C&7R~L!14&rnGzMP3++{=tiU-OR_mMl`+vDzw=@| z$heHF$q@HVlpq!#G@tAMUo&R%tO@jEDe0}lK;$o-^z*!1y=JIDAd$gKQ?In&e5>W3 zY0VEn07C94ZO4vG8zX2pfH)8EPF=Z>-F)SsshRQ17e*=7xO-Z;{+nmEm065&%(caG z(e}`?-9QDI(PrXU+n>v5=`>vNhP1jWji|lV1KMke&HKM5U>?!1DeWOxMv4z=+nu) zy%Cf;8JaV=q47W=KbHyO=cSo(d1R_{l#B@uHT8Dariol1E*=|y*xAG1K7;}B(SXn? zsz|gEhcvi&#G4#}jA=R&2TNuKxitR!01b_c a)KZWR(_A9$(xDsT&o|@B>A`>i0001LHIY65 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/personal-website.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/personal-website.webp deleted file mode 100644 index 8d5a4cb2995760955a3ee16f3c8a9b70ee4aa17f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1758 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/polish-writing.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/polish-writing.webp deleted file mode 100644 index 389483b495320612d6c6b452de54a15ffad619db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2928 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 a-Punt1S1sCZckxEz$4MX`R6o%0002Th`l2K diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/portfolio-presentation.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/portfolio-presentation.webp deleted file mode 100644 index 31cac7a6af21a6fe0360bb2d78fd058fa08a1bd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19626 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/prod-broken-links.png b/openwork-memos-integration/apps/desktop/public/assets/usecases/prod-broken-links.png deleted file mode 100755 index 7722812995d917000603ef77996b072442f7ff34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31960 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 diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/professional-headshot.webp b/openwork-memos-integration/apps/desktop/public/assets/usecases/professional-headshot.webp deleted file mode 100644 index 27447e7df709220944b0656a3fc459b0d291730c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27364 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 D7(?3; diff --git a/openwork-memos-integration/apps/desktop/public/assets/usecases/stock-portfolio-alerts.png b/openwork-memos-integration/apps/desktop/public/assets/usecases/stock-portfolio-alerts.png deleted file mode 100755 index 9fefc10d815864ca06757c4848c918097506cfd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6425 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

NzZCvz$*b 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 diff --git a/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Light.ttf b/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Light.ttf deleted file mode 100644 index 14753d29775c7caf5b681716b6be431c85d94f3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56328 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 ~~aiE3a2X*q7lEd@Jgqu#BD~dW3|O2R8;k9=t<- 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 diff --git a/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Medium.ttf b/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Medium.ttf deleted file mode 100644 index 4deeae0e4827fc7deaf317e64664fa28dd153df2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56376 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 diff --git a/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Regular.ttf b/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Regular.ttf deleted file mode 100644 index b25fc0cc1cf3bd9cdd22e5a37f505f4d9fec474b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56344 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 - - - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - com.apple.security.cs.disable-library-validation - - com.apple.security.network.client - - com.apple.security.network.server - - com.apple.security.files.user-selected.read-write - - - diff --git a/openwork-memos-integration/apps/desktop/resources/icon.png b/openwork-memos-integration/apps/desktop/resources/icon.png deleted file mode 100644 index 9e0efee4e78685881086124546bde887fc07aa75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26734 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 C6@T9V diff --git a/openwork-memos-integration/apps/desktop/run_local_ui_prod_api.sh b/openwork-memos-integration/apps/desktop/run_local_ui_prod_api.sh deleted file mode 100755 index bb15523ca..000000000 --- a/openwork-memos-integration/apps/desktop/run_local_ui_prod_api.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -# Run desktop app with LOCAL UI (Vite hot reload) + PRODUCTION API -# UI: localhost:5173 | API: lite.accomplish.ai -ACCOMPLISH_UI_URL=http://localhost:3000 ACCOMPLISH_API_URL=https://lite.accomplish.ai pnpm dev diff --git a/openwork-memos-integration/apps/desktop/run_local_ui_staging_api.sh b/openwork-memos-integration/apps/desktop/run_local_ui_staging_api.sh deleted file mode 100755 index f4e248d15..000000000 --- a/openwork-memos-integration/apps/desktop/run_local_ui_staging_api.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -# Run desktop app with LOCAL UI (Vite hot reload) + STAGING API -# UI: localhost:5173 | API: lite-staging.accomplish.ai -ACCOMPLISH_UI_URL=http://localhost:3000 ACCOMPLISH_API_URL=https://lite-staging.accomplish.ai pnpm dev diff --git a/openwork-memos-integration/apps/desktop/run_prod.sh b/openwork-memos-integration/apps/desktop/run_prod.sh deleted file mode 100755 index 89e165e00..000000000 --- a/openwork-memos-integration/apps/desktop/run_prod.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -# Run desktop app with PRODUCTION UI + PRODUCTION API -# UI: lite.accomplish.ai | API: lite.accomplish.ai -# This builds an unpacked app and runs it (no hot reload) - -set -e - -echo "Building unpacked app for production..." -pnpm -F @accomplish/desktop build:unpack - -echo "Launching app with production configuration..." -ACCOMPLISH_UI_URL=https://lite.accomplish.ai \ -ACCOMPLISH_API_URL=https://lite.accomplish.ai \ -open apps/desktop/release/mac-arm64/Accomplish.app diff --git a/openwork-memos-integration/apps/desktop/run_staging.sh b/openwork-memos-integration/apps/desktop/run_staging.sh deleted file mode 100755 index d83f770f3..000000000 --- a/openwork-memos-integration/apps/desktop/run_staging.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -# Run desktop app with STAGING UI + STAGING API -# UI: lite-staging.accomplish.ai | API: lite-staging.accomplish.ai -# This builds an unpacked app and runs it (no hot reload) - -set -e - -echo "Building unpacked app for staging..." -pnpm -F @accomplish/desktop build:unpack - -echo "Launching app with staging configuration..." -ACCOMPLISH_UI_URL=https://lite-staging.accomplish.ai \ -ACCOMPLISH_API_URL=https://lite-staging.accomplish.ai \ -open apps/desktop/release/mac-arm64/Accomplish.app diff --git a/openwork-memos-integration/apps/desktop/scripts/after-pack.cjs b/openwork-memos-integration/apps/desktop/scripts/after-pack.cjs deleted file mode 100644 index bbaaaf1b2..000000000 --- a/openwork-memos-integration/apps/desktop/scripts/after-pack.cjs +++ /dev/null @@ -1,256 +0,0 @@ -/** - * Electron-builder afterPack hook to copy architecture-specific Node.js binaries. - * - * This hook runs after packing but before creating distributable formats. - * It copies the correct Node.js binary based on the target platform and architecture. - * - * @see https://www.electron.build/configuration/configuration#afterpack - */ - -const fs = require('fs'); -const path = require('path'); -const { execSync } = require('child_process'); - -const NODE_VERSION = '20.18.1'; - -/** - * Map electron-builder arch number to string - * @see https://github.com/electron-userland/electron-builder/blob/master/packages/builder-util/src/arch.ts - */ -const ARCH_MAP = { - 0: 'ia32', // Arch.ia32 - 1: 'x64', // Arch.x64 - 2: 'armv7l', // Arch.armv7l - 3: 'arm64', // Arch.arm64 - 4: 'universal', // Arch.universal (macOS only) -}; - -/** - * Map electron-builder platform name to Node.js platform name - */ -const PLATFORM_MAP = { - mac: 'darwin', - windows: 'win32', - linux: 'linux', -}; - -/** - * Get the Node.js directory name based on platform - */ -function getNodeDirName(platform, arch) { - if (platform === 'win32') { - return `node-v${NODE_VERSION}-win-${arch}`; - } - return `node-v${NODE_VERSION}-${platform}-${arch}`; -} - -/** - * After-pack hook to copy architecture-specific Node.js binaries - * - * For universal macOS builds, we need to include BOTH x64 and arm64 Node.js - * binaries in EACH architecture's build. This is because electron-builder's - * universal app merger requires identical file structures in both builds. - * At runtime, the app uses process.arch to select the correct binary. - * - * @param {Object} context - electron-builder context - * @param {Object} context.packager - Packager instance - * @param {Object} context.packager.platform - Platform info - * @param {string} context.packager.platform.name - 'mac', 'linux', 'windows' - * @param {number} context.arch - Architecture number (0=ia32, 1=x64, 3=arm64, 4=universal) - * @param {string} context.appOutDir - Output directory for the app - */ -exports.default = async function afterPack(context) { - const { packager, arch, appOutDir } = context; - const platformName = packager.platform.name; - - const archName = ARCH_MAP[arch] || 'x64'; - const nodePlatform = PLATFORM_MAP[platformName] || platformName; - - console.log(`\n[after-pack] Platform: ${platformName}, Arch: ${archName}`); - - // Detect universal build by checking if output dir contains 'universal' - // For universal builds, appOutDir is like 'release/mac-universal-x64-temp' or 'release/mac-universal-arm64-temp' - const isUniversalBuild = appOutDir.includes('universal'); - - // For macOS universal builds, we need BOTH architectures in EACH build - // so that electron-builder can merge them (it requires identical file structures) - if (platformName === 'mac' && isUniversalBuild) { - console.log('[after-pack] macOS universal build - copying both x64 and arm64 Node.js binaries'); - await copyNodeBinary(context, nodePlatform, 'x64'); - await copyNodeBinary(context, nodePlatform, 'arm64'); - await resignMacApp(context); - return; - } - - // For single-arch builds, just copy the target architecture - await copyNodeBinary(context, nodePlatform, archName); - - // Re-sign macOS apps after modifying the bundle - if (platformName === 'mac') { - await resignMacApp(context); - } -}; - -/** - * Copy Node.js binary for a specific platform/arch combination - */ -async function copyNodeBinary(context, platform, arch) { - const { packager, appOutDir } = context; - const platformName = packager.platform.name; - - const nodeDirName = getNodeDirName(platform, arch); - - // Source: resources/nodejs/-/node-v20.18.1--/ - const sourceDir = path.join( - __dirname, - '..', - 'resources', - 'nodejs', - `${platform}-${arch}`, - nodeDirName - ); - - // Check if source exists - fail the build if missing - if (!fs.existsSync(sourceDir)) { - const errorMsg = `[after-pack] ERROR: Node.js binary not found at ${sourceDir}\n` + - `Run "pnpm -F @accomplish/desktop download:nodejs" first to download the binaries.`; - console.error(errorMsg); - throw new Error(errorMsg); - } - - // Determine destination based on platform - let destDir; - if (platformName === 'mac') { - // For universal builds, we need to include the arch in the path - // macOS app bundle structure: .app/Contents/Resources/ - const appName = packager.appInfo.productFilename; - destDir = path.join(appOutDir, `${appName}.app`, 'Contents', 'Resources', 'nodejs', arch); - } else { - // Windows/Linux: /resources/ - destDir = path.join(appOutDir, 'resources', 'nodejs', arch); - } - - console.log(`[after-pack] Copying Node.js ${arch}: ${sourceDir} -> ${destDir}`); - - // Create destination directory - if (!fs.existsSync(destDir)) { - fs.mkdirSync(destDir, { recursive: true }); - } - - // Copy the entire Node.js directory, excluding unnecessary directories - try { - copyDirRecursive(sourceDir, destDir, destDir, NODEJS_EXCLUDE_DIRS); - } catch (err) { - console.error(`[after-pack] ERROR copying Node.js ${arch}:`, err.message); - throw err; - } - - // Make binaries executable on Unix - if (platformName !== 'windows') { - const binDir = path.join(destDir, 'bin'); - if (fs.existsSync(binDir)) { - const binaries = ['node', 'npm', 'npx']; - for (const binary of binaries) { - const binPath = path.join(binDir, binary); - if (fs.existsSync(binPath)) { - fs.chmodSync(binPath, 0o755); - } - } - } - } - - console.log(`[after-pack] Successfully copied Node.js ${arch} to ${destDir}`); -} - -/** - * Directories to exclude from Node.js bundle. - * - 'include': Contains C/C++ header files (~53MB) only needed for native module compilation, - * not required at runtime. This significantly reduces DMG size. - */ -const NODEJS_EXCLUDE_DIRS = ['include']; - -/** - * Recursively copy a directory - * @param {string} src - Source directory - * @param {string} dest - Destination directory - * @param {string} rootDest - Root destination for symlink validation (optional, defaults to dest) - * @param {string[]} excludeDirs - Directory names to skip (optional) - */ -function copyDirRecursive(src, dest, rootDest = dest, excludeDirs = []) { - const entries = fs.readdirSync(src, { withFileTypes: true }); - - for (const entry of entries) { - const srcPath = path.join(src, entry.name); - const destPath = path.join(dest, entry.name); - - if (entry.isDirectory()) { - // Skip excluded directories - if (excludeDirs.includes(entry.name)) { - console.log(`[after-pack] Skipping excluded directory: ${entry.name} (saves ~53MB)`); - continue; - } - if (!fs.existsSync(destPath)) { - fs.mkdirSync(destPath, { recursive: true }); - } - copyDirRecursive(srcPath, destPath, rootDest, excludeDirs); - } else if (entry.isSymbolicLink()) { - // Preserve symlinks (npm and npx are often symlinks to node) - const linkTarget = fs.readlinkSync(srcPath); - - // Security: Validate symlink doesn't escape the root destination directory - // Only allow relative symlinks that stay within the directory tree - if (path.isAbsolute(linkTarget)) { - console.warn(`[after-pack] Skipping absolute symlink: ${srcPath} -> ${linkTarget}`); - continue; - } - - // Check resolved path doesn't escape the ROOT destination (not current dest) - // e.g., bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js is valid - const resolvedPath = path.resolve(path.dirname(destPath), linkTarget); - if (!resolvedPath.startsWith(rootDest)) { - console.warn(`[after-pack] Skipping symlink that escapes directory: ${srcPath} -> ${linkTarget}`); - continue; - } - - if (fs.existsSync(destPath)) { - fs.unlinkSync(destPath); - } - fs.symlinkSync(linkTarget, destPath); - } else { - fs.copyFileSync(srcPath, destPath); - } - } -} - -/** - * Re-sign macOS app after modifying the bundle. - * - * Adding Node.js binaries invalidates the original signature. - * We re-sign with ad-hoc signature (-) which allows the app to run - * on machines with Gatekeeper when downloaded from the internet. - * - * For production releases, this should be replaced with proper - * Developer ID signing via electron-builder's sign option. - */ -async function resignMacApp(context) { - const { appOutDir, packager } = context; - const appName = packager.appInfo.productFilename; - const appPath = path.join(appOutDir, `${appName}.app`); - - console.log(`[after-pack] Re-signing macOS app: ${appPath}`); - - try { - // Remove existing signature and re-sign with ad-hoc signature - // --force: replace existing signature - // --deep: sign all nested code (frameworks, helpers, etc.) - // --sign -: ad-hoc signature (no certificate required) - execSync(`codesign --force --deep --sign - "${appPath}"`, { - stdio: 'inherit', - }); - console.log('[after-pack] Successfully re-signed macOS app'); - } catch (err) { - console.error('[after-pack] Failed to re-sign macOS app:', err.message); - // Don't fail the build - unsigned apps still work locally - // and users can remove quarantine manually - } -} diff --git a/openwork-memos-integration/apps/desktop/scripts/download-nodejs.cjs b/openwork-memos-integration/apps/desktop/scripts/download-nodejs.cjs deleted file mode 100644 index 9325489ca..000000000 --- a/openwork-memos-integration/apps/desktop/scripts/download-nodejs.cjs +++ /dev/null @@ -1,205 +0,0 @@ -/** - * Download Node.js standalone binaries for bundling with the Electron app. - * - * Downloads Node.js v20.18.1 for: - * - macOS x64 - * - macOS arm64 - * - * Usage: node scripts/download-nodejs.cjs - */ - -const https = require('https'); -const fs = require('fs'); -const path = require('path'); -const { execSync } = require('child_process'); -const crypto = require('crypto'); - -const NODE_VERSION = '20.18.1'; -const BASE_URL = `https://nodejs.org/dist/v${NODE_VERSION}`; - -const PLATFORMS = [ - { - name: 'darwin-x64', - file: `node-v${NODE_VERSION}-darwin-x64.tar.gz`, - extract: 'tar', - sha256: 'c5497dd17c8875b53712edaf99052f961013cedc203964583fc0cfc0aaf93581', - }, - { - name: 'darwin-arm64', - file: `node-v${NODE_VERSION}-darwin-arm64.tar.gz`, - extract: 'tar', - sha256: '9e92ce1032455a9cc419fe71e908b27ae477799371b45a0844eedb02279922a4', - }, -]; - -const RESOURCES_DIR = path.join(__dirname, '..', 'resources', 'nodejs'); - -/** - * Download a file from URL with progress reporting - */ -function downloadFile(url, destPath) { - return new Promise((resolve, reject) => { - console.log(`Downloading: ${url}`); - - const file = fs.createWriteStream(destPath); - - https.get(url, (response) => { - // Handle redirects - if (response.statusCode === 302 || response.statusCode === 301) { - file.close(); - fs.unlinkSync(destPath); - return downloadFile(response.headers.location, destPath).then(resolve).catch(reject); - } - - if (response.statusCode !== 200) { - file.close(); - fs.unlinkSync(destPath); - reject(new Error(`Failed to download: HTTP ${response.statusCode}`)); - return; - } - - const totalSize = parseInt(response.headers['content-length'], 10); - let downloadedSize = 0; - let lastPercent = 0; - - response.on('data', (chunk) => { - downloadedSize += chunk.length; - const percent = Math.floor((downloadedSize / totalSize) * 100); - if (percent >= lastPercent + 10) { - process.stdout.write(` ${percent}%`); - lastPercent = percent; - } - }); - - response.pipe(file); - - file.on('finish', () => { - file.close(); - console.log(' Done'); - resolve(); - }); - }).on('error', (err) => { - file.close(); - fs.unlinkSync(destPath); - reject(err); - }); - }); -} - -/** - * Verify SHA256 checksum of a file - */ -function verifyChecksum(filePath, expectedHash) { - console.log(' Verifying checksum...'); - const fileBuffer = fs.readFileSync(filePath); - const hashSum = crypto.createHash('sha256'); - hashSum.update(fileBuffer); - const actualHash = hashSum.digest('hex'); - - if (actualHash !== expectedHash) { - throw new Error(`Checksum mismatch!\n Expected: ${expectedHash}\n Got: ${actualHash}`); - } - console.log(' Checksum verified'); -} - -/** - * Extract archive to destination - * Uses execFileSync with array arguments to avoid command injection - */ -function extractArchive(archivePath, destDir, type) { - console.log(` Extracting to ${destDir}...`); - - if (!fs.existsSync(destDir)) { - fs.mkdirSync(destDir, { recursive: true }); - } - - const { execFileSync } = require('child_process'); - - if (type === 'tar') { - // Use execFileSync with array args to avoid shell injection - execFileSync('tar', ['-xzf', archivePath, '-C', destDir], { stdio: 'inherit' }); - } else if (type === 'zip') { - if (process.platform === 'win32') { - // PowerShell requires -Command with a script block - execFileSync('powershell', [ - '-NoProfile', - '-Command', - `Expand-Archive -Path "${archivePath}" -DestinationPath "${destDir}" -Force` - ], { stdio: 'inherit' }); - } else { - execFileSync('unzip', ['-o', archivePath, '-d', destDir], { stdio: 'inherit' }); - } - } - - console.log(' Extraction complete'); -} - -/** - * Main download and setup function - */ -async function main() { - console.log(`\nNode.js v${NODE_VERSION} Binary Downloader`); - console.log('='.repeat(50)); - - // Create resources directory - if (!fs.existsSync(RESOURCES_DIR)) { - fs.mkdirSync(RESOURCES_DIR, { recursive: true }); - } - - // Create temp directory for downloads - const tempDir = path.join(RESOURCES_DIR, '.temp'); - if (!fs.existsSync(tempDir)) { - fs.mkdirSync(tempDir, { recursive: true }); - } - - for (const platform of PLATFORMS) { - console.log(`\nProcessing ${platform.name}...`); - - const archivePath = path.join(tempDir, platform.file); - const destDir = path.join(RESOURCES_DIR, platform.name); - - // Check if already extracted - const extractedDir = path.join(destDir, platform.file.replace(/\.(tar\.gz|zip)$/, '')); - if (fs.existsSync(extractedDir)) { - console.log(` Already exists: ${extractedDir}`); - continue; - } - - // Download if not cached - if (!fs.existsSync(archivePath)) { - const url = `${BASE_URL}/${platform.file}`; - await downloadFile(url, archivePath); - } else { - console.log(` Using cached: ${archivePath}`); - } - - // Verify checksum - verifyChecksum(archivePath, platform.sha256); - - // Extract - extractArchive(archivePath, destDir, platform.extract); - } - - // Clean up temp directory - console.log('\nCleaning up temp files...'); - fs.rmSync(tempDir, { recursive: true, force: true }); - - console.log('\nAll Node.js binaries downloaded successfully!'); - console.log(`Location: ${RESOURCES_DIR}`); - - // List what was downloaded - console.log('\nDirectory structure:'); - for (const platform of PLATFORMS) { - const destDir = path.join(RESOURCES_DIR, platform.name); - if (fs.existsSync(destDir)) { - const contents = fs.readdirSync(destDir); - console.log(` ${platform.name}/`); - contents.forEach(item => console.log(` ${item}/`)); - } - } -} - -main().catch((err) => { - console.error('\nError:', err.message); - process.exit(1); -}); diff --git a/openwork-memos-integration/apps/desktop/scripts/package.cjs b/openwork-memos-integration/apps/desktop/scripts/package.cjs deleted file mode 100644 index 740517bd0..000000000 --- a/openwork-memos-integration/apps/desktop/scripts/package.cjs +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env node - -/** - * Custom packaging script for Electron app with pnpm workspaces. - * Temporarily removes workspace symlinks that cause electron-builder issues. - */ - -const { execSync } = require('child_process'); -const fs = require('fs'); -const path = require('path'); - -const nodeModulesPath = path.join(__dirname, '..', 'node_modules'); -const accomplishPath = path.join(nodeModulesPath, '@accomplish'); - -// Save symlink target for restoration -let symlinkTarget = null; -const sharedPath = path.join(accomplishPath, 'shared'); - -try { - // Check if @accomplish/shared symlink exists - if (fs.existsSync(sharedPath)) { - const stats = fs.lstatSync(sharedPath); - if (stats.isSymbolicLink()) { - symlinkTarget = fs.readlinkSync(sharedPath); - console.log('Temporarily removing workspace symlink:', sharedPath); - fs.unlinkSync(sharedPath); - - // Remove empty @accomplish directory if it exists - try { - fs.rmdirSync(accomplishPath); - } catch { - // Directory not empty or doesn't exist, ignore - } - } - } - - // Get command line args (everything after 'node scripts/package.js') - const args = process.argv.slice(2).join(' '); - // Use npx to run electron-builder to ensure it's found in node_modules - const command = `npx electron-builder ${args}`; - - console.log('Running:', command); - execSync(command, { stdio: 'inherit', cwd: path.join(__dirname, '..') }); - -} finally { - // Restore the symlink - if (symlinkTarget) { - console.log('Restoring workspace symlink'); - - // Recreate @accomplish directory if needed - if (!fs.existsSync(accomplishPath)) { - fs.mkdirSync(accomplishPath, { recursive: true }); - } - - fs.symlinkSync(symlinkTarget, sharedPath); - } -} diff --git a/openwork-memos-integration/apps/desktop/scripts/patch-electron-name.cjs b/openwork-memos-integration/apps/desktop/scripts/patch-electron-name.cjs deleted file mode 100644 index d0ed480ed..000000000 --- a/openwork-memos-integration/apps/desktop/scripts/patch-electron-name.cjs +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Patches the Electron.app Info.plist to show "Openwork" instead of "Electron" - * in macOS Cmd+Tab and Dock during development. - */ -const fs = require('fs'); -const path = require('path'); - -const APP_NAME = 'Openwork'; - -// Only run on macOS -if (process.platform !== 'darwin') { - console.log('[patch-electron-name] Skipping on non-macOS platform'); - process.exit(0); -} - -const electronPath = path.join( - __dirname, - '../node_modules/electron/dist/Electron.app/Contents/Info.plist' -); - -if (!fs.existsSync(electronPath)) { - console.error('[patch-electron-name] Electron Info.plist not found:', electronPath); - process.exit(1); -} - -let plist = fs.readFileSync(electronPath, 'utf8'); - -// Check if already patched -if (plist.includes(`${APP_NAME}`)) { - console.log(`[patch-electron-name] Already patched to "${APP_NAME}"`); - process.exit(0); -} - -// Replace CFBundleDisplayName and CFBundleName -plist = plist.replace( - /CFBundleDisplayName<\/key>\s*[^<]*<\/string>/, - `CFBundleDisplayName\n\t${APP_NAME}` -); - -plist = plist.replace( - /CFBundleName<\/key>\s*[^<]*<\/string>/, - `CFBundleName\n\t${APP_NAME}` -); - -fs.writeFileSync(electronPath, plist); -console.log(`[patch-electron-name] Patched Electron.app to show "${APP_NAME}"`); diff --git a/openwork-memos-integration/apps/desktop/skills/ask-user-question/SKILL.md b/openwork-memos-integration/apps/desktop/skills/ask-user-question/SKILL.md deleted file mode 100644 index 548c27c0d..000000000 --- a/openwork-memos-integration/apps/desktop/skills/ask-user-question/SKILL.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -name: ask-user-question -description: Ask users questions via the UI. Use when you need clarification, user preferences, or confirmation before proceeding. The user CANNOT see CLI output - this tool is the ONLY way to communicate with them. ---- - -# Ask User Question - -Use this MCP tool to ask users questions and get their responses. This is the **ONLY** way to communicate with the user - they cannot see CLI/terminal output. - -## Critical Rule - -The user **CANNOT** see your text output or CLI prompts! - -If you write "Let me ask you..." and then just output text - **THE USER WILL NOT SEE IT**. -You MUST call this tool to display a modal in the UI. - -## When to Use - -- Clarifying questions before starting ambiguous tasks -- Asking user preferences (e.g., "How would you like files organized?") -- Confirming actions before executing (especially destructive/irreversible ones) -- Getting approval for sensitive actions (financial, messaging, deletion, etc.) -- Any situation where you need user input to proceed - -## Parameters - -```json -{ - "questions": [{ - "question": "Your question to the user", - "header": "Short label (max 12 chars)", - "options": [ - { "label": "Option 1", "description": "What this does" }, - { "label": "Option 2", "description": "What this does" } - ], - "multiSelect": false - }] -} -``` - -- `question` (required): The question text to display -- `header` (optional): Short category label, shown as modal title (max 12 chars) -- `options` (optional): Array of selectable choices (2-4 recommended) -- `multiSelect` (optional): Allow selecting multiple options (default: false) - -**Custom text input:** To allow users to type their own response, include an option with label "Other" (case-insensitive). When selected, the UI shows a text input field. - -```json -{ "label": "Other", "description": "Type your own response" } -``` - -**Important:** When "Other" is selected, the response will be `User responded: [their text]` instead of `User selected: Other`. You must wait for and handle this text response - do NOT proceed as if they selected a predefined option. - -## Examples - -### Asking about organization preferences - -``` -AskUserQuestion({ - "questions": [{ - "question": "How would you like to organize your Downloads folder?", - "header": "Organize", - "options": [ - { "label": "By file type", "description": "Group into Documents, Images, Videos, etc." }, - { "label": "By date", "description": "Group by month/year" }, - { "label": "By project", "description": "You'll help me name project folders" } - ] - }] -}) -``` - -### Confirming a destructive action - -``` -AskUserQuestion({ - "questions": [{ - "question": "Delete these 15 duplicate files?", - "header": "Confirm", - "options": [ - { "label": "Delete all", "description": "Remove all 15 duplicates" }, - { "label": "Review first", "description": "Show me the list before deleting" }, - { "label": "Cancel", "description": "Don't delete anything" } - ] - }] -}) -``` - -### Simple yes/no confirmation - -``` -AskUserQuestion({ - "questions": [{ - "question": "Should I proceed with sending this email?", - "header": "Send email", - "options": [ - { "label": "Send", "description": "Send the email now" }, - { "label": "Cancel", "description": "Don't send" } - ] - }] -}) -``` - -## Response Format - -The tool returns the user's selection: -- `User selected: By file type` - Single selection -- `User selected: Option A, Option B` - Multiple selections (if multiSelect: true) -- `User responded: [custom text]` - If user typed a custom response -- `User declined to answer the question.` - If user dismissed the modal - -## Wrong vs Correct - -**WRONG** (user won't see this): -``` -I'll help organize your files. How would you like them organized? -- By type -- By date -- By project -``` - -**CORRECT** (user will see a modal): -``` -AskUserQuestion({ - "questions": [{ - "question": "How would you like your files organized?", - "options": [ - { "label": "By type" }, - { "label": "By date" }, - { "label": "By project" } - ] - }] -}) -``` diff --git a/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json b/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json deleted file mode 100644 index dc7e45281..000000000 --- a/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json +++ /dev/null @@ -1,1650 +0,0 @@ -{ - "name": "ask-user-question", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ask-user-question", - "version": "0.0.1", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", - "license": "MIT", - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", - "license": "MIT", - "dependencies": { - "@hono/node-server": "^1.19.7", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "peer": true, - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "license": "BSD-2-Clause" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/zod": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.25 || ^4" - } - } - } -} diff --git a/openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json b/openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json deleted file mode 100644 index 12cebdc85..000000000 --- a/openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "ask-user-question", - "version": "0.0.1", - "type": "module", - "imports": { - "@/*": "./src/*" - }, - "scripts": { - "start": "npx tsx src/index.ts", - "dev": "npx tsx --watch src/index.ts" - }, - "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - } -} diff --git a/openwork-memos-integration/apps/desktop/skills/ask-user-question/src/index.ts b/openwork-memos-integration/apps/desktop/skills/ask-user-question/src/index.ts deleted file mode 100644 index 6d514ca81..000000000 --- a/openwork-memos-integration/apps/desktop/skills/ask-user-question/src/index.ts +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/env node -/** - * AskUserQuestion MCP Server - * - * Exposes an `AskUserQuestion` tool that the agent calls to ask users - * questions via the UI. Communicates with Electron main process via HTTP. - */ - -import { Server } from '@modelcontextprotocol/sdk/server/index.js'; -import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; -import { - CallToolRequestSchema, - ListToolsRequestSchema, - type CallToolResult, -} from '@modelcontextprotocol/sdk/types.js'; - -const QUESTION_API_PORT = process.env.QUESTION_API_PORT || '9227'; -const QUESTION_API_URL = `http://localhost:${QUESTION_API_PORT}/question`; - -interface QuestionOption { - label: string; - description?: string; -} - -interface AskUserQuestionInput { - questions: Array<{ - question: string; - header?: string; - options?: QuestionOption[]; - multiSelect?: boolean; - }>; -} - -const server = new Server( - { name: 'ask-user-question', version: '1.0.0' }, - { capabilities: { tools: {} } } -); - -// List available tools -server.setRequestHandler(ListToolsRequestSchema, async () => ({ - tools: [ - { - name: 'AskUserQuestion', - description: - 'Ask the user a question and wait for their response. Use this for clarifications, confirmations before sensitive actions, or when you need user input to proceed. Returns the user\'s selected option(s) or custom text response.', - inputSchema: { - type: 'object', - properties: { - questions: { - type: 'array', - description: 'Array of questions to ask (typically just one)', - items: { - type: 'object', - properties: { - question: { - type: 'string', - description: 'The question to ask the user', - }, - header: { - type: 'string', - description: 'Short header/category for the question (max 12 chars)', - }, - options: { - type: 'array', - description: 'Available choices for the user (2-4 options)', - items: { - type: 'object', - properties: { - label: { - type: 'string', - description: 'Display text for this option', - }, - description: { - type: 'string', - description: 'Explanation of what this option means', - }, - }, - required: ['label'], - }, - }, - multiSelect: { - type: 'boolean', - description: 'Allow selecting multiple options', - default: false, - }, - }, - required: ['question'], - }, - minItems: 1, - maxItems: 4, - }, - }, - required: ['questions'], - }, - }, - ], -})); - -// Handle tool calls -server.setRequestHandler(CallToolRequestSchema, async (request): Promise => { - if (request.params.name !== 'AskUserQuestion') { - return { - content: [{ type: 'text', text: `Error: Unknown tool: ${request.params.name}` }], - isError: true, - }; - } - - const args = request.params.arguments as AskUserQuestionInput; - const { questions } = args; - - // Validate required fields - if (!questions || questions.length === 0) { - return { - content: [{ type: 'text', text: 'Error: At least one question is required' }], - isError: true, - }; - } - - const question = questions[0]; - if (!question.question) { - return { - content: [{ type: 'text', text: 'Error: Question text is required' }], - isError: true, - }; - } - - try { - // Call Electron main process HTTP endpoint - const response = await fetch(QUESTION_API_URL, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - question: question.question, - header: question.header, - options: question.options, - multiSelect: question.multiSelect, - }), - }); - - if (!response.ok) { - const errorText = await response.text(); - return { - content: [{ type: 'text', text: `Error: Question API returned ${response.status}: ${errorText}` }], - isError: true, - }; - } - - const result = (await response.json()) as { - answered: boolean; - selectedOptions?: string[]; - customText?: string; - denied?: boolean; - }; - - if (result.denied) { - return { - content: [{ type: 'text', text: 'User declined to answer the question.' }], - }; - } - - // Format response for the agent - if (result.selectedOptions && result.selectedOptions.length > 0) { - return { - content: [{ type: 'text', text: `User selected: ${result.selectedOptions.join(', ')}` }], - }; - } - - if (result.customText) { - return { - content: [{ type: 'text', text: `User responded: ${result.customText}` }], - }; - } - - return { - content: [{ type: 'text', text: 'User provided no response.' }], - }; - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - return { - content: [{ type: 'text', text: `Error: Failed to ask question: ${errorMessage}` }], - isError: true, - }; - } -}); - -// Start the MCP server -async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error('AskUserQuestion MCP Server started'); -} - -main().catch((error) => { - console.error('Failed to start server:', error); - process.exit(1); -}); diff --git a/openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json b/openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json deleted file mode 100644 index 3bcec373a..000000000 --- a/openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, - "outDir": "dist" - }, - "include": [ - "src/**/*" - ] -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/.gitignore b/openwork-memos-integration/apps/desktop/skills/dev-browser/.gitignore deleted file mode 100644 index 318b216dd..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Browser profile data -profiles/ -tmp/ -node_modules/ diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/SKILL.md b/openwork-memos-integration/apps/desktop/skills/dev-browser/SKILL.md deleted file mode 100644 index ed0a0289d..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/SKILL.md +++ /dev/null @@ -1,211 +0,0 @@ ---- -name: dev-browser -description: Browser automation with persistent page state. Use when users ask to navigate websites, fill forms, take screenshots, extract web data, test web apps, or automate browser workflows. Trigger phrases include "go to [url]", "click on", "fill out the form", "take a screenshot", "scrape", "automate", "test the website", "log into", or any browser interaction request. ---- - -# Dev Browser Skill - -Browser automation that maintains page state across script executions. Write small, focused scripts to accomplish tasks incrementally. Once you've proven out part of a workflow and there is repeated work to be done, you can write a script to do the repeated work in a single execution. - -## Choosing Your Approach - -- **Local/source-available sites**: Read the source code first to write selectors directly -- **Unknown page layouts**: Use `getAISnapshot()` to discover elements and `selectSnapshotRef()` to interact with them -- **Visual feedback**: Take screenshots to see what the user sees - -## Setup - -Two modes available. Ask the user if unclear which to use. - -### Standalone Mode (Default) - -Launches a new Chromium browser for fresh automation sessions. - -```bash -./skills/dev-browser/server.sh & -``` - -Add `--headless` flag if user requests it. **Wait for the `Ready` message before running scripts.** - -### Extension Mode - -Connects to user's existing Chrome browser. Use this when: - -- The user is already logged into sites and wants you to do things behind an authed experience that isn't local dev. -- The user asks you to use the extension - -**Important**: The core flow is still the same. You create named pages inside of their browser. - -**Start the relay server:** - -```bash -cd skills/dev-browser && npm i && npm run start-extension & -``` - -Wait for `Waiting for extension to connect...` followed by `Extension connected` in the console. To know that a client has connected and the browser is ready to be controlled. -**Workflow:** - -1. Scripts call `client.page("name")` just like the normal mode to create new pages / connect to existing ones. -2. Automation runs on the user's actual browser session - -If the extension hasn't connected yet, tell the user to launch and activate it. Download link: https://github.com/SawyerHood/dev-browser/releases - -## Writing Scripts - -> **Run all scripts from `skills/dev-browser/` directory.** The `@/` import alias requires this directory's config. - -Execute scripts inline using heredocs: - -```bash -cd skills/dev-browser && npx tsx <<'EOF' -import { connect, waitForPageLoad } from "@/client.js"; - -const client = await connect(); -// Create page with custom viewport size (optional) -const page = await client.page("example", { viewport: { width: 1920, height: 1080 } }); - -await page.goto("https://example.com"); -await waitForPageLoad(page); - -console.log({ title: await page.title(), url: page.url() }); -await client.disconnect(); -EOF -``` - -**Write to `tmp/` files only when** the script needs reuse, is complex, or user explicitly requests it. - -### Key Principles - -1. **Small scripts**: Each script does ONE thing (navigate, click, fill, check) -2. **Evaluate state**: Log/return state at the end to decide next steps -3. **Descriptive page names**: Use `"checkout"`, `"login"`, not `"main"` -4. **Disconnect to exit**: `await client.disconnect()` - pages persist on server -5. **Plain JS in evaluate**: `page.evaluate()` runs in browser - no TypeScript syntax - -## Workflow Loop - -Follow this pattern for complex tasks: - -1. **Write a script** to perform one action -2. **Run it** and observe the output -3. **Evaluate** - did it work? What's the current state? -4. **Decide** - is the task complete or do we need another script? -5. **Repeat** until task is done - -### No TypeScript in Browser Context - -Code passed to `page.evaluate()` runs in the browser, which doesn't understand TypeScript: - -```typescript -// ✅ Correct: plain JavaScript -const text = await page.evaluate(() => { - return document.body.innerText; -}); - -// ❌ Wrong: TypeScript syntax will fail at runtime -const text = await page.evaluate(() => { - const el: HTMLElement = document.body; // Type annotation breaks in browser! - return el.innerText; -}); -``` - -## Scraping Data - -For scraping large datasets, intercept and replay network requests rather than scrolling the DOM. See [references/scraping.md](references/scraping.md) for the complete guide covering request capture, schema discovery, and paginated API replay. - -## Client API - -```typescript -const client = await connect(); - -// Get or create named page (viewport only applies to new pages) -const page = await client.page("name"); -const pageWithSize = await client.page("name", { viewport: { width: 1920, height: 1080 } }); - -const pages = await client.list(); // List all page names -await client.close("name"); // Close a page -await client.disconnect(); // Disconnect (pages persist) - -// ARIA Snapshot methods -const snapshot = await client.getAISnapshot("name"); // Get accessibility tree -const element = await client.selectSnapshotRef("name", "e5"); // Get element by ref -``` - -The `page` object is a standard Playwright Page. - -## Waiting - -```typescript -import { waitForPageLoad } from "@/client.js"; - -await waitForPageLoad(page); // After navigation -await page.waitForSelector(".results"); // For specific elements -await page.waitForURL("**/success"); // For specific URL -``` - -## Inspecting Page State - -### Screenshots - -```typescript -await page.screenshot({ path: "tmp/screenshot.png" }); -await page.screenshot({ path: "tmp/full.png", fullPage: true }); -``` - -### ARIA Snapshot (Element Discovery) - -Use `getAISnapshot()` to discover page elements. Returns YAML-formatted accessibility tree: - -```yaml -- banner: - - link "Hacker News" [ref=e1] - - navigation: - - link "new" [ref=e2] -- main: - - list: - - listitem: - - link "Article Title" [ref=e8] - - link "328 comments" [ref=e9] -- contentinfo: - - textbox [ref=e10] - - /placeholder: "Search" -``` - -**Interpreting refs:** - -- `[ref=eN]` - Element reference for interaction (visible, clickable elements only) -- `[checked]`, `[disabled]`, `[expanded]` - Element states -- `[level=N]` - Heading level -- `/url:`, `/placeholder:` - Element properties - -**Interacting with refs:** - -```typescript -const snapshot = await client.getAISnapshot("hackernews"); -console.log(snapshot); // Find the ref you need - -const element = await client.selectSnapshotRef("hackernews", "e2"); -await element.click(); -``` - -## Error Recovery - -Page state persists after failures. Debug with: - -```bash -cd skills/dev-browser && npx tsx <<'EOF' -import { connect } from "@/client.js"; - -const client = await connect(); -const page = await client.page("hackernews"); - -await page.screenshot({ path: "tmp/debug.png" }); -console.log({ - url: page.url(), - title: await page.title(), - bodyText: await page.textContent("body").then((t) => t?.slice(0, 200)), -}); - -await client.disconnect(); -EOF -``` diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock b/openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock deleted file mode 100644 index 350c6c95c..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock +++ /dev/null @@ -1,443 +0,0 @@ -{ - "lockfileVersion": 1, - "configVersion": 1, - "workspaces": { - "": { - "name": "dev-browser", - "dependencies": { - "express": "^4.21.0", - "playwright": "^1.49.0", - }, - "devDependencies": { - "@types/express": "^5.0.0", - "tsx": "^4.21.0", - "vitest": "^2.1.0", - }, - }, - }, - "packages": { - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.27.1", "", { "os": "android", "cpu": "arm" }, "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg=="], - - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.1", "", { "os": "android", "cpu": "arm64" }, "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ=="], - - "@esbuild/android-x64": ["@esbuild/android-x64@0.27.1", "", { "os": "android", "cpu": "x64" }, "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ=="], - - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ=="], - - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ=="], - - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg=="], - - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ=="], - - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA=="], - - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q=="], - - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw=="], - - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg=="], - - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA=="], - - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ=="], - - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ=="], - - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw=="], - - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.1", "", { "os": "linux", "cpu": "x64" }, "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA=="], - - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.1", "", { "os": "none", "cpu": "arm64" }, "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ=="], - - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.1", "", { "os": "none", "cpu": "x64" }, "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg=="], - - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g=="], - - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg=="], - - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg=="], - - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.1", "", { "os": "win32", "cpu": "x64" }, "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw=="], - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.53.3", "", { "os": "android", "cpu": "arm" }, "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w=="], - - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.53.3", "", { "os": "android", "cpu": "arm64" }, "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w=="], - - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.53.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA=="], - - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.53.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ=="], - - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.53.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w=="], - - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.53.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q=="], - - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw=="], - - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg=="], - - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w=="], - - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A=="], - - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g=="], - - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.53.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw=="], - - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g=="], - - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A=="], - - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.53.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg=="], - - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w=="], - - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q=="], - - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.53.3", "", { "os": "none", "cpu": "arm64" }, "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw=="], - - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.53.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw=="], - - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.53.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA=="], - - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg=="], - - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ=="], - - "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], - - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], - - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - - "@types/express": ["@types/express@5.0.6", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "^2" } }, "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA=="], - - "@types/express-serve-static-core": ["@types/express-serve-static-core@5.1.0", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA=="], - - "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], - - "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], - - "@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="], - - "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], - - "@types/send": ["@types/send@1.2.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], - - "@types/serve-static": ["@types/serve-static@2.2.0", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*" } }, "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ=="], - - "@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], - - "@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], - - "@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], - - "@vitest/runner": ["@vitest/runner@2.1.9", "", { "dependencies": { "@vitest/utils": "2.1.9", "pathe": "^1.1.2" } }, "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g=="], - - "@vitest/snapshot": ["@vitest/snapshot@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "magic-string": "^0.30.12", "pathe": "^1.1.2" } }, "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ=="], - - "@vitest/spy": ["@vitest/spy@2.1.9", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ=="], - - "@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], - - "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], - - "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], - - "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], - - "body-parser": ["body-parser@1.20.4", "", { "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "~1.2.0", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.14.0", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA=="], - - "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - - "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], - - "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], - - "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], - - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - - "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "cookie-signature": ["cookie-signature@1.0.7", "", {}, "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="], - - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], - - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - - "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "esbuild": ["esbuild@0.27.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.1", "@esbuild/android-arm": "0.27.1", "@esbuild/android-arm64": "0.27.1", "@esbuild/android-x64": "0.27.1", "@esbuild/darwin-arm64": "0.27.1", "@esbuild/darwin-x64": "0.27.1", "@esbuild/freebsd-arm64": "0.27.1", "@esbuild/freebsd-x64": "0.27.1", "@esbuild/linux-arm": "0.27.1", "@esbuild/linux-arm64": "0.27.1", "@esbuild/linux-ia32": "0.27.1", "@esbuild/linux-loong64": "0.27.1", "@esbuild/linux-mips64el": "0.27.1", "@esbuild/linux-ppc64": "0.27.1", "@esbuild/linux-riscv64": "0.27.1", "@esbuild/linux-s390x": "0.27.1", "@esbuild/linux-x64": "0.27.1", "@esbuild/netbsd-arm64": "0.27.1", "@esbuild/netbsd-x64": "0.27.1", "@esbuild/openbsd-arm64": "0.27.1", "@esbuild/openbsd-x64": "0.27.1", "@esbuild/openharmony-arm64": "0.27.1", "@esbuild/sunos-x64": "0.27.1", "@esbuild/win32-arm64": "0.27.1", "@esbuild/win32-ia32": "0.27.1", "@esbuild/win32-x64": "0.27.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA=="], - - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - - "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - - "expect-type": ["expect-type@1.2.2", "", {}, "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA=="], - - "express": ["express@4.22.1", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "~1.20.3", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "~1.3.1", "fresh": "~0.5.2", "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", "serve-static": "~1.16.2", "setprototypeof": "1.2.0", "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g=="], - - "finalhandler": ["finalhandler@1.3.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "statuses": "~2.0.2", "unpipe": "~1.0.0" } }, "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg=="], - - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - - "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], - - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - - "get-tsconfig": ["get-tsconfig@4.13.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="], - - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], - - "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - - "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], - - "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], - - "merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], - - "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], - - "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], - - "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], - - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], - - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - - "path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], - - "pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - - "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "playwright": ["playwright@1.57.0", "", { "dependencies": { "playwright-core": "1.57.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw=="], - - "playwright-core": ["playwright-core@1.57.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="], - - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - - "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], - - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "raw-body": ["raw-body@2.5.3", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "unpipe": "~1.0.0" } }, "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA=="], - - "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - - "rollup": ["rollup@4.53.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.3", "@rollup/rollup-android-arm64": "4.53.3", "@rollup/rollup-darwin-arm64": "4.53.3", "@rollup/rollup-darwin-x64": "4.53.3", "@rollup/rollup-freebsd-arm64": "4.53.3", "@rollup/rollup-freebsd-x64": "4.53.3", "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", "@rollup/rollup-linux-arm-musleabihf": "4.53.3", "@rollup/rollup-linux-arm64-gnu": "4.53.3", "@rollup/rollup-linux-arm64-musl": "4.53.3", "@rollup/rollup-linux-loong64-gnu": "4.53.3", "@rollup/rollup-linux-ppc64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-musl": "4.53.3", "@rollup/rollup-linux-s390x-gnu": "4.53.3", "@rollup/rollup-linux-x64-gnu": "4.53.3", "@rollup/rollup-linux-x64-musl": "4.53.3", "@rollup/rollup-openharmony-arm64": "4.53.3", "@rollup/rollup-win32-arm64-msvc": "4.53.3", "@rollup/rollup-win32-ia32-msvc": "4.53.3", "@rollup/rollup-win32-x64-gnu": "4.53.3", "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA=="], - - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - - "send": ["send@0.19.1", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg=="], - - "serve-static": ["serve-static@1.16.2", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" } }, "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw=="], - - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], - - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - - "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - - "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], - - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - - "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - - "tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], - - "tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], - - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - - "tsx": ["tsx@4.21.0", "", { "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw=="], - - "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], - - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - - "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - - "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], - - "vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], - - "vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "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.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], - - "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], - - "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], - - "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "send/http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], - - "send/statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - - "serve-static/send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], - - "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - - "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "serve-static/send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "serve-static/send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], - - "serve-static/send/http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], - - "serve-static/send/statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - - "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], - - "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], - - "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], - - "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], - - "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], - - "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], - - "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], - - "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], - - "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], - - "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], - - "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], - - "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], - - "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], - - "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], - - "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], - - "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], - - "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], - - "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], - - "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], - - "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], - - "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], - - "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], - - "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - - "serve-static/send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - } -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json b/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json deleted file mode 100644 index cbb6e75da..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json +++ /dev/null @@ -1,3006 +0,0 @@ -{ - "name": "dev-browser", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "dev-browser", - "version": "0.0.1", - "dependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.2.0", - "express": "^4.21.0", - "hono": "^4.11.1", - "playwright": "npm:rebrowser-playwright@^1.52.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - }, - "devDependencies": { - "@types/express": "^5.0.0", - "vitest": "^2.1.0" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@hono/node-ws": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@hono/node-ws/-/node-ws-1.3.0.tgz", - "integrity": "sha512-ju25YbbvLuXdqBCmLZLqnNYu1nbHIQjoyUqA8ApZOeL1k4skuiTcw5SW77/5SUYo2Xi2NVBJoVlfQurnKEp03Q==", - "license": "MIT", - "dependencies": { - "ws": "^8.17.0" - }, - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "@hono/node-server": "^1.19.2", - "hono": "^4.6.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.8.tgz", - "integrity": "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@vitest/expect": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", - "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "chai": "^5.1.2", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", - "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.1.9", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/pretty-format": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", - "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", - "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "2.1.9", - "pathe": "^1.1.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", - "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "2.1.9", - "magic-string": "^0.30.12", - "pathe": "^1.1.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", - "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^3.0.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", - "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "2.1.9", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/check-error": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", - "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/playwright": { - "name": "rebrowser-playwright", - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/rebrowser-playwright/-/rebrowser-playwright-1.52.0.tgz", - "integrity": "sha512-UjpqfwmF9+XtOuCCxGQ2ZlLeuSaSv//4Z6ZQgYPsJovz3d7nWodCd2hSRQigAswAUnsPmVwnQUpSn+TLKaKV+A==", - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "npm:rebrowser-playwright-core@~1.52.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "name": "rebrowser-playwright-core", - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/rebrowser-playwright-core/-/rebrowser-playwright-core-1.52.0.tgz", - "integrity": "sha512-gjrvLNh0RX6B/tg6pWaPNGf+9+z1Jl2EyAh5MXD5xMa2lputGRZ9V2MJ/uofcC5Np3vSOJ3SdVSRqwteC0FjfQ==", - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.1", - "@rollup/rollup-android-arm64": "4.55.1", - "@rollup/rollup-darwin-arm64": "4.55.1", - "@rollup/rollup-darwin-x64": "4.55.1", - "@rollup/rollup-freebsd-arm64": "4.55.1", - "@rollup/rollup-freebsd-x64": "4.55.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", - "@rollup/rollup-linux-arm-musleabihf": "4.55.1", - "@rollup/rollup-linux-arm64-gnu": "4.55.1", - "@rollup/rollup-linux-arm64-musl": "4.55.1", - "@rollup/rollup-linux-loong64-gnu": "4.55.1", - "@rollup/rollup-linux-loong64-musl": "4.55.1", - "@rollup/rollup-linux-ppc64-gnu": "4.55.1", - "@rollup/rollup-linux-ppc64-musl": "4.55.1", - "@rollup/rollup-linux-riscv64-gnu": "4.55.1", - "@rollup/rollup-linux-riscv64-musl": "4.55.1", - "@rollup/rollup-linux-s390x-gnu": "4.55.1", - "@rollup/rollup-linux-x64-gnu": "4.55.1", - "@rollup/rollup-linux-x64-musl": "4.55.1", - "@rollup/rollup-openbsd-x64": "4.55.1", - "@rollup/rollup-openharmony-arm64": "4.55.1", - "@rollup/rollup-win32-arm64-msvc": "4.55.1", - "@rollup/rollup-win32-ia32-msvc": "4.55.1", - "@rollup/rollup-win32-x64-gnu": "4.55.1", - "@rollup/rollup-win32-x64-msvc": "4.55.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tsx/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", - "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-node/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/vite-node/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/vitest": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", - "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "2.1.9", - "@vitest/mocker": "2.1.9", - "@vitest/pretty-format": "^2.1.9", - "@vitest/runner": "2.1.9", - "@vitest/snapshot": "2.1.9", - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "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.8.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.1", - "tinypool": "^1.0.1", - "tinyrainbow": "^1.2.0", - "vite": "^5.0.0", - "vite-node": "2.1.9", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.9", - "@vitest/ui": "2.1.9", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - } - } -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/package.json b/openwork-memos-integration/apps/desktop/skills/dev-browser/package.json deleted file mode 100644 index 331435004..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "dev-browser", - "version": "0.0.1", - "type": "module", - "imports": { - "@/*": "./src/*" - }, - "scripts": { - "start-server": "npx tsx scripts/start-server.ts", - "start-extension": "npx tsx scripts/start-relay.ts", - "dev": "npx tsx --watch src/index.ts", - "test": "vitest run", - "test:watch": "vitest" - }, - "dependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.2.0", - "express": "^4.21.0", - "hono": "^4.11.1", - "playwright": "npm:rebrowser-playwright@^1.52.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - }, - "devDependencies": { - "@types/express": "^5.0.0", - "vitest": "^2.1.0" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.0.0" - } -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/references/scraping.md b/openwork-memos-integration/apps/desktop/skills/dev-browser/references/scraping.md deleted file mode 100644 index a6e9b3cba..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/references/scraping.md +++ /dev/null @@ -1,155 +0,0 @@ -# Data Scraping Guide - -For large datasets (followers, posts, search results), **intercept and replay network requests** rather than scrolling and parsing the DOM. This is faster, more reliable, and handles pagination automatically. - -## Why Not Scroll? - -Scrolling is slow, unreliable, and wastes time. APIs return structured data with pagination built in. Always prefer API replay. - -## Start Small, Then Scale - -**Don't try to automate everything at once.** Work incrementally: - -1. **Capture one request** - verify you're intercepting the right endpoint -2. **Inspect one response** - understand the schema before writing extraction code -3. **Extract a few items** - make sure your parsing logic works -4. **Then scale up** - add pagination loop only after the basics work - -This prevents wasting time debugging a complex script when the issue is a simple path like `data.user.timeline` vs `data.user.result.timeline`. - -## Step-by-Step Workflow - -### 1. Capture Request Details - -First, intercept a request to understand URL structure and required headers: - -```typescript -import { connect, waitForPageLoad } from "@/client.js"; -import * as fs from "node:fs"; - -const client = await connect(); -const page = await client.page("site"); - -let capturedRequest = null; -page.on("request", (request) => { - const url = request.url(); - // Look for API endpoints (adjust pattern for your target site) - if (url.includes("/api/") || url.includes("/graphql/")) { - capturedRequest = { - url: url, - headers: request.headers(), - method: request.method(), - }; - fs.writeFileSync("tmp/request-details.json", JSON.stringify(capturedRequest, null, 2)); - console.log("Captured request:", url.substring(0, 80) + "..."); - } -}); - -await page.goto("https://example.com/profile"); -await waitForPageLoad(page); -await page.waitForTimeout(3000); - -await client.disconnect(); -``` - -### 2. Capture Response to Understand Schema - -Save a raw response to inspect the data structure: - -```typescript -page.on("response", async (response) => { - const url = response.url(); - if (url.includes("UserTweets") || url.includes("/api/data")) { - const json = await response.json(); - fs.writeFileSync("tmp/api-response.json", JSON.stringify(json, null, 2)); - console.log("Captured response"); - } -}); -``` - -Then analyze the structure to find: - -- Where the data array lives (e.g., `data.user.result.timeline.instructions[].entries`) -- Where pagination cursors are (e.g., `cursor-bottom` entries) -- What fields you need to extract - -### 3. Replay API with Pagination - -Once you understand the schema, replay requests directly: - -```typescript -import { connect } from "@/client.js"; -import * as fs from "node:fs"; - -const client = await connect(); -const page = await client.page("site"); - -const results = new Map(); // Use Map for deduplication -const headers = JSON.parse(fs.readFileSync("tmp/request-details.json", "utf8")).headers; -const baseUrl = "https://example.com/api/data"; - -let cursor = null; -let hasMore = true; - -while (hasMore) { - // Build URL with pagination cursor - const params = { count: 20 }; - if (cursor) params.cursor = cursor; - const url = `${baseUrl}?params=${encodeURIComponent(JSON.stringify(params))}`; - - // Execute fetch in browser context (has auth cookies/headers) - const response = await page.evaluate( - async ({ url, headers }) => { - const res = await fetch(url, { headers }); - return res.json(); - }, - { url, headers } - ); - - // Extract data and cursor (adjust paths for your API) - const entries = response?.data?.entries || []; - for (const entry of entries) { - if (entry.type === "cursor-bottom") { - cursor = entry.value; - } else if (entry.id && !results.has(entry.id)) { - results.set(entry.id, { - id: entry.id, - text: entry.content, - timestamp: entry.created_at, - }); - } - } - - console.log(`Fetched page, total: ${results.size}`); - - // Check stop conditions - if (!cursor || entries.length === 0) hasMore = false; - - // Rate limiting - be respectful - await new Promise((r) => setTimeout(r, 500)); -} - -// Export results -const data = Array.from(results.values()); -fs.writeFileSync("tmp/results.json", JSON.stringify(data, null, 2)); -console.log(`Saved ${data.length} items`); - -await client.disconnect(); -``` - -## Key Patterns - -| Pattern | Description | -| ----------------------- | ------------------------------------------------------ | -| `page.on('request')` | Capture outgoing request URL + headers | -| `page.on('response')` | Capture response data to understand schema | -| `page.evaluate(fetch)` | Replay requests in browser context (inherits auth) | -| `Map` for deduplication | APIs often return overlapping data across pages | -| Cursor-based pagination | Look for `cursor`, `next_token`, `offset` in responses | - -## Tips - -- **Extension mode**: `page.context().cookies()` doesn't work - capture auth headers from intercepted requests instead -- **Rate limiting**: Add 500ms+ delays between requests to avoid blocks -- **Stop conditions**: Check for empty results, missing cursor, or reaching a date/ID threshold -- **GraphQL APIs**: URL params often include `variables` and `features` JSON objects - capture and reuse them diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-relay.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-relay.ts deleted file mode 100644 index ddbd23394..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-relay.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Start the CDP relay server for Chrome extension mode - * - * Usage: npm run start-extension - */ - -import { serveRelay } from "@/relay.js"; - -// Accomplish uses port 9224 to avoid conflicts with Claude Code's dev-browser (9222) -const PORT = parseInt(process.env.PORT || "9224", 10); -const HOST = process.env.HOST || "127.0.0.1"; - -async function main() { - const server = await serveRelay({ - port: PORT, - host: HOST, - }); - - // Handle shutdown - const shutdown = async () => { - console.log("\nShutting down relay server..."); - await server.stop(); - process.exit(0); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} - -main().catch((err) => { - console.error("Failed to start relay server:", err); - process.exit(1); -}); diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-server.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-server.ts deleted file mode 100644 index 88d3628f8..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/scripts/start-server.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { serve } from "@/index.js"; -import { execSync } from "child_process"; -import { mkdirSync, existsSync, unlinkSync } from "fs"; -import { join, dirname } from "path"; -import { fileURLToPath } from "url"; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -// Use a user-writable location for tmp and profiles (app bundle is read-only when installed) -// On macOS: ~/Library/Application Support/Accomplish/dev-browser/ -// Fallback: system temp directory -function getDataDir(): string { - const homeDir = process.env.HOME || process.env.USERPROFILE || ""; - if (process.platform === "darwin") { - return join(homeDir, "Library", "Application Support", "Accomplish", "dev-browser"); - } else if (process.platform === "win32") { - return join(process.env.APPDATA || homeDir, "Accomplish", "dev-browser"); - } else { - // Linux or fallback - return join(homeDir, ".accomplish", "dev-browser"); - } -} - -const dataDir = getDataDir(); -const tmpDir = join(dataDir, "tmp"); -const profileDir = join(dataDir, "profiles"); - -// Create data directories if they don't exist -console.log(`Creating data directory: ${dataDir}`); -mkdirSync(tmpDir, { recursive: true }); -mkdirSync(profileDir, { recursive: true }); - -// Accomplish uses ports 9224/9225 to avoid conflicts with Claude Code's dev-browser (9222/9223) -const ACCOMPLISH_HTTP_PORT = 9224; -const ACCOMPLISH_CDP_PORT = 9225; - -// Check if server is already running -console.log("Checking for existing servers..."); -try { - const res = await fetch(`http://localhost:${ACCOMPLISH_HTTP_PORT}`, { - signal: AbortSignal.timeout(1000), - }); - if (res.ok) { - console.log(`Server already running on port ${ACCOMPLISH_HTTP_PORT}`); - process.exit(0); - } -} catch { - // Server not running, continue to start -} - -// Clean up stale CDP port if HTTP server isn't running (crash recovery) -// This handles the case where Node crashed but Chrome is still running -try { - const pid = execSync(`lsof -ti:${ACCOMPLISH_CDP_PORT}`, { encoding: "utf-8" }).trim(); - if (pid) { - console.log(`Cleaning up stale Chrome process on CDP port ${ACCOMPLISH_CDP_PORT} (PID: ${pid})`); - execSync(`kill -9 ${pid}`); - } -} catch { - // No process on CDP port, which is expected -} - -// Clean up stale Chrome profile lock files (crash recovery) -// When Chrome crashes or is force-killed, it leaves behind SingletonLock files -// that prevent new instances from starting. Clean them up before launching. -// We have separate profile directories for system Chrome and Playwright Chromium. -const profileDirs = [ - join(profileDir, "chrome-profile"), - join(profileDir, "playwright-profile"), -]; -const staleLockFiles = ["SingletonLock", "SingletonSocket", "SingletonCookie"]; -for (const dir of profileDirs) { - for (const lockFile of staleLockFiles) { - const lockPath = join(dir, lockFile); - if (existsSync(lockPath)) { - try { - unlinkSync(lockPath); - console.log(`Cleaned up stale lock file: ${lockFile} in ${dir}`); - } catch (err) { - console.warn(`Failed to remove ${lockFile}:`, err); - } - } - } -} - -// Helper to install Playwright Chromium -function installPlaywrightChromium(): void { - console.log("\n========================================"); - console.log("Downloading browser (one-time setup)..."); - console.log("This may take 1-2 minutes."); - console.log("========================================\n"); - - const managers = [ - { name: "bun", command: "bunx playwright install chromium" }, - { name: "pnpm", command: "pnpm exec playwright install chromium" }, - { name: "npm", command: "npx playwright install chromium" }, - ]; - - let pm: { name: string; command: string } | null = null; - for (const manager of managers) { - try { - execSync(`which ${manager.name}`, { stdio: "ignore" }); - pm = manager; - break; - } catch { - // Package manager not found, try next - } - } - - if (!pm) { - throw new Error("No package manager found (tried bun, pnpm, npm)"); - } - - console.log(`Using ${pm.name} to install Playwright Chromium...`); - execSync(pm.command, { stdio: "inherit" }); // inherit shows download progress - console.log("\nBrowser installed successfully!\n"); -} - -// Start the server - tries system Chrome first, falls back to Playwright Chromium -console.log("Starting dev browser server..."); -const headless = process.env.HEADLESS === "true"; - -async function startServer(retry = false): Promise { - try { - const server = await serve({ - port: ACCOMPLISH_HTTP_PORT, - cdpPort: ACCOMPLISH_CDP_PORT, - headless, - profileDir, - useSystemChrome: true, // Try system Chrome first for faster startup - }); - - console.log(`Dev browser server started`); - console.log(` WebSocket: ${server.wsEndpoint}`); - console.log(` Tmp directory: ${tmpDir}`); - console.log(` Profile directory: ${profileDir}`); - console.log(`\nReady`); - console.log(`\nPress Ctrl+C to stop`); - - // Keep the process running - await new Promise(() => {}); - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - - // Check if error is about missing Playwright browsers - const isBrowserMissing = - errorMessage.includes("Executable doesn't exist") || - errorMessage.includes("browserType.launchPersistentContext") || - errorMessage.includes("npx playwright install") || - errorMessage.includes("run the install command"); - - if (isBrowserMissing && !retry) { - console.log("\nSystem Chrome not available, downloading Playwright Chromium..."); - try { - installPlaywrightChromium(); - // Retry with Playwright Chromium (useSystemChrome will fail again, but fallback will work) - await startServer(true); - return; - } catch (installError) { - console.error("Failed to install Playwright browsers:", installError); - console.log("You may need to run manually: npx playwright install chromium"); - process.exit(1); - } - } - - // If we've already retried or it's a different error, give up - console.error("Failed to start dev browser server:", error); - process.exit(1); - } -} - -await startServer(); diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/server.sh b/openwork-memos-integration/apps/desktop/skills/dev-browser/server.sh deleted file mode 100755 index 25dbc81ee..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/server.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# Get the directory where this script is located -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# Change to the script directory -cd "$SCRIPT_DIR" - -# Parse command line arguments -HEADLESS=false -while [[ "$#" -gt 0 ]]; do - case $1 in - --headless) HEADLESS=true ;; - *) echo "Unknown parameter: $1"; exit 1 ;; - esac - shift -done - -# Check if node_modules exists - only install in dev mode if missing -if [ ! -d "node_modules" ]; then - echo "Dependencies not found. Installing..." - npm install -fi - -echo "Starting dev-browser server..." -export HEADLESS=$HEADLESS -npx tsx scripts/start-server.ts diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/client.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/client.ts deleted file mode 100644 index 4b4c4a028..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/client.ts +++ /dev/null @@ -1,509 +0,0 @@ -import { chromium, type Browser, type Page, type ElementHandle } from "playwright"; -import type { - GetPageRequest, - GetPageResponse, - ListPagesResponse, - ServerInfoResponse, - ViewportSize, -} from "./types"; -import { getSnapshotScript } from "./snapshot/browser-script"; - -/** - * Fetch with retry and exponential backoff for handling concurrent connection issues. - * This is necessary when multiple tasks try to connect to the dev-browser server simultaneously. - */ -async function fetchWithRetry( - url: string, - options?: RequestInit, - maxRetries = 3, - baseDelayMs = 100 -): Promise { - let lastError: Error | null = null; - for (let i = 0; i < maxRetries; i++) { - try { - const res = await fetch(url, options); - return res; - } catch (err) { - lastError = err instanceof Error ? err : new Error(String(err)); - // Only retry on connection errors (socket closed, etc.) - const isConnectionError = lastError.message.includes("fetch failed") || - lastError.message.includes("ECONNREFUSED") || - lastError.message.includes("socket") || - lastError.message.includes("UND_ERR"); - if (!isConnectionError || i >= maxRetries - 1) { - throw lastError; - } - // Exponential backoff with jitter - const delay = baseDelayMs * Math.pow(2, i) + Math.random() * 50; - await new Promise((resolve) => setTimeout(resolve, delay)); - } - } - throw lastError || new Error("fetchWithRetry failed"); -} - -/** - * Options for waiting for page load - */ -export interface WaitForPageLoadOptions { - /** Maximum time to wait in ms (default: 10000) */ - timeout?: number; - /** How often to check page state in ms (default: 50) */ - pollInterval?: number; - /** Minimum time to wait even if page appears ready in ms (default: 100) */ - minimumWait?: number; - /** Wait for network to be idle (no pending requests) (default: true) */ - waitForNetworkIdle?: boolean; -} - -/** - * Result of waiting for page load - */ -export interface WaitForPageLoadResult { - /** Whether the page is considered loaded */ - success: boolean; - /** Document ready state when finished */ - readyState: string; - /** Number of pending network requests when finished */ - pendingRequests: number; - /** Time spent waiting in ms */ - waitTimeMs: number; - /** Whether timeout was reached */ - timedOut: boolean; -} - -interface PageLoadState { - documentReadyState: string; - documentLoading: boolean; - pendingRequests: PendingRequest[]; -} - -interface PendingRequest { - url: string; - loadingDurationMs: number; - resourceType: string; -} - -/** - * Wait for a page to finish loading using document.readyState and performance API. - * - * Uses browser-use's approach of: - * - Checking document.readyState for 'complete' - * - Monitoring pending network requests via Performance API - * - Filtering out ads, tracking, and non-critical resources - * - Graceful timeout handling (continues even if timeout reached) - */ -export async function waitForPageLoad( - page: Page, - options: WaitForPageLoadOptions = {} -): Promise { - const { - timeout = 10000, - pollInterval = 50, - minimumWait = 100, - waitForNetworkIdle = true, - } = options; - - const startTime = Date.now(); - let lastState: PageLoadState | null = null; - - // Wait minimum time first - if (minimumWait > 0) { - await new Promise((resolve) => setTimeout(resolve, minimumWait)); - } - - // Poll until ready or timeout - while (Date.now() - startTime < timeout) { - try { - lastState = await getPageLoadState(page); - - // Check if document is complete - const documentReady = lastState.documentReadyState === "complete"; - - // Check if network is idle (no pending critical requests) - const networkIdle = !waitForNetworkIdle || lastState.pendingRequests.length === 0; - - if (documentReady && networkIdle) { - return { - success: true, - readyState: lastState.documentReadyState, - pendingRequests: lastState.pendingRequests.length, - waitTimeMs: Date.now() - startTime, - timedOut: false, - }; - } - } catch { - // Page may be navigating, continue polling - } - - await new Promise((resolve) => setTimeout(resolve, pollInterval)); - } - - // Timeout reached - return current state - return { - success: false, - readyState: lastState?.documentReadyState ?? "unknown", - pendingRequests: lastState?.pendingRequests.length ?? 0, - waitTimeMs: Date.now() - startTime, - timedOut: true, - }; -} - -/** - * Get the current page load state including document ready state and pending requests. - * Filters out ads, tracking, and non-critical resources that shouldn't block loading. - */ -async function getPageLoadState(page: Page): Promise { - const result = await page.evaluate(() => { - // Access browser globals via globalThis for TypeScript compatibility - /* eslint-disable @typescript-eslint/no-explicit-any */ - const g = globalThis as { document?: any; performance?: any }; - /* eslint-enable @typescript-eslint/no-explicit-any */ - const perf = g.performance!; - const doc = g.document!; - - const now = perf.now(); - const resources = perf.getEntriesByType("resource"); - const pending: Array<{ url: string; loadingDurationMs: number; resourceType: string }> = []; - - // Common ad/tracking domains and patterns to filter out - const adPatterns = [ - "doubleclick.net", - "googlesyndication.com", - "googletagmanager.com", - "google-analytics.com", - "facebook.net", - "connect.facebook.net", - "analytics", - "ads", - "tracking", - "pixel", - "hotjar.com", - "clarity.ms", - "mixpanel.com", - "segment.com", - "newrelic.com", - "nr-data.net", - "/tracker/", - "/collector/", - "/beacon/", - "/telemetry/", - "/log/", - "/events/", - "/track.", - "/metrics/", - ]; - - // Non-critical resource types - const nonCriticalTypes = ["img", "image", "icon", "font"]; - - for (const entry of resources) { - // Resources with responseEnd === 0 are still loading - if (entry.responseEnd === 0) { - const url = entry.name; - - // Filter out ads and tracking - const isAd = adPatterns.some((pattern) => url.includes(pattern)); - if (isAd) continue; - - // Filter out data: URLs and very long URLs - if (url.startsWith("data:") || url.length > 500) continue; - - const loadingDuration = now - entry.startTime; - - // Skip requests loading > 10 seconds (likely stuck/polling) - if (loadingDuration > 10000) continue; - - const resourceType = entry.initiatorType || "unknown"; - - // Filter out non-critical resources loading > 3 seconds - if (nonCriticalTypes.includes(resourceType) && loadingDuration > 3000) continue; - - // Filter out image URLs even if type is unknown - const isImageUrl = /\.(jpg|jpeg|png|gif|webp|svg|ico)(\?|$)/i.test(url); - if (isImageUrl && loadingDuration > 3000) continue; - - pending.push({ - url, - loadingDurationMs: Math.round(loadingDuration), - resourceType, - }); - } - } - - return { - documentReadyState: doc.readyState, - documentLoading: doc.readyState !== "complete", - pendingRequests: pending, - }; - }); - - return result; -} - -/** Server mode information */ -export interface ServerInfo { - wsEndpoint: string; - mode: "launch" | "extension"; - extensionConnected?: boolean; -} - -/** - * Options for creating or getting a page - */ -export interface PageOptions { - /** Viewport size for new pages */ - viewport?: ViewportSize; -} - -export interface DevBrowserClient { - page: (name: string, options?: PageOptions) => Promise; - list: () => Promise; - close: (name: string) => Promise; - disconnect: () => Promise; - /** - * Get AI-friendly ARIA snapshot for a page. - * Returns YAML format with refs like [ref=e1], [ref=e2]. - * Refs are stored on window.__devBrowserRefs for cross-connection persistence. - */ - getAISnapshot: (name: string) => Promise; - /** - * Get an element handle by its ref from the last getAISnapshot call. - * Refs persist across Playwright connections. - */ - selectSnapshotRef: (name: string, ref: string) => Promise; - /** - * Get server information including mode and extension connection status. - */ - getServerInfo: () => Promise; -} - -// Accomplish uses port 9224 to avoid conflicts with Claude Code's dev-browser (9222) -export async function connect(serverUrl = "http://localhost:9224"): Promise { - let browser: Browser | null = null; - let wsEndpoint: string | null = null; - let connectingPromise: Promise | null = null; - - async function ensureConnected(): Promise { - // Return existing connection if still active - if (browser && browser.isConnected()) { - return browser; - } - - // If already connecting, wait for that connection (prevents race condition) - if (connectingPromise) { - return connectingPromise; - } - - // Start new connection with mutex - connectingPromise = (async () => { - try { - // Fetch wsEndpoint from server (with retry for concurrent connections) - const res = await fetchWithRetry(serverUrl); - if (!res.ok) { - throw new Error(`Server returned ${res.status}: ${await res.text()}`); - } - const info = (await res.json()) as ServerInfoResponse; - wsEndpoint = info.wsEndpoint; - - // Connect to the browser via CDP - browser = await chromium.connectOverCDP(wsEndpoint); - return browser; - } finally { - connectingPromise = null; - } - })(); - - return connectingPromise; - } - - // Find page by CDP targetId - more reliable than JS globals - async function findPageByTargetId(b: Browser, targetId: string): Promise { - for (const context of b.contexts()) { - for (const page of context.pages()) { - let cdpSession; - try { - cdpSession = await context.newCDPSession(page); - const { targetInfo } = await cdpSession.send("Target.getTargetInfo"); - if (targetInfo.targetId === targetId) { - return page; - } - } catch (err) { - // Only ignore "target closed" errors, log unexpected ones - const msg = err instanceof Error ? err.message : String(err); - if (!msg.includes("Target closed") && !msg.includes("Session closed")) { - console.warn(`Unexpected error checking page target: ${msg}`); - } - } finally { - if (cdpSession) { - try { - await cdpSession.detach(); - } catch { - // Ignore detach errors - session may already be closed - } - } - } - } - } - return null; - } - - // Helper to get a page by name (used by multiple methods) - async function getPage(name: string, options?: PageOptions): Promise { - // Request the page from server (creates if doesn't exist) - // Use fetchWithRetry for concurrent connection resilience - const res = await fetchWithRetry(`${serverUrl}/pages`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ name, viewport: options?.viewport } satisfies GetPageRequest), - }); - - if (!res.ok) { - throw new Error(`Failed to get page: ${await res.text()}`); - } - - const pageInfo = (await res.json()) as GetPageResponse & { url?: string }; - const { targetId } = pageInfo; - - // Connect to browser - const b = await ensureConnected(); - - // Check if we're in extension mode - const infoRes = await fetchWithRetry(serverUrl); - const info = (await infoRes.json()) as { mode?: string }; - const isExtensionMode = info.mode === "extension"; - - if (isExtensionMode) { - // In extension mode, DON'T use findPageByTargetId as it corrupts page state - // Instead, find page by URL or use the only available page - const allPages = b.contexts().flatMap((ctx) => ctx.pages()); - - if (allPages.length === 0) { - throw new Error(`No pages available in browser`); - } - - if (allPages.length === 1) { - return allPages[0]!; - } - - // Multiple pages - try to match by URL if available - if (pageInfo.url) { - const matchingPage = allPages.find((p) => p.url() === pageInfo.url); - if (matchingPage) { - return matchingPage; - } - } - - // Fall back to first page - if (!allPages[0]) { - throw new Error(`No pages available in browser`); - } - return allPages[0]; - } - - // In launch mode, use the original targetId-based lookup - const page = await findPageByTargetId(b, targetId); - if (!page) { - throw new Error(`Page "${name}" not found in browser contexts`); - } - - return page; - } - - return { - page: getPage, - - async list(): Promise { - const res = await fetchWithRetry(`${serverUrl}/pages`); - const data = (await res.json()) as ListPagesResponse; - return data.pages; - }, - - async close(name: string): Promise { - const res = await fetchWithRetry(`${serverUrl}/pages/${encodeURIComponent(name)}`, { - method: "DELETE", - }); - - if (!res.ok) { - throw new Error(`Failed to close page: ${await res.text()}`); - } - }, - - async disconnect(): Promise { - // Just disconnect the CDP connection - pages persist on server - if (browser) { - await browser.close(); - browser = null; - } - }, - - async getAISnapshot(name: string): Promise { - // Get the page - const page = await getPage(name); - - // Inject the snapshot script and call getAISnapshot - const snapshotScript = getSnapshotScript(); - const snapshot = await page.evaluate((script: string) => { - // Inject script if not already present - // Note: page.evaluate runs in browser context where window exists - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const w = globalThis as any; - if (!w.__devBrowser_getAISnapshot) { - // eslint-disable-next-line no-eval - eval(script); - } - return w.__devBrowser_getAISnapshot(); - }, snapshotScript); - - return snapshot; - }, - - async selectSnapshotRef(name: string, ref: string): Promise { - // Get the page - const page = await getPage(name); - - // Find the element using the stored refs - const elementHandle = await page.evaluateHandle((refId: string) => { - // Note: page.evaluateHandle runs in browser context where globalThis is the window - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const w = globalThis as any; - const refs = w.__devBrowserRefs; - if (!refs) { - throw new Error("No snapshot refs found. Call getAISnapshot first."); - } - const element = refs[refId]; - if (!element) { - throw new Error( - `Ref "${refId}" not found. Available refs: ${Object.keys(refs).join(", ")}` - ); - } - return element; - }, ref); - - // Check if we got an element - const element = elementHandle.asElement(); - if (!element) { - await elementHandle.dispose(); - return null; - } - - return element; - }, - - async getServerInfo(): Promise { - const res = await fetchWithRetry(serverUrl); - if (!res.ok) { - throw new Error(`Server returned ${res.status}: ${await res.text()}`); - } - const info = (await res.json()) as { - wsEndpoint: string; - mode?: string; - extensionConnected?: boolean; - }; - return { - wsEndpoint: info.wsEndpoint, - mode: (info.mode as "launch" | "extension") ?? "launch", - extensionConnected: info.extensionConnected, - }; - }, - }; -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/index.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/index.ts deleted file mode 100644 index 204a1be6c..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/index.ts +++ /dev/null @@ -1,324 +0,0 @@ -import express, { type Express, type Request, type Response } from "express"; -// Using rebrowser-playwright (via npm alias) for better anti-detection -// Rebrowser patches fix CDP-level detection leaks (Runtime.Enable) that stealth plugins can't fix -import { chromium, type BrowserContext, type Page } from "playwright"; -import { mkdirSync } from "fs"; -import { join } from "path"; -import type { Socket } from "net"; -import type { - ServeOptions, - GetPageRequest, - GetPageResponse, - ListPagesResponse, - ServerInfoResponse, -} from "./types"; - -export type { ServeOptions, GetPageResponse, ListPagesResponse, ServerInfoResponse }; - -export interface DevBrowserServer { - wsEndpoint: string; - port: number; - stop: () => Promise; -} - -// Helper to retry fetch with exponential backoff -async function fetchWithRetry( - url: string, - maxRetries = 5, - delayMs = 500 -): Promise { - let lastError: Error | null = null; - for (let i = 0; i < maxRetries; i++) { - try { - const res = await fetch(url); - if (res.ok) return res; - throw new Error(`HTTP ${res.status}: ${res.statusText}`); - } catch (err) { - lastError = err instanceof Error ? err : new Error(String(err)); - if (i < maxRetries - 1) { - await new Promise((resolve) => setTimeout(resolve, delayMs * (i + 1))); - } - } - } - throw new Error(`Failed after ${maxRetries} retries: ${lastError?.message}`); -} - -// Helper to add timeout to promises -function withTimeout(promise: Promise, ms: number, message: string): Promise { - return Promise.race([ - promise, - new Promise((_, reject) => - setTimeout(() => reject(new Error(`Timeout: ${message}`)), ms) - ), - ]); -} - -export async function serve(options: ServeOptions = {}): Promise { - // Accomplish uses ports 9224/9225 to avoid conflicts with Claude Code's dev-browser (9222/9223) - const port = options.port ?? 9224; - const headless = options.headless ?? false; - const cdpPort = options.cdpPort ?? 9225; - const profileDir = options.profileDir; - const useSystemChrome = options.useSystemChrome ?? true; // Default to trying system Chrome - - // Validate port numbers - if (port < 1 || port > 65535) { - throw new Error(`Invalid port: ${port}. Must be between 1 and 65535`); - } - if (cdpPort < 1 || cdpPort > 65535) { - throw new Error(`Invalid cdpPort: ${cdpPort}. Must be between 1 and 65535`); - } - if (port === cdpPort) { - throw new Error("port and cdpPort must be different"); - } - - // Base profile directory - const baseProfileDir = profileDir ?? join(process.cwd(), ".browser-data"); - - let context: BrowserContext; - let usedSystemChrome = false; - - // Try system Chrome first if enabled (much faster - no download needed) - if (useSystemChrome) { - try { - console.log("Trying to use system Chrome..."); - // Use separate profile directory for system Chrome to avoid compatibility issues - const chromeUserDataDir = join(baseProfileDir, "chrome-profile"); - mkdirSync(chromeUserDataDir, { recursive: true }); - - context = await chromium.launchPersistentContext(chromeUserDataDir, { - headless, - channel: 'chrome', // Use system Chrome instead of Playwright's Chromium - ignoreDefaultArgs: ['--enable-automation'], // Remove automation flag - args: [ - `--remote-debugging-port=${cdpPort}`, - '--disable-blink-features=AutomationControlled', // Hide navigator.webdriver - ], - }); - usedSystemChrome = true; - console.log("Using system Chrome (fast startup!)"); - } catch (chromeError) { - console.log("System Chrome not available, falling back to Playwright Chromium..."); - // Fall through to Playwright Chromium below - } - } - - // Fall back to Playwright's bundled Chromium - if (!usedSystemChrome) { - // Use separate profile directory for Playwright Chromium to avoid compatibility issues - const playwrightUserDataDir = join(baseProfileDir, "playwright-profile"); - mkdirSync(playwrightUserDataDir, { recursive: true }); - - console.log("Launching browser with Playwright Chromium..."); - context = await chromium.launchPersistentContext(playwrightUserDataDir, { - headless, - ignoreDefaultArgs: ['--enable-automation'], // Remove automation flag - args: [ - `--remote-debugging-port=${cdpPort}`, - '--disable-blink-features=AutomationControlled', // Hide navigator.webdriver - ], - }); - console.log("Browser launched with Playwright Chromium"); - } - - console.log("Browser launched with persistent profile..."); - - // Get the CDP WebSocket endpoint from Chrome's JSON API (with retry for slow startup) - const cdpResponse = await fetchWithRetry(`http://127.0.0.1:${cdpPort}/json/version`); - const cdpInfo = (await cdpResponse.json()) as { webSocketDebuggerUrl: string }; - const wsEndpoint = cdpInfo.webSocketDebuggerUrl; - console.log(`CDP WebSocket endpoint: ${wsEndpoint}`); - - // Registry entry type for page tracking - interface PageEntry { - page: Page; - targetId: string; - } - - // Registry: name -> PageEntry - const registry = new Map(); - - // Helper to get CDP targetId for a page - async function getTargetId(page: Page): Promise { - const cdpSession = await context.newCDPSession(page); - try { - const { targetInfo } = await cdpSession.send("Target.getTargetInfo"); - return targetInfo.targetId; - } finally { - await cdpSession.detach(); - } - } - - // Express server for page management - const app: Express = express(); - app.use(express.json()); - - // GET / - server info - app.get("/", (_req: Request, res: Response) => { - const response: ServerInfoResponse = { wsEndpoint }; - res.json(response); - }); - - // GET /pages - list all pages - app.get("/pages", (_req: Request, res: Response) => { - const response: ListPagesResponse = { - pages: Array.from(registry.keys()), - }; - res.json(response); - }); - - // POST /pages - get or create page - app.post("/pages", async (req: Request, res: Response) => { - const body = req.body as GetPageRequest; - const { name, viewport } = body; - - if (!name || typeof name !== "string") { - res.status(400).json({ error: "name is required and must be a string" }); - return; - } - - if (name.length === 0) { - res.status(400).json({ error: "name cannot be empty" }); - return; - } - - if (name.length > 256) { - res.status(400).json({ error: "name must be 256 characters or less" }); - return; - } - - // Check if page already exists - let entry = registry.get(name); - if (!entry) { - // Create new page in the persistent context (with timeout to prevent hangs) - const page = await withTimeout(context.newPage(), 30000, "Page creation timed out after 30s"); - - // Apply viewport if provided - if (viewport) { - await page.setViewportSize(viewport); - } - - const targetId = await getTargetId(page); - entry = { page, targetId }; - registry.set(name, entry); - - // Clean up registry when page is closed (e.g., user clicks X) - page.on("close", () => { - registry.delete(name); - }); - } - - const response: GetPageResponse = { wsEndpoint, name, targetId: entry.targetId }; - res.json(response); - }); - - // DELETE /pages/:name - close a page - app.delete("/pages/:name", async (req: Request<{ name: string }>, res: Response) => { - const name = decodeURIComponent(req.params.name); - const entry = registry.get(name); - - if (entry) { - await entry.page.close(); - registry.delete(name); - res.json({ success: true }); - return; - } - - res.status(404).json({ error: "page not found" }); - }); - - // Start the server - const server = app.listen(port, () => { - console.log(`HTTP API server running on port ${port}`); - }); - - // Track active connections for clean shutdown - const connections = new Set(); - server.on("connection", (socket: Socket) => { - connections.add(socket); - socket.on("close", () => connections.delete(socket)); - }); - - // Track if cleanup has been called to avoid double cleanup - let cleaningUp = false; - - // Cleanup function - const cleanup = async () => { - if (cleaningUp) return; - cleaningUp = true; - - console.log("\nShutting down..."); - - // Close all active HTTP connections - for (const socket of connections) { - socket.destroy(); - } - connections.clear(); - - // Close all pages - for (const entry of registry.values()) { - try { - await entry.page.close(); - } catch { - // Page might already be closed - } - } - registry.clear(); - - // Close context (this also closes the browser) - try { - await context.close(); - } catch { - // Context might already be closed - } - - server.close(); - console.log("Server stopped."); - }; - - // Synchronous cleanup for forced exits - const syncCleanup = () => { - try { - context.close(); - } catch { - // Best effort - } - }; - - // Signal handlers (consolidated to reduce duplication) - const signals = ["SIGINT", "SIGTERM", "SIGHUP"] as const; - - const signalHandler = async () => { - await cleanup(); - process.exit(0); - }; - - const errorHandler = async (err: unknown) => { - console.error("Unhandled error:", err); - await cleanup(); - process.exit(1); - }; - - // Register handlers - signals.forEach((sig) => process.on(sig, signalHandler)); - process.on("uncaughtException", errorHandler); - process.on("unhandledRejection", errorHandler); - process.on("exit", syncCleanup); - - // Helper to remove all handlers - const removeHandlers = () => { - signals.forEach((sig) => process.off(sig, signalHandler)); - process.off("uncaughtException", errorHandler); - process.off("unhandledRejection", errorHandler); - process.off("exit", syncCleanup); - }; - - return { - wsEndpoint, - port, - async stop() { - removeHandlers(); - await cleanup(); - }, - }; -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/relay.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/relay.ts deleted file mode 100644 index cb19b6e71..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/relay.ts +++ /dev/null @@ -1,732 +0,0 @@ -/** - * CDP Relay Server for Chrome Extension mode - * - * This server acts as a bridge between Playwright clients and a Chrome extension. - * Instead of launching a browser, it waits for the extension to connect and - * forwards CDP commands/events between them. - */ - -import { Hono } from "hono"; -import { serve } from "@hono/node-server"; -import { createNodeWebSocket } from "@hono/node-ws"; -import type { WSContext } from "hono/ws"; - -// ============================================================================ -// Types -// ============================================================================ - -export interface RelayOptions { - port?: number; - host?: string; -} - -export interface RelayServer { - wsEndpoint: string; - port: number; - stop(): Promise; -} - -interface TargetInfo { - targetId: string; - type: string; - title: string; - url: string; - attached: boolean; -} - -interface ConnectedTarget { - sessionId: string; - targetId: string; - targetInfo: TargetInfo; -} - -interface PlaywrightClient { - id: string; - ws: WSContext; - knownTargets: Set; // targetIds this client has received attachedToTarget for -} - -// Message types for extension communication -interface ExtensionCommandMessage { - id: number; - method: "forwardCDPCommand"; - params: { - method: string; - params?: Record; - sessionId?: string; - }; -} - -interface ExtensionResponseMessage { - id: number; - result?: unknown; - error?: string; -} - -interface ExtensionEventMessage { - method: "forwardCDPEvent"; - params: { - method: string; - params?: Record; - sessionId?: string; - }; -} - -type ExtensionMessage = - | ExtensionResponseMessage - | ExtensionEventMessage - | { method: "log"; params: { level: string; args: string[] } }; - -// CDP message types -interface CDPCommand { - id: number; - method: string; - params?: Record; - sessionId?: string; -} - -interface CDPResponse { - id: number; - sessionId?: string; - result?: unknown; - error?: { message: string }; -} - -interface CDPEvent { - method: string; - sessionId?: string; - params?: Record; -} - -// ============================================================================ -// Relay Server Implementation -// ============================================================================ - -export async function serveRelay(options: RelayOptions = {}): Promise { - // Accomplish uses port 9224 to avoid conflicts with Claude Code's dev-browser (9222) - const port = options.port ?? 9224; - const host = options.host ?? "127.0.0.1"; - - // State - const connectedTargets = new Map(); - const namedPages = new Map(); // name -> sessionId - const playwrightClients = new Map(); - let extensionWs: WSContext | null = null; - - // Pending requests to extension - const extensionPendingRequests = new Map< - number, - { - resolve: (result: unknown) => void; - reject: (error: Error) => void; - } - >(); - let extensionMessageId = 0; - - // ============================================================================ - // Helper Functions - // ============================================================================ - - function log(...args: unknown[]) { - console.log("[relay]", ...args); - } - - function sendToPlaywright(message: CDPResponse | CDPEvent, clientId?: string) { - const messageStr = JSON.stringify(message); - - if (clientId) { - const client = playwrightClients.get(clientId); - if (client) { - client.ws.send(messageStr); - } - } else { - // Broadcast to all clients - for (const client of playwrightClients.values()) { - client.ws.send(messageStr); - } - } - } - - /** - * Send Target.attachedToTarget event with deduplication. - * Tracks which targets each client has seen to prevent "Duplicate target" errors. - */ - function sendAttachedToTarget( - target: ConnectedTarget, - clientId?: string, - waitingForDebugger = false - ) { - const event: CDPEvent = { - method: "Target.attachedToTarget", - params: { - sessionId: target.sessionId, - targetInfo: { ...target.targetInfo, attached: true }, - waitingForDebugger, - }, - }; - - if (clientId) { - const client = playwrightClients.get(clientId); - if (client && !client.knownTargets.has(target.targetId)) { - client.knownTargets.add(target.targetId); - client.ws.send(JSON.stringify(event)); - } - } else { - // Broadcast to all clients that don't know about this target yet - for (const client of playwrightClients.values()) { - if (!client.knownTargets.has(target.targetId)) { - client.knownTargets.add(target.targetId); - client.ws.send(JSON.stringify(event)); - } - } - } - } - - async function sendToExtension({ - method, - params, - timeout = 30000, - }: { - method: string; - params?: Record; - timeout?: number; - }): Promise { - if (!extensionWs) { - throw new Error("Extension not connected"); - } - - const id = ++extensionMessageId; - const message = { id, method, params }; - - extensionWs.send(JSON.stringify(message)); - - return new Promise((resolve, reject) => { - const timeoutId = setTimeout(() => { - extensionPendingRequests.delete(id); - reject(new Error(`Extension request timeout after ${timeout}ms: ${method}`)); - }, timeout); - - extensionPendingRequests.set(id, { - resolve: (result) => { - clearTimeout(timeoutId); - resolve(result); - }, - reject: (error) => { - clearTimeout(timeoutId); - reject(error); - }, - }); - }); - } - - async function routeCdpCommand({ - method, - params, - sessionId, - }: { - method: string; - params?: Record; - sessionId?: string; - }): Promise { - // Handle some CDP commands locally - switch (method) { - case "Browser.getVersion": - return { - protocolVersion: "1.3", - product: "Chrome/Extension-Bridge", - revision: "1.0.0", - userAgent: "dev-browser-relay/1.0.0", - jsVersion: "V8", - }; - - case "Browser.setDownloadBehavior": - return {}; - - case "Target.setAutoAttach": - if (sessionId) { - break; // Forward to extension for child frames - } - return {}; - - case "Target.setDiscoverTargets": - return {}; - - case "Target.attachToBrowserTarget": - // Browser-level session - return a fake session since we only proxy tabs - return { sessionId: "browser" }; - - case "Target.detachFromTarget": - // If detaching from our fake "browser" session, just return success - if (sessionId === "browser" || params?.sessionId === "browser") { - return {}; - } - // Otherwise forward to extension - break; - - case "Target.attachToTarget": { - const targetId = params?.targetId as string; - if (!targetId) { - throw new Error("targetId is required for Target.attachToTarget"); - } - - for (const target of connectedTargets.values()) { - if (target.targetId === targetId) { - return { sessionId: target.sessionId }; - } - } - - throw new Error(`Target ${targetId} not found in connected targets`); - } - - case "Target.getTargetInfo": { - const targetId = params?.targetId as string; - - if (targetId) { - for (const target of connectedTargets.values()) { - if (target.targetId === targetId) { - return { targetInfo: target.targetInfo }; - } - } - } - - if (sessionId) { - const target = connectedTargets.get(sessionId); - if (target) { - return { targetInfo: target.targetInfo }; - } - } - - // Return first target if no specific one requested - const firstTarget = Array.from(connectedTargets.values())[0]; - return { targetInfo: firstTarget?.targetInfo }; - } - - case "Target.getTargets": - return { - targetInfos: Array.from(connectedTargets.values()).map((t) => ({ - ...t.targetInfo, - attached: true, - })), - }; - - case "Target.createTarget": - case "Target.closeTarget": - // Forward to extension - return await sendToExtension({ - method: "forwardCDPCommand", - params: { method, params }, - }); - } - - // Forward all other commands to extension - return await sendToExtension({ - method: "forwardCDPCommand", - params: { sessionId, method, params }, - }); - } - - // ============================================================================ - // HTTP/WebSocket Server - // ============================================================================ - - const app = new Hono(); - const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app }); - - // Health check / server info - app.get("/", (c) => { - return c.json({ - wsEndpoint: `ws://${host}:${port}/cdp`, - extensionConnected: extensionWs !== null, - mode: "extension", - }); - }); - - // List named pages - app.get("/pages", (c) => { - return c.json({ - pages: Array.from(namedPages.keys()), - }); - }); - - // Get or create a named page - app.post("/pages", async (c) => { - const body = await c.req.json(); - const name = body.name as string; - - if (!name) { - return c.json({ error: "name is required" }, 400); - } - - // Check if page already exists by name - const existingSessionId = namedPages.get(name); - if (existingSessionId) { - const target = connectedTargets.get(existingSessionId); - if (target) { - // Activate the tab so it becomes the active tab - await sendToExtension({ - method: "forwardCDPCommand", - params: { - method: "Target.activateTarget", - params: { targetId: target.targetId }, - }, - }); - return c.json({ - wsEndpoint: `ws://${host}:${port}/cdp`, - name, - targetId: target.targetId, - url: target.targetInfo.url, - }); - } - // Session no longer valid, remove it - namedPages.delete(name); - } - - // Create a new tab - if (!extensionWs) { - return c.json({ error: "Extension not connected" }, 503); - } - - try { - const result = (await sendToExtension({ - method: "forwardCDPCommand", - params: { method: "Target.createTarget", params: { url: "about:blank" } }, - })) as { targetId: string }; - - // Wait for Target.attachedToTarget event to register the new target - await new Promise((resolve) => setTimeout(resolve, 200)); - - // Find and name the new target - for (const [sessionId, target] of connectedTargets) { - if (target.targetId === result.targetId) { - namedPages.set(name, sessionId); - // Activate the tab so it becomes the active tab - await sendToExtension({ - method: "forwardCDPCommand", - params: { - method: "Target.activateTarget", - params: { targetId: target.targetId }, - }, - }); - return c.json({ - wsEndpoint: `ws://${host}:${port}/cdp`, - name, - targetId: target.targetId, - url: target.targetInfo.url, - }); - } - } - - throw new Error("Target created but not found in registry"); - } catch (err) { - log("Error creating tab:", err); - return c.json({ error: (err as Error).message }, 500); - } - }); - - // Delete a named page (removes the name, doesn't close the tab) - app.delete("/pages/:name", (c) => { - const name = c.req.param("name"); - const deleted = namedPages.delete(name); - return c.json({ success: deleted }); - }); - - // ============================================================================ - // Playwright Client WebSocket - // ============================================================================ - - app.get( - "/cdp/:clientId?", - upgradeWebSocket((c) => { - const clientId = - c.req.param("clientId") || `client-${Date.now()}-${Math.random().toString(36).slice(2)}`; - - return { - onOpen(_event, ws) { - if (playwrightClients.has(clientId)) { - log(`Rejecting duplicate client ID: ${clientId}`); - ws.close(1000, "Client ID already connected"); - return; - } - - playwrightClients.set(clientId, { id: clientId, ws, knownTargets: new Set() }); - log(`Playwright client connected: ${clientId}`); - }, - - async onMessage(event, _ws) { - let message: CDPCommand; - - try { - message = JSON.parse(event.data.toString()); - } catch { - return; - } - - const { id, sessionId, method, params } = message; - - if (!extensionWs) { - sendToPlaywright( - { - id, - sessionId, - error: { message: "Extension not connected" }, - }, - clientId - ); - return; - } - - try { - const result = await routeCdpCommand({ method, params, sessionId }); - - // After Target.setAutoAttach, send attachedToTarget for existing targets - // Uses deduplication to prevent "Duplicate target" errors - if (method === "Target.setAutoAttach" && !sessionId) { - for (const target of connectedTargets.values()) { - sendAttachedToTarget(target, clientId); - } - } - - // After Target.setDiscoverTargets, send targetCreated events - if ( - method === "Target.setDiscoverTargets" && - (params as { discover?: boolean })?.discover - ) { - for (const target of connectedTargets.values()) { - sendToPlaywright( - { - method: "Target.targetCreated", - params: { - targetInfo: { ...target.targetInfo, attached: true }, - }, - }, - clientId - ); - } - } - - // After Target.attachToTarget, send attachedToTarget event (with deduplication) - if ( - method === "Target.attachToTarget" && - (result as { sessionId?: string })?.sessionId - ) { - const targetId = params?.targetId as string; - const target = Array.from(connectedTargets.values()).find( - (t) => t.targetId === targetId - ); - if (target) { - sendAttachedToTarget(target, clientId); - } - } - - sendToPlaywright({ id, sessionId, result }, clientId); - } catch (e) { - log("Error handling CDP command:", method, e); - sendToPlaywright( - { - id, - sessionId, - error: { message: (e as Error).message }, - }, - clientId - ); - } - }, - - onClose() { - playwrightClients.delete(clientId); - log(`Playwright client disconnected: ${clientId}`); - }, - - onError(event) { - log(`Playwright WebSocket error [${clientId}]:`, event); - }, - }; - }) - ); - - // ============================================================================ - // Extension WebSocket - // ============================================================================ - - app.get( - "/extension", - upgradeWebSocket(() => { - return { - onOpen(_event, ws) { - if (extensionWs) { - log("Closing existing extension connection"); - extensionWs.close(4001, "Extension Replaced"); - - // Clear state - connectedTargets.clear(); - namedPages.clear(); - for (const pending of extensionPendingRequests.values()) { - pending.reject(new Error("Extension connection replaced")); - } - extensionPendingRequests.clear(); - } - - extensionWs = ws; - log("Extension connected"); - }, - - async onMessage(event, ws) { - let message: ExtensionMessage; - - try { - message = JSON.parse(event.data.toString()); - } catch { - ws.close(1000, "Invalid JSON"); - return; - } - - // Handle response to our request - if ("id" in message && typeof message.id === "number") { - const pending = extensionPendingRequests.get(message.id); - if (!pending) { - log("Unexpected response with id:", message.id); - return; - } - - extensionPendingRequests.delete(message.id); - - if ((message as ExtensionResponseMessage).error) { - pending.reject(new Error((message as ExtensionResponseMessage).error)); - } else { - pending.resolve((message as ExtensionResponseMessage).result); - } - return; - } - - // Handle log messages - if ("method" in message && message.method === "log") { - const { level, args } = message.params; - console.log(`[extension:${level}]`, ...args); - return; - } - - // Handle CDP events from extension - if ("method" in message && message.method === "forwardCDPEvent") { - const eventMsg = message as ExtensionEventMessage; - const { method, params, sessionId } = eventMsg.params; - - // Handle target lifecycle events - if (method === "Target.attachedToTarget") { - const targetParams = params as { - sessionId: string; - targetInfo: TargetInfo; - }; - - const target: ConnectedTarget = { - sessionId: targetParams.sessionId, - targetId: targetParams.targetInfo.targetId, - targetInfo: targetParams.targetInfo, - }; - connectedTargets.set(targetParams.sessionId, target); - - log(`Target attached: ${targetParams.targetInfo.url} (${targetParams.sessionId})`); - - // Use deduplication helper - only sends to clients that don't know about this target - sendAttachedToTarget(target); - } else if (method === "Target.detachedFromTarget") { - const detachParams = params as { sessionId: string }; - connectedTargets.delete(detachParams.sessionId); - - // Also remove any name mapping - for (const [name, sid] of namedPages) { - if (sid === detachParams.sessionId) { - namedPages.delete(name); - break; - } - } - - log(`Target detached: ${detachParams.sessionId}`); - - sendToPlaywright({ - method: "Target.detachedFromTarget", - params: detachParams, - }); - } else if (method === "Target.targetInfoChanged") { - const infoParams = params as { targetInfo: TargetInfo }; - for (const target of connectedTargets.values()) { - if (target.targetId === infoParams.targetInfo.targetId) { - target.targetInfo = infoParams.targetInfo; - break; - } - } - - sendToPlaywright({ - method: "Target.targetInfoChanged", - params: infoParams, - }); - } else { - // Forward other CDP events to Playwright - sendToPlaywright({ - sessionId, - method, - params, - }); - } - } - }, - - onClose(_event, ws) { - if (extensionWs && extensionWs !== ws) { - log("Old extension connection closed"); - return; - } - - log("Extension disconnected"); - - for (const pending of extensionPendingRequests.values()) { - pending.reject(new Error("Extension connection closed")); - } - extensionPendingRequests.clear(); - - extensionWs = null; - connectedTargets.clear(); - namedPages.clear(); - - // Close all Playwright clients - for (const client of playwrightClients.values()) { - client.ws.close(1000, "Extension disconnected"); - } - playwrightClients.clear(); - }, - - onError(event) { - log("Extension WebSocket error:", event); - }, - }; - }) - ); - - // ============================================================================ - // Start Server - // ============================================================================ - - const server = serve({ fetch: app.fetch, port, hostname: host }); - injectWebSocket(server); - - const wsEndpoint = `ws://${host}:${port}/cdp`; - - log("CDP relay server started"); - log(` HTTP: http://${host}:${port}`); - log(` CDP endpoint: ${wsEndpoint}`); - log(` Extension endpoint: ws://${host}:${port}/extension`); - log(""); - log("Waiting for extension to connect..."); - - return { - wsEndpoint, - port, - async stop() { - for (const client of playwrightClients.values()) { - client.ws.close(1000, "Server stopped"); - } - playwrightClients.clear(); - extensionWs?.close(1000, "Server stopped"); - server.close(); - }, - }; -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/__tests__/snapshot.test.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/__tests__/snapshot.test.ts deleted file mode 100644 index 8439fd72c..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/__tests__/snapshot.test.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { chromium } from "playwright"; -import type { Browser, BrowserContext, Page } from "playwright"; -import { beforeAll, afterAll, beforeEach, afterEach, describe, test, expect } from "vitest"; -import { getSnapshotScript, clearSnapshotScriptCache } from "../browser-script"; - -let browser: Browser; -let context: BrowserContext; -let page: Page; - -beforeAll(async () => { - browser = await chromium.launch(); -}); - -afterAll(async () => { - await browser.close(); -}); - -beforeEach(async () => { - context = await browser.newContext(); - page = await context.newPage(); - clearSnapshotScriptCache(); // Start fresh for each test -}); - -afterEach(async () => { - await context.close(); -}); - -async function setContent(html: string): Promise { - await page.setContent(html, { waitUntil: "domcontentloaded" }); -} - -async function getSnapshot(): Promise { - const script = getSnapshotScript(); - return await page.evaluate((s: string) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const w = globalThis as any; - if (!w.__devBrowser_getAISnapshot) { - // eslint-disable-next-line no-eval - eval(s); - } - return w.__devBrowser_getAISnapshot(); - }, script); -} - -async function selectRef(ref: string): Promise { - return await page.evaluate((refId: string) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const w = globalThis as any; - const element = w.__devBrowser_selectSnapshotRef(refId); - return { - tagName: element.tagName, - textContent: element.textContent?.trim(), - }; - }, ref); -} - -describe("ARIA Snapshot", () => { - test("generates snapshot for simple page", async () => { - await setContent(` - - -

Hello World

- - - - `); - - const snapshot = await getSnapshot(); - - expect(snapshot).toContain("heading"); - expect(snapshot).toContain("Hello World"); - expect(snapshot).toContain("button"); - expect(snapshot).toContain("Click me"); - }); - - test("assigns refs to interactive elements", async () => { - await setContent(` - - - - - - - `); - - const snapshot = await getSnapshot(); - - // Should have refs - expect(snapshot).toMatch(/\[ref=e\d+\]/); - }); - - test("refs persist on window.__devBrowserRefs", async () => { - await setContent(` - - - - - - `); - - await getSnapshot(); - - // Check that refs are stored - const hasRefs = await page.evaluate(() => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const w = globalThis as any; - return typeof w.__devBrowserRefs === "object" && Object.keys(w.__devBrowserRefs).length > 0; - }); - - expect(hasRefs).toBe(true); - }); - - test("selectSnapshotRef returns element for valid ref", async () => { - await setContent(` - - - - - - `); - - const snapshot = await getSnapshot(); - - // Extract a ref from the snapshot - const refMatch = snapshot.match(/\[ref=(e\d+)\]/); - expect(refMatch).toBeTruthy(); - expect(refMatch![1]).toBeDefined(); - const ref = refMatch![1] as string; - - // Select the element by ref - const result = (await selectRef(ref)) as { tagName: string; textContent: string }; - expect(result.tagName).toBe("BUTTON"); - expect(result.textContent).toBe("My Button"); - }); - - test("includes links with URLs", async () => { - await setContent(` - - -
Example Link - - - `); - - const snapshot = await getSnapshot(); - - expect(snapshot).toContain("link"); - expect(snapshot).toContain("Example Link"); - // URL should be included as a prop - expect(snapshot).toContain("/url:"); - }); - - test("includes form elements", async () => { - await setContent(` - - - - - - - - `); - - const snapshot = await getSnapshot(); - - expect(snapshot).toContain("textbox"); - expect(snapshot).toContain("checkbox"); - expect(snapshot).toContain("combobox"); - }); - - test("renders nested structure correctly", async () => { - await setContent(` - - - - - - `); - - const snapshot = await getSnapshot(); - - expect(snapshot).toContain("navigation"); - expect(snapshot).toContain("list"); - expect(snapshot).toContain("listitem"); - expect(snapshot).toContain("link"); - }); - - test("handles disabled elements", async () => { - await setContent(` - - - - - - `); - - const snapshot = await getSnapshot(); - - expect(snapshot).toContain("[disabled]"); - }); - - test("handles checked checkboxes", async () => { - await setContent(` - - - - - - `); - - const snapshot = await getSnapshot(); - - expect(snapshot).toContain("[checked]"); - }); -}); diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/browser-script.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/browser-script.ts deleted file mode 100644 index 133e637d9..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/browser-script.ts +++ /dev/null @@ -1,877 +0,0 @@ -/** - * Browser-injectable snapshot script. - * - * This module provides the snapshot functionality as a string that can be - * injected into the browser via page.addScriptTag() or page.evaluate(). - * - * The approach is to read the compiled JavaScript at runtime and bundle it - * into a single script that exposes window.__devBrowser_getAISnapshot() and - * window.__devBrowser_selectSnapshotRef(). - */ - -import * as fs from "fs"; -import * as path from "path"; - -// Cache the bundled script -let cachedScript: string | null = null; - -/** - * Get the snapshot script that can be injected into the browser. - * Returns a self-contained JavaScript string that: - * 1. Defines all necessary functions (domUtils, roleUtils, yaml, ariaSnapshot) - * 2. Exposes window.__devBrowser_getAISnapshot() - * 3. Exposes window.__devBrowser_selectSnapshotRef() - */ -export function getSnapshotScript(): string { - if (cachedScript) return cachedScript; - - // Read the compiled JavaScript files - const snapshotDir = path.dirname(new URL(import.meta.url).pathname); - - // For now, we'll inline the functions directly - // In production, we could use a bundler like esbuild to create a single file - cachedScript = ` -(function() { - // Skip if already injected - if (window.__devBrowser_getAISnapshot) return; - - ${getDomUtilsCode()} - ${getYamlCode()} - ${getRoleUtilsCode()} - ${getAriaSnapshotCode()} - - // Expose main functions - window.__devBrowser_getAISnapshot = getAISnapshot; - window.__devBrowser_selectSnapshotRef = selectSnapshotRef; -})(); -`; - - return cachedScript; -} - -function getDomUtilsCode(): string { - return ` -// === domUtils === -let cacheStyle; -let cachesCounter = 0; - -function beginDOMCaches() { - ++cachesCounter; - cacheStyle = cacheStyle || new Map(); -} - -function endDOMCaches() { - if (!--cachesCounter) { - cacheStyle = undefined; - } -} - -function getElementComputedStyle(element, pseudo) { - const cache = cacheStyle; - const cacheKey = pseudo ? undefined : element; - if (cache && cacheKey && cache.has(cacheKey)) return cache.get(cacheKey); - const style = element.ownerDocument && element.ownerDocument.defaultView - ? element.ownerDocument.defaultView.getComputedStyle(element, pseudo) - : undefined; - if (cache && cacheKey) cache.set(cacheKey, style); - return style; -} - -function parentElementOrShadowHost(element) { - if (element.parentElement) return element.parentElement; - if (!element.parentNode) return; - if (element.parentNode.nodeType === 11 && element.parentNode.host) - return element.parentNode.host; -} - -function enclosingShadowRootOrDocument(element) { - let node = element; - while (node.parentNode) node = node.parentNode; - if (node.nodeType === 11 || node.nodeType === 9) - return node; -} - -function closestCrossShadow(element, css, scope) { - while (element) { - const closest = element.closest(css); - if (scope && closest !== scope && closest?.contains(scope)) return; - if (closest) return closest; - element = enclosingShadowHost(element); - } -} - -function enclosingShadowHost(element) { - while (element.parentElement) element = element.parentElement; - return parentElementOrShadowHost(element); -} - -function isElementStyleVisibilityVisible(element, style) { - style = style || getElementComputedStyle(element); - if (!style) return true; - if (style.visibility !== "visible") return false; - const detailsOrSummary = element.closest("details,summary"); - if (detailsOrSummary !== element && detailsOrSummary?.nodeName === "DETAILS" && !detailsOrSummary.open) - return false; - return true; -} - -function computeBox(element) { - const style = getElementComputedStyle(element); - if (!style) return { visible: true, inline: false }; - const cursor = style.cursor; - if (style.display === "contents") { - for (let child = element.firstChild; child; child = child.nextSibling) { - if (child.nodeType === 1 && isElementVisible(child)) - return { visible: true, inline: false, cursor }; - if (child.nodeType === 3 && isVisibleTextNode(child)) - return { visible: true, inline: true, cursor }; - } - return { visible: false, inline: false, cursor }; - } - if (!isElementStyleVisibilityVisible(element, style)) - return { cursor, visible: false, inline: false }; - const rect = element.getBoundingClientRect(); - return { rect, cursor, visible: rect.width > 0 && rect.height > 0, inline: style.display === "inline" }; -} - -function isElementVisible(element) { - return computeBox(element).visible; -} - -function isVisibleTextNode(node) { - const range = node.ownerDocument.createRange(); - range.selectNode(node); - const rect = range.getBoundingClientRect(); - return rect.width > 0 && rect.height > 0; -} - -function elementSafeTagName(element) { - const tagName = element.tagName; - if (typeof tagName === "string") return tagName.toUpperCase(); - if (element instanceof HTMLFormElement) return "FORM"; - return element.tagName.toUpperCase(); -} - -function normalizeWhiteSpace(text) { - return text.split("\\u00A0").map(chunk => - chunk.replace(/\\r\\n/g, "\\n").replace(/[\\u200b\\u00ad]/g, "").replace(/\\s\\s*/g, " ") - ).join("\\u00A0").trim(); -} -`; -} - -function getYamlCode(): string { - return ` -// === yaml === -function yamlEscapeKeyIfNeeded(str) { - if (!yamlStringNeedsQuotes(str)) return str; - return "'" + str.replace(/'/g, "''") + "'"; -} - -function yamlEscapeValueIfNeeded(str) { - if (!yamlStringNeedsQuotes(str)) return str; - return '"' + str.replace(/[\\\\"\x00-\\x1f\\x7f-\\x9f]/g, c => { - switch (c) { - case "\\\\": return "\\\\\\\\"; - case '"': return '\\\\"'; - case "\\b": return "\\\\b"; - case "\\f": return "\\\\f"; - case "\\n": return "\\\\n"; - case "\\r": return "\\\\r"; - case "\\t": return "\\\\t"; - default: - const code = c.charCodeAt(0); - return "\\\\x" + code.toString(16).padStart(2, "0"); - } - }) + '"'; -} - -function yamlStringNeedsQuotes(str) { - if (str.length === 0) return true; - if (/^\\s|\\s$/.test(str)) return true; - if (/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f-\\x9f]/.test(str)) return true; - if (/^-/.test(str)) return true; - if (/[\\n:](\\s|$)/.test(str)) return true; - if (/\\s#/.test(str)) return true; - if (/[\\n\\r]/.test(str)) return true; - if (/^[&*\\],?!>|@"'#%]/.test(str)) return true; - if (/[{}\`]/.test(str)) return true; - if (/^\\[/.test(str)) return true; - if (!isNaN(Number(str)) || ["y","n","yes","no","true","false","on","off","null"].includes(str.toLowerCase())) return true; - return false; -} -`; -} - -function getRoleUtilsCode(): string { - return ` -// === roleUtils === -const validRoles = ["alert","alertdialog","application","article","banner","blockquote","button","caption","cell","checkbox","code","columnheader","combobox","complementary","contentinfo","definition","deletion","dialog","directory","document","emphasis","feed","figure","form","generic","grid","gridcell","group","heading","img","insertion","link","list","listbox","listitem","log","main","mark","marquee","math","meter","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","navigation","none","note","option","paragraph","presentation","progressbar","radio","radiogroup","region","row","rowgroup","rowheader","scrollbar","search","searchbox","separator","slider","spinbutton","status","strong","subscript","superscript","switch","tab","table","tablist","tabpanel","term","textbox","time","timer","toolbar","tooltip","tree","treegrid","treeitem"]; - -let cacheAccessibleName; -let cacheIsHidden; -let cachePointerEvents; -let ariaCachesCounter = 0; - -function beginAriaCaches() { - beginDOMCaches(); - ++ariaCachesCounter; - cacheAccessibleName = cacheAccessibleName || new Map(); - cacheIsHidden = cacheIsHidden || new Map(); - cachePointerEvents = cachePointerEvents || new Map(); -} - -function endAriaCaches() { - if (!--ariaCachesCounter) { - cacheAccessibleName = undefined; - cacheIsHidden = undefined; - cachePointerEvents = undefined; - } - endDOMCaches(); -} - -function hasExplicitAccessibleName(e) { - return e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"); -} - -const kAncestorPreventingLandmark = "article:not([role]), aside:not([role]), main:not([role]), nav:not([role]), section:not([role]), [role=article], [role=complementary], [role=main], [role=navigation], [role=region]"; - -const kGlobalAriaAttributes = [ - ["aria-atomic", undefined],["aria-busy", undefined],["aria-controls", undefined],["aria-current", undefined], - ["aria-describedby", undefined],["aria-details", undefined],["aria-dropeffect", undefined],["aria-flowto", undefined], - ["aria-grabbed", undefined],["aria-hidden", undefined],["aria-keyshortcuts", undefined], - ["aria-label", ["caption","code","deletion","emphasis","generic","insertion","paragraph","presentation","strong","subscript","superscript"]], - ["aria-labelledby", ["caption","code","deletion","emphasis","generic","insertion","paragraph","presentation","strong","subscript","superscript"]], - ["aria-live", undefined],["aria-owns", undefined],["aria-relevant", undefined],["aria-roledescription", ["generic"]] -]; - -function hasGlobalAriaAttribute(element, forRole) { - return kGlobalAriaAttributes.some(([attr, prohibited]) => !prohibited?.includes(forRole || "") && element.hasAttribute(attr)); -} - -function hasTabIndex(element) { - return !Number.isNaN(Number(String(element.getAttribute("tabindex")))); -} - -function isFocusable(element) { - return !isNativelyDisabled(element) && (isNativelyFocusable(element) || hasTabIndex(element)); -} - -function isNativelyFocusable(element) { - const tagName = elementSafeTagName(element); - if (["BUTTON","DETAILS","SELECT","TEXTAREA"].includes(tagName)) return true; - if (tagName === "A" || tagName === "AREA") return element.hasAttribute("href"); - if (tagName === "INPUT") return !element.hidden; - return false; -} - -function isNativelyDisabled(element) { - const isNativeFormControl = ["BUTTON","INPUT","SELECT","TEXTAREA","OPTION","OPTGROUP"].includes(elementSafeTagName(element)); - return isNativeFormControl && (element.hasAttribute("disabled") || belongsToDisabledFieldSet(element)); -} - -function belongsToDisabledFieldSet(element) { - const fieldSetElement = element?.closest("FIELDSET[DISABLED]"); - if (!fieldSetElement) return false; - const legendElement = fieldSetElement.querySelector(":scope > LEGEND"); - return !legendElement || !legendElement.contains(element); -} - -const inputTypeToRole = {button:"button",checkbox:"checkbox",image:"button",number:"spinbutton",radio:"radio",range:"slider",reset:"button",submit:"button"}; - -function getIdRefs(element, ref) { - if (!ref) return []; - const root = enclosingShadowRootOrDocument(element); - if (!root) return []; - try { - const ids = ref.split(" ").filter(id => !!id); - const result = []; - for (const id of ids) { - const firstElement = root.querySelector("#" + CSS.escape(id)); - if (firstElement && !result.includes(firstElement)) result.push(firstElement); - } - return result; - } catch { return []; } -} - -const kImplicitRoleByTagName = { - A: e => e.hasAttribute("href") ? "link" : null, - AREA: e => e.hasAttribute("href") ? "link" : null, - ARTICLE: () => "article", ASIDE: () => "complementary", BLOCKQUOTE: () => "blockquote", BUTTON: () => "button", - CAPTION: () => "caption", CODE: () => "code", DATALIST: () => "listbox", DD: () => "definition", - DEL: () => "deletion", DETAILS: () => "group", DFN: () => "term", DIALOG: () => "dialog", DT: () => "term", - EM: () => "emphasis", FIELDSET: () => "group", FIGURE: () => "figure", - FOOTER: e => closestCrossShadow(e, kAncestorPreventingLandmark) ? null : "contentinfo", - FORM: e => hasExplicitAccessibleName(e) ? "form" : null, - H1: () => "heading", H2: () => "heading", H3: () => "heading", H4: () => "heading", H5: () => "heading", H6: () => "heading", - HEADER: e => closestCrossShadow(e, kAncestorPreventingLandmark) ? null : "banner", - HR: () => "separator", HTML: () => "document", - IMG: e => e.getAttribute("alt") === "" && !e.getAttribute("title") && !hasGlobalAriaAttribute(e) && !hasTabIndex(e) ? "presentation" : "img", - INPUT: e => { - const type = e.type.toLowerCase(); - if (type === "search") return e.hasAttribute("list") ? "combobox" : "searchbox"; - if (["email","tel","text","url",""].includes(type)) { - const list = getIdRefs(e, e.getAttribute("list"))[0]; - return list && elementSafeTagName(list) === "DATALIST" ? "combobox" : "textbox"; - } - if (type === "hidden") return null; - if (type === "file") return "button"; - return inputTypeToRole[type] || "textbox"; - }, - INS: () => "insertion", LI: () => "listitem", MAIN: () => "main", MARK: () => "mark", MATH: () => "math", - MENU: () => "list", METER: () => "meter", NAV: () => "navigation", OL: () => "list", OPTGROUP: () => "group", - OPTION: () => "option", OUTPUT: () => "status", P: () => "paragraph", PROGRESS: () => "progressbar", - SEARCH: () => "search", SECTION: e => hasExplicitAccessibleName(e) ? "region" : null, - SELECT: e => e.hasAttribute("multiple") || e.size > 1 ? "listbox" : "combobox", - STRONG: () => "strong", SUB: () => "subscript", SUP: () => "superscript", SVG: () => "img", - TABLE: () => "table", TBODY: () => "rowgroup", - TD: e => { const table = closestCrossShadow(e, "table"); const role = table ? getExplicitAriaRole(table) : ""; return role === "grid" || role === "treegrid" ? "gridcell" : "cell"; }, - TEXTAREA: () => "textbox", TFOOT: () => "rowgroup", - TH: e => { const scope = e.getAttribute("scope"); if (scope === "col" || scope === "colgroup") return "columnheader"; if (scope === "row" || scope === "rowgroup") return "rowheader"; return "columnheader"; }, - THEAD: () => "rowgroup", TIME: () => "time", TR: () => "row", UL: () => "list" -}; - -function getExplicitAriaRole(element) { - const roles = (element.getAttribute("role") || "").split(" ").map(role => role.trim()); - return roles.find(role => validRoles.includes(role)) || null; -} - -function getImplicitAriaRole(element) { - const fn = kImplicitRoleByTagName[elementSafeTagName(element)]; - return fn ? fn(element) : null; -} - -function hasPresentationConflictResolution(element, role) { - return hasGlobalAriaAttribute(element, role) || isFocusable(element); -} - -function getAriaRole(element) { - const explicitRole = getExplicitAriaRole(element); - if (!explicitRole) return getImplicitAriaRole(element); - if (explicitRole === "none" || explicitRole === "presentation") { - const implicitRole = getImplicitAriaRole(element); - if (hasPresentationConflictResolution(element, implicitRole)) return implicitRole; - } - return explicitRole; -} - -function getAriaBoolean(attr) { - return attr === null ? undefined : attr.toLowerCase() === "true"; -} - -function isElementIgnoredForAria(element) { - return ["STYLE","SCRIPT","NOSCRIPT","TEMPLATE"].includes(elementSafeTagName(element)); -} - -function isElementHiddenForAria(element) { - if (isElementIgnoredForAria(element)) return true; - const style = getElementComputedStyle(element); - const isSlot = element.nodeName === "SLOT"; - if (style?.display === "contents" && !isSlot) { - for (let child = element.firstChild; child; child = child.nextSibling) { - if (child.nodeType === 1 && !isElementHiddenForAria(child)) return false; - if (child.nodeType === 3 && isVisibleTextNode(child)) return false; - } - return true; - } - const isOptionInsideSelect = element.nodeName === "OPTION" && !!element.closest("select"); - if (!isOptionInsideSelect && !isSlot && !isElementStyleVisibilityVisible(element, style)) return true; - return belongsToDisplayNoneOrAriaHiddenOrNonSlotted(element); -} - -function belongsToDisplayNoneOrAriaHiddenOrNonSlotted(element) { - let hidden = cacheIsHidden?.get(element); - if (hidden === undefined) { - hidden = false; - if (element.parentElement && element.parentElement.shadowRoot && !element.assignedSlot) hidden = true; - if (!hidden) { - const style = getElementComputedStyle(element); - hidden = !style || style.display === "none" || getAriaBoolean(element.getAttribute("aria-hidden")) === true; - } - if (!hidden) { - const parent = parentElementOrShadowHost(element); - if (parent) hidden = belongsToDisplayNoneOrAriaHiddenOrNonSlotted(parent); - } - cacheIsHidden?.set(element, hidden); - } - return hidden; -} - -function getAriaLabelledByElements(element) { - const ref = element.getAttribute("aria-labelledby"); - if (ref === null) return null; - const refs = getIdRefs(element, ref); - return refs.length ? refs : null; -} - -function getElementAccessibleName(element, includeHidden) { - let accessibleName = cacheAccessibleName?.get(element); - if (accessibleName === undefined) { - accessibleName = ""; - const elementProhibitsNaming = ["caption","code","definition","deletion","emphasis","generic","insertion","mark","paragraph","presentation","strong","subscript","suggestion","superscript","term","time"].includes(getAriaRole(element) || ""); - if (!elementProhibitsNaming) { - accessibleName = normalizeWhiteSpace(getTextAlternativeInternal(element, { includeHidden, visitedElements: new Set(), embeddedInTargetElement: "self" })); - } - cacheAccessibleName?.set(element, accessibleName); - } - return accessibleName; -} - -function getTextAlternativeInternal(element, options) { - if (options.visitedElements.has(element)) return ""; - const childOptions = { ...options, embeddedInTargetElement: options.embeddedInTargetElement === "self" ? "descendant" : options.embeddedInTargetElement }; - - if (!options.includeHidden) { - const isEmbeddedInHiddenReferenceTraversal = !!options.embeddedInLabelledBy?.hidden || !!options.embeddedInLabel?.hidden; - if (isElementIgnoredForAria(element) || (!isEmbeddedInHiddenReferenceTraversal && isElementHiddenForAria(element))) { - options.visitedElements.add(element); - return ""; - } - } - - const labelledBy = getAriaLabelledByElements(element); - if (!options.embeddedInLabelledBy) { - const accessibleName = (labelledBy || []).map(ref => getTextAlternativeInternal(ref, { ...options, embeddedInLabelledBy: { element: ref, hidden: isElementHiddenForAria(ref) }, embeddedInTargetElement: undefined, embeddedInLabel: undefined })).join(" "); - if (accessibleName) return accessibleName; - } - - const role = getAriaRole(element) || ""; - const tagName = elementSafeTagName(element); - - const ariaLabel = element.getAttribute("aria-label") || ""; - if (ariaLabel.trim()) { options.visitedElements.add(element); return ariaLabel; } - - if (!["presentation","none"].includes(role)) { - if (tagName === "INPUT" && ["button","submit","reset"].includes(element.type)) { - options.visitedElements.add(element); - const value = element.value || ""; - if (value.trim()) return value; - if (element.type === "submit") return "Submit"; - if (element.type === "reset") return "Reset"; - return element.getAttribute("title") || ""; - } - if (tagName === "INPUT" && element.type === "image") { - options.visitedElements.add(element); - const alt = element.getAttribute("alt") || ""; - if (alt.trim()) return alt; - const title = element.getAttribute("title") || ""; - if (title.trim()) return title; - return "Submit"; - } - if (tagName === "IMG") { - options.visitedElements.add(element); - const alt = element.getAttribute("alt") || ""; - if (alt.trim()) return alt; - return element.getAttribute("title") || ""; - } - if (!labelledBy && ["BUTTON","INPUT","TEXTAREA","SELECT"].includes(tagName)) { - const labels = element.labels; - if (labels?.length) { - options.visitedElements.add(element); - return [...labels].map(label => getTextAlternativeInternal(label, { ...options, embeddedInLabel: { element: label, hidden: isElementHiddenForAria(label) }, embeddedInLabelledBy: undefined, embeddedInTargetElement: undefined })).filter(name => !!name).join(" "); - } - } - } - - const allowsNameFromContent = ["button","cell","checkbox","columnheader","gridcell","heading","link","menuitem","menuitemcheckbox","menuitemradio","option","radio","row","rowheader","switch","tab","tooltip","treeitem"].includes(role); - if (allowsNameFromContent || !!options.embeddedInLabelledBy || !!options.embeddedInLabel) { - options.visitedElements.add(element); - const accessibleName = innerAccumulatedElementText(element, childOptions); - const maybeTrimmedAccessibleName = options.embeddedInTargetElement === "self" ? accessibleName.trim() : accessibleName; - if (maybeTrimmedAccessibleName) return accessibleName; - } - - if (!["presentation","none"].includes(role) || tagName === "IFRAME") { - options.visitedElements.add(element); - const title = element.getAttribute("title") || ""; - if (title.trim()) return title; - } - - options.visitedElements.add(element); - return ""; -} - -function innerAccumulatedElementText(element, options) { - const tokens = []; - const visit = (node, skipSlotted) => { - if (skipSlotted && node.assignedSlot) return; - if (node.nodeType === 1) { - const display = getElementComputedStyle(node)?.display || "inline"; - let token = getTextAlternativeInternal(node, options); - if (display !== "inline" || node.nodeName === "BR") token = " " + token + " "; - tokens.push(token); - } else if (node.nodeType === 3) { - tokens.push(node.textContent || ""); - } - }; - const assignedNodes = element.nodeName === "SLOT" ? element.assignedNodes() : []; - if (assignedNodes.length) { - for (const child of assignedNodes) visit(child, false); - } else { - for (let child = element.firstChild; child; child = child.nextSibling) visit(child, true); - if (element.shadowRoot) { - for (let child = element.shadowRoot.firstChild; child; child = child.nextSibling) visit(child, true); - } - } - return tokens.join(""); -} - -const kAriaCheckedRoles = ["checkbox","menuitemcheckbox","option","radio","switch","menuitemradio","treeitem"]; -function getAriaChecked(element) { - const tagName = elementSafeTagName(element); - if (tagName === "INPUT" && element.indeterminate) return "mixed"; - if (tagName === "INPUT" && ["checkbox","radio"].includes(element.type)) return element.checked; - if (kAriaCheckedRoles.includes(getAriaRole(element) || "")) { - const checked = element.getAttribute("aria-checked"); - if (checked === "true") return true; - if (checked === "mixed") return "mixed"; - return false; - } - return false; -} - -const kAriaDisabledRoles = ["application","button","composite","gridcell","group","input","link","menuitem","scrollbar","separator","tab","checkbox","columnheader","combobox","grid","listbox","menu","menubar","menuitemcheckbox","menuitemradio","option","radio","radiogroup","row","rowheader","searchbox","select","slider","spinbutton","switch","tablist","textbox","toolbar","tree","treegrid","treeitem"]; -function getAriaDisabled(element) { - return isNativelyDisabled(element) || hasExplicitAriaDisabled(element); -} -function hasExplicitAriaDisabled(element, isAncestor) { - if (!element) return false; - if (isAncestor || kAriaDisabledRoles.includes(getAriaRole(element) || "")) { - const attribute = (element.getAttribute("aria-disabled") || "").toLowerCase(); - if (attribute === "true") return true; - if (attribute === "false") return false; - return hasExplicitAriaDisabled(parentElementOrShadowHost(element), true); - } - return false; -} - -const kAriaExpandedRoles = ["application","button","checkbox","combobox","gridcell","link","listbox","menuitem","row","rowheader","tab","treeitem","columnheader","menuitemcheckbox","menuitemradio","switch"]; -function getAriaExpanded(element) { - if (elementSafeTagName(element) === "DETAILS") return element.open; - if (kAriaExpandedRoles.includes(getAriaRole(element) || "")) { - const expanded = element.getAttribute("aria-expanded"); - if (expanded === null) return undefined; - if (expanded === "true") return true; - return false; - } - return undefined; -} - -const kAriaLevelRoles = ["heading","listitem","row","treeitem"]; -function getAriaLevel(element) { - const native = {H1:1,H2:2,H3:3,H4:4,H5:5,H6:6}[elementSafeTagName(element)]; - if (native) return native; - if (kAriaLevelRoles.includes(getAriaRole(element) || "")) { - const attr = element.getAttribute("aria-level"); - const value = attr === null ? Number.NaN : Number(attr); - if (Number.isInteger(value) && value >= 1) return value; - } - return 0; -} - -const kAriaPressedRoles = ["button"]; -function getAriaPressed(element) { - if (kAriaPressedRoles.includes(getAriaRole(element) || "")) { - const pressed = element.getAttribute("aria-pressed"); - if (pressed === "true") return true; - if (pressed === "mixed") return "mixed"; - } - return false; -} - -const kAriaSelectedRoles = ["gridcell","option","row","tab","rowheader","columnheader","treeitem"]; -function getAriaSelected(element) { - if (elementSafeTagName(element) === "OPTION") return element.selected; - if (kAriaSelectedRoles.includes(getAriaRole(element) || "")) return getAriaBoolean(element.getAttribute("aria-selected")) === true; - return false; -} - -function receivesPointerEvents(element) { - const cache = cachePointerEvents; - let e = element; - let result; - const parents = []; - for (; e; e = parentElementOrShadowHost(e)) { - const cached = cache?.get(e); - if (cached !== undefined) { result = cached; break; } - parents.push(e); - const style = getElementComputedStyle(e); - if (!style) { result = true; break; } - const value = style.pointerEvents; - if (value) { result = value !== "none"; break; } - } - if (result === undefined) result = true; - for (const parent of parents) cache?.set(parent, result); - return result; -} - -function getCSSContent(element, pseudo) { - const style = getElementComputedStyle(element, pseudo); - if (!style) return undefined; - const contentValue = style.content; - if (!contentValue || contentValue === "none" || contentValue === "normal") return undefined; - if (style.display === "none" || style.visibility === "hidden") return undefined; - const match = contentValue.match(/^"(.*)"$/); - if (match) { - const content = match[1].replace(/\\\\"/g, '"'); - if (pseudo) { - const display = style.display || "inline"; - if (display !== "inline") return " " + content + " "; - } - return content; - } - return undefined; -} -`; -} - -function getAriaSnapshotCode(): string { - return ` -// === ariaSnapshot === -let lastRef = 0; - -function generateAriaTree(rootElement) { - const options = { visibility: "ariaOrVisible", refs: "interactable", refPrefix: "", includeGenericRole: true, renderActive: true, renderCursorPointer: true }; - const visited = new Set(); - const snapshot = { - root: { role: "fragment", name: "", children: [], element: rootElement, props: {}, box: computeBox(rootElement), receivesPointerEvents: true }, - elements: new Map(), - refs: new Map(), - iframeRefs: [] - }; - - const visit = (ariaNode, node, parentElementVisible) => { - if (visited.has(node)) return; - visited.add(node); - if (node.nodeType === Node.TEXT_NODE && node.nodeValue) { - if (!parentElementVisible) return; - const text = node.nodeValue; - if (ariaNode.role !== "textbox" && text) ariaNode.children.push(node.nodeValue || ""); - return; - } - if (node.nodeType !== Node.ELEMENT_NODE) return; - const element = node; - const isElementVisibleForAria = !isElementHiddenForAria(element); - let visible = isElementVisibleForAria; - if (options.visibility === "ariaOrVisible") visible = isElementVisibleForAria || isElementVisible(element); - if (options.visibility === "ariaAndVisible") visible = isElementVisibleForAria && isElementVisible(element); - if (options.visibility === "aria" && !visible) return; - const ariaChildren = []; - if (element.hasAttribute("aria-owns")) { - const ids = element.getAttribute("aria-owns").split(/\\s+/); - for (const id of ids) { - const ownedElement = rootElement.ownerDocument.getElementById(id); - if (ownedElement) ariaChildren.push(ownedElement); - } - } - const childAriaNode = visible ? toAriaNode(element, options) : null; - if (childAriaNode) { - if (childAriaNode.ref) { - snapshot.elements.set(childAriaNode.ref, element); - snapshot.refs.set(element, childAriaNode.ref); - if (childAriaNode.role === "iframe") snapshot.iframeRefs.push(childAriaNode.ref); - } - ariaNode.children.push(childAriaNode); - } - processElement(childAriaNode || ariaNode, element, ariaChildren, visible); - }; - - function processElement(ariaNode, element, ariaChildren, parentElementVisible) { - const display = getElementComputedStyle(element)?.display || "inline"; - const treatAsBlock = display !== "inline" || element.nodeName === "BR" ? " " : ""; - if (treatAsBlock) ariaNode.children.push(treatAsBlock); - ariaNode.children.push(getCSSContent(element, "::before") || ""); - const assignedNodes = element.nodeName === "SLOT" ? element.assignedNodes() : []; - if (assignedNodes.length) { - for (const child of assignedNodes) visit(ariaNode, child, parentElementVisible); - } else { - for (let child = element.firstChild; child; child = child.nextSibling) { - if (!child.assignedSlot) visit(ariaNode, child, parentElementVisible); - } - if (element.shadowRoot) { - for (let child = element.shadowRoot.firstChild; child; child = child.nextSibling) visit(ariaNode, child, parentElementVisible); - } - } - for (const child of ariaChildren) visit(ariaNode, child, parentElementVisible); - ariaNode.children.push(getCSSContent(element, "::after") || ""); - if (treatAsBlock) ariaNode.children.push(treatAsBlock); - if (ariaNode.children.length === 1 && ariaNode.name === ariaNode.children[0]) ariaNode.children = []; - if (ariaNode.role === "link" && element.hasAttribute("href")) ariaNode.props["url"] = element.getAttribute("href"); - if (ariaNode.role === "textbox" && element.hasAttribute("placeholder") && element.getAttribute("placeholder") !== ariaNode.name) ariaNode.props["placeholder"] = element.getAttribute("placeholder"); - } - - beginAriaCaches(); - try { visit(snapshot.root, rootElement, true); } - finally { endAriaCaches(); } - normalizeStringChildren(snapshot.root); - normalizeGenericRoles(snapshot.root); - return snapshot; -} - -function computeAriaRef(ariaNode, options) { - if (options.refs === "none") return; - if (options.refs === "interactable" && (!ariaNode.box.visible || !ariaNode.receivesPointerEvents)) return; - let ariaRef = ariaNode.element._ariaRef; - if (!ariaRef || ariaRef.role !== ariaNode.role || ariaRef.name !== ariaNode.name) { - ariaRef = { role: ariaNode.role, name: ariaNode.name, ref: (options.refPrefix || "") + "e" + (++lastRef) }; - ariaNode.element._ariaRef = ariaRef; - } - ariaNode.ref = ariaRef.ref; -} - -function toAriaNode(element, options) { - const active = element.ownerDocument.activeElement === element; - if (element.nodeName === "IFRAME") { - const ariaNode = { role: "iframe", name: "", children: [], props: {}, element, box: computeBox(element), receivesPointerEvents: true, active }; - computeAriaRef(ariaNode, options); - return ariaNode; - } - const defaultRole = options.includeGenericRole ? "generic" : null; - const role = getAriaRole(element) || defaultRole; - if (!role || role === "presentation" || role === "none") return null; - const name = normalizeWhiteSpace(getElementAccessibleName(element, false) || ""); - const receivesPointerEventsValue = receivesPointerEvents(element); - const box = computeBox(element); - if (role === "generic" && box.inline && element.childNodes.length === 1 && element.childNodes[0].nodeType === Node.TEXT_NODE) return null; - const result = { role, name, children: [], props: {}, element, box, receivesPointerEvents: receivesPointerEventsValue, active }; - computeAriaRef(result, options); - if (kAriaCheckedRoles.includes(role)) result.checked = getAriaChecked(element); - if (kAriaDisabledRoles.includes(role)) result.disabled = getAriaDisabled(element); - if (kAriaExpandedRoles.includes(role)) result.expanded = getAriaExpanded(element); - if (kAriaLevelRoles.includes(role)) result.level = getAriaLevel(element); - if (kAriaPressedRoles.includes(role)) result.pressed = getAriaPressed(element); - if (kAriaSelectedRoles.includes(role)) result.selected = getAriaSelected(element); - if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) { - if (element.type !== "checkbox" && element.type !== "radio" && element.type !== "file") result.children = [element.value]; - } - return result; -} - -function normalizeGenericRoles(node) { - const normalizeChildren = (node) => { - const result = []; - for (const child of node.children || []) { - if (typeof child === "string") { result.push(child); continue; } - const normalized = normalizeChildren(child); - result.push(...normalized); - } - const removeSelf = node.role === "generic" && !node.name && result.length <= 1 && result.every(c => typeof c !== "string" && !!c.ref); - if (removeSelf) return result; - node.children = result; - return [node]; - }; - normalizeChildren(node); -} - -function normalizeStringChildren(rootA11yNode) { - const flushChildren = (buffer, normalizedChildren) => { - if (!buffer.length) return; - const text = normalizeWhiteSpace(buffer.join("")); - if (text) normalizedChildren.push(text); - buffer.length = 0; - }; - const visit = (ariaNode) => { - const normalizedChildren = []; - const buffer = []; - for (const child of ariaNode.children || []) { - if (typeof child === "string") { buffer.push(child); } - else { flushChildren(buffer, normalizedChildren); visit(child); normalizedChildren.push(child); } - } - flushChildren(buffer, normalizedChildren); - ariaNode.children = normalizedChildren.length ? normalizedChildren : []; - if (ariaNode.children.length === 1 && ariaNode.children[0] === ariaNode.name) ariaNode.children = []; - }; - visit(rootA11yNode); -} - -function hasPointerCursor(ariaNode) { return ariaNode.box.cursor === "pointer"; } - -function renderAriaTree(ariaSnapshot) { - const options = { visibility: "ariaOrVisible", refs: "interactable", refPrefix: "", includeGenericRole: true, renderActive: true, renderCursorPointer: true }; - const lines = []; - let nodesToRender = ariaSnapshot.root.role === "fragment" ? ariaSnapshot.root.children : [ariaSnapshot.root]; - - const visitText = (text, indent) => { - const escaped = yamlEscapeValueIfNeeded(text); - if (escaped) lines.push(indent + "- text: " + escaped); - }; - - const createKey = (ariaNode, renderCursorPointer) => { - let key = ariaNode.role; - if (ariaNode.name && ariaNode.name.length <= 900) { - const name = ariaNode.name; - if (name) { - const stringifiedName = name.startsWith("/") && name.endsWith("/") ? name : JSON.stringify(name); - key += " " + stringifiedName; - } - } - if (ariaNode.checked === "mixed") key += " [checked=mixed]"; - if (ariaNode.checked === true) key += " [checked]"; - if (ariaNode.disabled) key += " [disabled]"; - if (ariaNode.expanded) key += " [expanded]"; - if (ariaNode.active && options.renderActive) key += " [active]"; - if (ariaNode.level) key += " [level=" + ariaNode.level + "]"; - if (ariaNode.pressed === "mixed") key += " [pressed=mixed]"; - if (ariaNode.pressed === true) key += " [pressed]"; - if (ariaNode.selected === true) key += " [selected]"; - if (ariaNode.ref) { - key += " [ref=" + ariaNode.ref + "]"; - if (renderCursorPointer && hasPointerCursor(ariaNode)) key += " [cursor=pointer]"; - } - return key; - }; - - const getSingleInlinedTextChild = (ariaNode) => { - return ariaNode?.children.length === 1 && typeof ariaNode.children[0] === "string" && !Object.keys(ariaNode.props).length ? ariaNode.children[0] : undefined; - }; - - const visit = (ariaNode, indent, renderCursorPointer) => { - const escapedKey = indent + "- " + yamlEscapeKeyIfNeeded(createKey(ariaNode, renderCursorPointer)); - const singleInlinedTextChild = getSingleInlinedTextChild(ariaNode); - if (!ariaNode.children.length && !Object.keys(ariaNode.props).length) { - lines.push(escapedKey); - } else if (singleInlinedTextChild !== undefined) { - lines.push(escapedKey + ": " + yamlEscapeValueIfNeeded(singleInlinedTextChild)); - } else { - lines.push(escapedKey + ":"); - for (const [name, value] of Object.entries(ariaNode.props)) lines.push(indent + " - /" + name + ": " + yamlEscapeValueIfNeeded(value)); - const childIndent = indent + " "; - const inCursorPointer = !!ariaNode.ref && renderCursorPointer && hasPointerCursor(ariaNode); - for (const child of ariaNode.children) { - if (typeof child === "string") visitText(child, childIndent); - else visit(child, childIndent, renderCursorPointer && !inCursorPointer); - } - } - }; - - for (const nodeToRender of nodesToRender) { - if (typeof nodeToRender === "string") visitText(nodeToRender, ""); - else visit(nodeToRender, "", !!options.renderCursorPointer); - } - return lines.join("\\n"); -} - -function getAISnapshot() { - const snapshot = generateAriaTree(document.body); - const refsObject = {}; - for (const [ref, element] of snapshot.elements) refsObject[ref] = element; - window.__devBrowserRefs = refsObject; - return renderAriaTree(snapshot); -} - -function selectSnapshotRef(ref) { - const refs = window.__devBrowserRefs; - if (!refs) throw new Error("No snapshot refs found. Call getAISnapshot first."); - const element = refs[ref]; - if (!element) throw new Error('Ref "' + ref + '" not found. Available refs: ' + Object.keys(refs).join(", ")); - return element; -} -`; -} - -/** - * Clear the cached script (useful for development/testing) - */ -export function clearSnapshotScriptCache(): void { - cachedScript = null; -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/index.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/index.ts deleted file mode 100644 index d713f6b5d..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * ARIA Snapshot module for dev-browser. - * - * Provides Playwright-compatible ARIA snapshots with cross-connection ref persistence. - * Refs are stored on window.__devBrowserRefs and survive across Playwright reconnections. - * - * Usage: - * import { getSnapshotScript } from './snapshot'; - * const script = getSnapshotScript(); - * await page.evaluate(script); - * // Now window.__devBrowser_getAISnapshot() and window.__devBrowser_selectSnapshotRef(ref) are available - */ - -export { getSnapshotScript, clearSnapshotScriptCache } from "./browser-script"; diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/inject.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/inject.ts deleted file mode 100644 index 2392221ba..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/snapshot/inject.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Injectable snapshot script for browser context. - * - * This module provides the getSnapshotScript function that returns a - * self-contained JavaScript string for injection into browser contexts. - * - * The script is injected via page.evaluate() and exposes: - * - window.__devBrowser_getAISnapshot(): Returns ARIA snapshot YAML - * - window.__devBrowser_selectSnapshotRef(ref): Returns element for given ref - * - window.__devBrowserRefs: Map of ref -> Element (persists across connections) - */ - -export { getSnapshotScript, clearSnapshotScriptCache } from "./browser-script"; diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/types.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/src/types.ts deleted file mode 100644 index fdf650800..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/src/types.ts +++ /dev/null @@ -1,36 +0,0 @@ -// API request/response types - shared between client and server - -export interface ServeOptions { - port?: number; - headless?: boolean; - cdpPort?: number; - /** Directory to store persistent browser profiles (cookies, localStorage, etc.) */ - profileDir?: string; - /** Try to use system Chrome first before falling back to Playwright Chromium */ - useSystemChrome?: boolean; -} - -export interface ViewportSize { - width: number; - height: number; -} - -export interface GetPageRequest { - name: string; - /** Optional viewport size for new pages */ - viewport?: ViewportSize; -} - -export interface GetPageResponse { - wsEndpoint: string; - name: string; - targetId: string; // CDP target ID for reliable page matching -} - -export interface ListPagesResponse { - pages: string[]; -} - -export interface ServerInfoResponse { - wsEndpoint: string; -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json b/openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json deleted file mode 100644 index 3bce709ed..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "compilerOptions": { - "lib": [ - "ESNext" - ], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - "baseUrl": ".", - "paths": { - "@/*": [ - "./src/*" - ] - }, - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false - }, - "include": [ - "src/**/*", - "scripts/**/*" - ] -} diff --git a/openwork-memos-integration/apps/desktop/skills/dev-browser/vitest.config.ts b/openwork-memos-integration/apps/desktop/skills/dev-browser/vitest.config.ts deleted file mode 100644 index e2f469e37..000000000 --- a/openwork-memos-integration/apps/desktop/skills/dev-browser/vitest.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - globals: true, - environment: "node", - include: ["src/**/*.test.ts"], - testTimeout: 60000, // Playwright tests can be slow - hookTimeout: 60000, - teardownTimeout: 60000, - }, -}); diff --git a/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json b/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json deleted file mode 100644 index de75c468d..000000000 --- a/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json +++ /dev/null @@ -1,1650 +0,0 @@ -{ - "name": "file-permission", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "file-permission", - "version": "0.0.1", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", - "license": "MIT", - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", - "license": "MIT", - "dependencies": { - "@hono/node-server": "^1.19.7", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "peer": true, - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "license": "BSD-2-Clause" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/zod": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.25 || ^4" - } - } - } -} diff --git a/openwork-memos-integration/apps/desktop/skills/file-permission/package.json b/openwork-memos-integration/apps/desktop/skills/file-permission/package.json deleted file mode 100644 index e6c0bc754..000000000 --- a/openwork-memos-integration/apps/desktop/skills/file-permission/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "file-permission", - "version": "0.0.1", - "type": "module", - "imports": { - "@/*": "./src/*" - }, - "scripts": { - "start": "npx tsx src/index.ts", - "dev": "npx tsx --watch src/index.ts" - }, - "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - } -} diff --git a/openwork-memos-integration/apps/desktop/skills/file-permission/src/index.ts b/openwork-memos-integration/apps/desktop/skills/file-permission/src/index.ts deleted file mode 100644 index e7bfe914f..000000000 --- a/openwork-memos-integration/apps/desktop/skills/file-permission/src/index.ts +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env node -/** - * File Permission MCP Server - * - * Exposes a `request_file_permission` tool that the agent calls before - * performing file operations. The tool communicates with the Electron - * main process via HTTP to show a permission modal and wait for user response. - */ - -import { Server } from '@modelcontextprotocol/sdk/server/index.js'; -import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; -import { - CallToolRequestSchema, - ListToolsRequestSchema, - type CallToolResult, -} from '@modelcontextprotocol/sdk/types.js'; - -const PERMISSION_API_PORT = process.env.PERMISSION_API_PORT || '9226'; -const PERMISSION_API_URL = `http://localhost:${PERMISSION_API_PORT}/permission`; - -interface FilePermissionInput { - operation: 'create' | 'delete' | 'rename' | 'move' | 'modify' | 'overwrite'; - filePath?: string; - filePaths?: string[]; - targetPath?: string; - contentPreview?: string; -} - -const server = new Server( - { name: 'file-permission', version: '1.0.0' }, - { capabilities: { tools: {} } } -); - -// List available tools -server.setRequestHandler(ListToolsRequestSchema, async () => ({ - tools: [ - { - name: 'request_file_permission', - description: - 'Request user permission before performing file operations (create, delete, rename, move, modify, overwrite). Always call this tool BEFORE executing any file modification. Returns "allowed" or "denied".', - inputSchema: { - type: 'object', - properties: { - operation: { - type: 'string', - enum: ['create', 'delete', 'rename', 'move', 'modify', 'overwrite'], - description: 'The type of file operation to perform', - }, - filePath: { - type: 'string', - description: 'Absolute path to the file being operated on', - }, - filePaths: { - type: 'array', - items: { type: 'string' }, - description: 'Array of absolute paths for batch operations (e.g., deleting multiple files)', - }, - targetPath: { - type: 'string', - description: 'Target path for rename/move operations', - }, - contentPreview: { - type: 'string', - description: 'Preview of file content for create/modify operations (first ~500 chars)', - }, - }, - required: ['operation'], - }, - }, - ], -})); - -// Handle tool calls -server.setRequestHandler(CallToolRequestSchema, async (request): Promise => { - if (request.params.name !== 'request_file_permission') { - return { - content: [{ type: 'text', text: `Error: Unknown tool: ${request.params.name}` }], - isError: true, - }; - } - - const args = request.params.arguments as FilePermissionInput; - const { operation, filePath, filePaths, targetPath, contentPreview } = args; - - // Validate required fields - if (!operation || (!filePath && (!filePaths || filePaths.length === 0))) { - return { - content: [{ type: 'text', text: 'Error: operation and either filePath or filePaths are required' }], - isError: true, - }; - } - - try { - // Call Electron main process HTTP endpoint - const response = await fetch(PERMISSION_API_URL, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - operation, - filePath, - filePaths, - targetPath, - contentPreview: contentPreview?.substring(0, 500), // Truncate preview - }), - }); - - if (!response.ok) { - const errorText = await response.text(); - return { - content: [{ type: 'text', text: `Error: Permission API returned ${response.status}: ${errorText}` }], - isError: true, - }; - } - - const result = (await response.json()) as { allowed: boolean }; - return { - content: [{ type: 'text', text: result.allowed ? 'allowed' : 'denied' }], - }; - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - return { - content: [{ type: 'text', text: `Error: Failed to request permission: ${errorMessage}` }], - isError: true, - }; - } -}); - -// Start the MCP server -async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error('File Permission MCP Server started'); -} - -main().catch((error) => { - console.error('Failed to start server:', error); - process.exit(1); -}); diff --git a/openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json b/openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json deleted file mode 100644 index 341042abe..000000000 --- a/openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "paths": { - "@/*": [ - "./src/*" - ] - } - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "node_modules", - "dist" - ] -} diff --git a/openwork-memos-integration/apps/desktop/skills/safe-file-deletion/SKILL.md b/openwork-memos-integration/apps/desktop/skills/safe-file-deletion/SKILL.md deleted file mode 100644 index 37cca78bb..000000000 --- a/openwork-memos-integration/apps/desktop/skills/safe-file-deletion/SKILL.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: safe-file-deletion -description: Enforces explicit user permission before any file deletion. Activates when you're about to use rm, unlink, fs.rm, or any operation that removes files from disk. MUST be followed for all delete operations. ---- - -# Safe File Deletion - -## Rule - -Before deleting ANY file, you MUST: - -1. Call `request_file_permission` with `operation: "delete"` -2. For multiple files, use `filePaths` array (not multiple calls) -3. Wait for response -4. Only proceed if "allowed" -5. If "denied", acknowledge and do NOT delete - -## Applies To - -- `rm` commands (single or multiple files) -- `rm -rf` (directories) -- `unlink`, `fs.rm`, `fs.rmdir` -- Any script or tool that deletes files - -## Examples - -Single file: -```json -{ - "operation": "delete", - "filePath": "/path/to/file.txt" -} -``` - -Multiple files (batched into one prompt): -```json -{ - "operation": "delete", - "filePaths": ["/path/to/file1.txt", "/path/to/file2.txt"] -} -``` - -## No Workarounds - -Never bypass deletion warnings by: -- Emptying files instead of deleting -- Moving to hidden/temp locations -- Using obscure commands - -The user will see a prominent warning. Wait for explicit approval. diff --git a/openwork-memos-integration/apps/desktop/src/main/config.ts b/openwork-memos-integration/apps/desktop/src/main/config.ts deleted file mode 100644 index 3674638a7..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { z } from 'zod'; - -const PRODUCTION_API_URL = 'https://lite.accomplish.ai'; - -const desktopConfigSchema = z.object({ - apiUrl: z - .string() - .url() - .default(PRODUCTION_API_URL), -}); - -type DesktopConfig = z.infer; - -let cachedConfig: DesktopConfig | null = null; - -export function getDesktopConfig(): DesktopConfig { - if (cachedConfig) return cachedConfig; - - const parsed = desktopConfigSchema.safeParse({ - apiUrl: process.env.ACCOMPLISH_API_URL, - }); - - if (!parsed.success) { - const message = parsed.error.issues.map((issue: z.ZodIssue) => issue.message).join('; '); - throw new Error(`Invalid desktop configuration: ${message}`); - } - - cachedConfig = parsed.data; - return cachedConfig; -} diff --git a/openwork-memos-integration/apps/desktop/src/main/index.ts b/openwork-memos-integration/apps/desktop/src/main/index.ts deleted file mode 100644 index d1c7010df..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/index.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { config } from 'dotenv'; -import { app, BrowserWindow, shell, ipcMain, nativeImage } from 'electron'; -import path from 'path'; -import fs from 'fs'; -import { fileURLToPath } from 'url'; -import { registerIPCHandlers } from './ipc/handlers'; -import { flushPendingTasks } from './store/taskHistory'; -import { disposeTaskManager } from './opencode/task-manager'; -import { checkAndCleanupFreshInstall } from './store/freshInstallCleanup'; - -// Local UI - no longer uses remote URL - -// Early E2E flag detection - check command-line args before anything else -// This must run synchronously at module load time -if (process.argv.includes('--e2e-skip-auth')) { - (global as Record).E2E_SKIP_AUTH = true; -} -if (process.argv.includes('--e2e-mock-tasks') || process.env.E2E_MOCK_TASK_EVENTS === '1') { - (global as Record).E2E_MOCK_TASK_EVENTS = true; -} - -// Clean mode - wipe all stored data for a fresh start -// Use CLEAN_START env var since CLI args don't pass through vite to Electron -if (process.env.CLEAN_START === '1') { - const userDataPath = app.getPath('userData'); - console.log('[Clean Mode] Clearing userData directory:', userDataPath); - try { - if (fs.existsSync(userDataPath)) { - fs.rmSync(userDataPath, { recursive: true, force: true }); - console.log('[Clean Mode] Successfully cleared userData'); - } - } catch (err) { - console.error('[Clean Mode] Failed to clear userData:', err); - } - // Note: Secure storage (API keys, auth tokens) is stored in electron-store - // which lives in userData, so it gets cleared with the directory above -} - -// Set app name before anything else (affects deep link dialogs) -app.name = 'Openwork'; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - -// Load .env file from app root -const envPath = app.isPackaged - ? path.join(process.resourcesPath, '.env') - : path.join(__dirname, '../../.env'); -config({ path: envPath }); - -// The built directory structure -// -// ├─┬ dist-electron -// │ ├─┬ main -// │ │ └── index.js > Electron-Main -// │ └─┬ preload -// │ └── index.js > Preload-Scripts -// ├─┬ dist -// │ └── index.html > Electron-Renderer - -process.env.APP_ROOT = path.join(__dirname, '../..'); - -export const MAIN_DIST = path.join(process.env.APP_ROOT, 'dist-electron'); -export const RENDERER_DIST = path.join(process.env.APP_ROOT, 'dist'); -export const VITE_DEV_SERVER_URL = process.env.VITE_DEV_SERVER_URL; - -let mainWindow: BrowserWindow | null = null; - -// Get the preload script path -function getPreloadPath(): string { - return path.join(__dirname, '../preload/index.cjs'); -} - -function createWindow() { - console.log('[Main] Creating main application window'); - - // Get app icon - const iconPath = app.isPackaged - ? path.join(process.resourcesPath, 'icon.png') - : path.join(process.env.APP_ROOT!, 'resources', 'icon.png'); - const icon = nativeImage.createFromPath(iconPath); - - const preloadPath = getPreloadPath(); - console.log('[Main] Using preload script:', preloadPath); - - mainWindow = new BrowserWindow({ - width: 1280, - height: 800, - minWidth: 900, - minHeight: 600, - title: 'Openwork', - icon: icon.isEmpty() ? undefined : icon, - titleBarStyle: process.platform === 'darwin' ? 'hiddenInset' : 'default', - trafficLightPosition: { x: 16, y: 16 }, - webPreferences: { - preload: preloadPath, - nodeIntegration: false, - contextIsolation: true, - }, - }); - - // Open external links in browser - mainWindow.webContents.setWindowOpenHandler(({ url }) => { - if (url.startsWith('https:') || url.startsWith('http:')) { - shell.openExternal(url); - } - return { action: 'deny' }; - }); - - // Maximize window by default - mainWindow.maximize(); - - // Open DevTools in dev mode (non-packaged), but not during E2E tests - const isE2EMode = (global as Record).E2E_SKIP_AUTH === true; - if (!app.isPackaged && !isE2EMode) { - mainWindow.webContents.openDevTools({ mode: 'right' }); - } - - // Load the local UI - if (VITE_DEV_SERVER_URL) { - console.log('[Main] Loading from Vite dev server:', VITE_DEV_SERVER_URL); - mainWindow.loadURL(VITE_DEV_SERVER_URL); - } else { - const indexPath = path.join(RENDERER_DIST, 'index.html'); - console.log('[Main] Loading from file:', indexPath); - mainWindow.loadFile(indexPath); - } -} - -// Single instance lock -const gotTheLock = app.requestSingleInstanceLock(); - -if (!gotTheLock) { - console.log('[Main] Second instance attempted; quitting'); - app.quit(); -} else { - app.on('second-instance', () => { - if (mainWindow) { - if (mainWindow.isMinimized()) mainWindow.restore(); - mainWindow.focus(); - console.log('[Main] Focused existing instance after second-instance event'); - } - }); - - app.whenReady().then(async () => { - console.log('[Main] Electron app ready, version:', app.getVersion()); - - // Check for fresh install and cleanup old data BEFORE initializing stores - // This ensures users get a clean slate after reinstalling from DMG - try { - const didCleanup = await checkAndCleanupFreshInstall(); - if (didCleanup) { - console.log('[Main] Cleaned up data from previous installation'); - } - } catch (err) { - console.error('[Main] Fresh install cleanup failed:', err); - } - - // Set dock icon on macOS - if (process.platform === 'darwin' && app.dock) { - const iconPath = app.isPackaged - ? path.join(process.resourcesPath, 'icon.png') - : path.join(process.env.APP_ROOT!, 'resources', 'icon.png'); - const icon = nativeImage.createFromPath(iconPath); - if (!icon.isEmpty()) { - app.dock.setIcon(icon); - } - } - - // Register IPC handlers before creating window - registerIPCHandlers(); - console.log('[Main] IPC handlers registered'); - - createWindow(); - - app.on('activate', () => { - if (BrowserWindow.getAllWindows().length === 0) { - createWindow(); - console.log('[Main] Application reactivated; recreated window'); - } - }); - }); -} - -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - console.log('[Main] All windows closed; quitting app'); - app.quit(); - } -}); - -// Flush pending task history writes and dispose TaskManager before quitting -app.on('before-quit', () => { - console.log('[Main] App before-quit event fired'); - flushPendingTasks(); - // Dispose all active tasks and cleanup PTY processes - disposeTaskManager(); -}); - -// Handle custom protocol (accomplish://) -app.setAsDefaultProtocolClient('accomplish'); - -app.on('open-url', (event, url) => { - event.preventDefault(); - console.log('[Main] Received protocol URL:', url); - // Handle protocol URL - if (url.startsWith('accomplish://callback')) { - mainWindow?.webContents?.send('auth:callback', url); - } -}); - -// IPC Handlers -ipcMain.handle('app:version', () => { - return app.getVersion(); -}); - -ipcMain.handle('app:platform', () => { - return process.platform; -}); - -ipcMain.handle('app:is-e2e-mode', () => { - return (global as Record).E2E_MOCK_TASK_EVENTS === true || - process.env.E2E_MOCK_TASK_EVENTS === '1'; -}); diff --git a/openwork-memos-integration/apps/desktop/src/main/ipc/handlers.ts b/openwork-memos-integration/apps/desktop/src/main/ipc/handlers.ts deleted file mode 100644 index 0c694b41c..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/ipc/handlers.ts +++ /dev/null @@ -1,1721 +0,0 @@ -import { ipcMain, BrowserWindow, shell, app } from 'electron'; -import type { IpcMainInvokeEvent } from 'electron'; -import { URL } from 'url'; -import { - isOpenCodeCliInstalled, - getOpenCodeCliVersion, -} from '../opencode/adapter'; -import { - getTaskManager, - disposeTaskManager, - type TaskCallbacks, -} from '../opencode/task-manager'; -import { - getTasks, - getTask, - saveTask, - updateTaskStatus, - updateTaskSessionId, - updateTaskSummary, - addTaskMessage, - deleteTask, - clearHistory, -} from '../store/taskHistory'; -import { generateTaskSummary } from '../services/summarizer'; -import { getMemoryContextForPrompt, rememberTask } from '../services/memory'; -import { - storeApiKey, - getApiKey, - deleteApiKey, - getAllApiKeys, - hasAnyApiKey, - listStoredCredentials, -} from '../store/secureStorage'; -import { - getDebugMode, - setDebugMode, - getAppSettings, - getOnboardingComplete, - setOnboardingComplete, - getSelectedModel, - setSelectedModel, - getOllamaConfig, - setOllamaConfig, - getLiteLLMConfig, - setLiteLLMConfig, -} from '../store/appSettings'; -import { getDesktopConfig } from '../config'; -import { - startPermissionApiServer, - startQuestionApiServer, - initPermissionApi, - resolvePermission, - resolveQuestion, - isFilePermissionRequest, - isQuestionRequest, -} from '../permission-api'; -import type { - TaskConfig, - PermissionResponse, - OpenCodeMessage, - TaskMessage, - TaskResult, - TaskStatus, - SelectedModel, - OllamaConfig, - LiteLLMConfig, -} from '@accomplish/shared'; -import { DEFAULT_PROVIDERS } from '@accomplish/shared'; -import { - normalizeIpcError, - permissionResponseSchema, - resumeSessionSchema, - taskConfigSchema, - validate, -} from './validation'; -import { BedrockClient, ListFoundationModelsCommand } from '@aws-sdk/client-bedrock'; -import { fromIni } from '@aws-sdk/credential-providers'; -import { - isMockTaskEventsEnabled, - createMockTask, - executeMockTaskFlow, - detectScenarioFromPrompt, -} from '../test-utils/mock-task-flow'; - -const MAX_TEXT_LENGTH = 8000; -const ALLOWED_API_KEY_PROVIDERS = new Set(['anthropic', 'openai', 'openrouter', 'google', 'xai', 'deepseek', 'zai', 'custom', 'bedrock', 'litellm']); -const API_KEY_VALIDATION_TIMEOUT_MS = 15000; - -interface OllamaModel { - id: string; - displayName: string; - size: number; -} - -/** - * Fetch with timeout using AbortController - */ -async function fetchWithTimeout( - url: string, - options: RequestInit, - timeoutMs: number -): Promise { - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), timeoutMs); - - try { - const response = await fetch(url, { ...options, signal: controller.signal }); - return response; - } finally { - clearTimeout(timeoutId); - } -} - -// Message batching configuration -const MESSAGE_BATCH_DELAY_MS = 50; - -// Per-task message batching state -interface MessageBatcher { - pendingMessages: TaskMessage[]; - timeout: NodeJS.Timeout | null; - taskId: string; - flush: () => void; -} - -const messageBatchers = new Map(); - -function createMessageBatcher( - taskId: string, - forwardToRenderer: (channel: string, data: unknown) => void, - addTaskMessage: (taskId: string, message: TaskMessage) => void -): MessageBatcher { - const batcher: MessageBatcher = { - pendingMessages: [], - timeout: null, - taskId, - flush: () => { - if (batcher.pendingMessages.length === 0) return; - - // Send all pending messages in one IPC call - forwardToRenderer('task:update:batch', { - taskId, - messages: batcher.pendingMessages, - }); - - // Also persist each message to history - for (const msg of batcher.pendingMessages) { - addTaskMessage(taskId, msg); - } - - batcher.pendingMessages = []; - if (batcher.timeout) { - clearTimeout(batcher.timeout); - batcher.timeout = null; - } - }, - }; - - messageBatchers.set(taskId, batcher); - return batcher; -} - -function queueMessage( - taskId: string, - message: TaskMessage, - forwardToRenderer: (channel: string, data: unknown) => void, - addTaskMessage: (taskId: string, message: TaskMessage) => void -): void { - let batcher = messageBatchers.get(taskId); - if (!batcher) { - batcher = createMessageBatcher(taskId, forwardToRenderer, addTaskMessage); - } - - batcher.pendingMessages.push(message); - - // Set up or reset the batch timer - if (batcher.timeout) { - clearTimeout(batcher.timeout); - } - - batcher.timeout = setTimeout(() => { - batcher.flush(); - }, MESSAGE_BATCH_DELAY_MS); -} - -function flushAndCleanupBatcher(taskId: string): void { - const batcher = messageBatchers.get(taskId); - if (batcher) { - batcher.flush(); - messageBatchers.delete(taskId); - } -} - -function assertTrustedWindow(window: BrowserWindow | null): BrowserWindow { - if (!window || window.isDestroyed()) { - throw new Error('Untrusted window'); - } - - const focused = BrowserWindow.getFocusedWindow(); - if (BrowserWindow.getAllWindows().length > 1 && focused && focused.id !== window.id) { - throw new Error('IPC request must originate from the focused window'); - } - - return window; -} - -function sanitizeString(input: unknown, field: string, maxLength = MAX_TEXT_LENGTH): string { - if (typeof input !== 'string') { - throw new Error(`${field} must be a string`); - } - const trimmed = input.trim(); - if (!trimmed) { - throw new Error(`${field} is required`); - } - if (trimmed.length > maxLength) { - throw new Error(`${field} exceeds maximum length`); - } - return trimmed; -} - -function applyMemoryContext(config: TaskConfig, memoryContext: string | null): TaskConfig { - if (!memoryContext) return config; - - const combined = [config.systemPromptAppend, memoryContext] - .filter(Boolean) - .join('\n\n'); - - const trimmed = combined.length > MAX_TEXT_LENGTH - ? combined.slice(0, Math.max(0, MAX_TEXT_LENGTH - 3)) + '...' - : combined; - - if (trimmed.length !== combined.length) { - console.warn('[Memory] systemPromptAppend truncated to MAX_TEXT_LENGTH'); - } - - return { ...config, systemPromptAppend: trimmed }; -} - -function validateTaskConfig(config: TaskConfig): TaskConfig { - const prompt = sanitizeString(config.prompt, 'prompt'); - const validated: TaskConfig = { prompt }; - - if (config.taskId) { - validated.taskId = sanitizeString(config.taskId, 'taskId', 128); - } - if (config.sessionId) { - validated.sessionId = sanitizeString(config.sessionId, 'sessionId', 128); - } - if (config.workingDirectory) { - validated.workingDirectory = sanitizeString(config.workingDirectory, 'workingDirectory', 1024); - } - if (Array.isArray(config.allowedTools)) { - validated.allowedTools = config.allowedTools - .filter((tool): tool is string => typeof tool === 'string') - .map((tool) => sanitizeString(tool, 'allowedTools', 64)) - .slice(0, 20); - } - if (config.systemPromptAppend) { - validated.systemPromptAppend = sanitizeString( - config.systemPromptAppend, - 'systemPromptAppend', - MAX_TEXT_LENGTH - ); - } - if (config.outputSchema && typeof config.outputSchema === 'object') { - validated.outputSchema = config.outputSchema; - } - - return validated; -} - -/** - * Check if E2E auth bypass is enabled via global flag, command-line argument, or environment variable - * Global flag is set by Playwright's app.evaluate() and is most reliable across platforms - */ -function isE2ESkipAuthEnabled(): boolean { - return ( - (global as Record).E2E_SKIP_AUTH === true || - process.argv.includes('--e2e-skip-auth') || - process.env.E2E_SKIP_AUTH === '1' - ); -} - -function handle( - channel: string, - handler: (event: IpcMainInvokeEvent, ...args: Args) => ReturnType -): void { - ipcMain.handle(channel, async (event, ...args) => { - try { - return await handler(event, ...(args as Args)); - } catch (error) { - console.error(`IPC handler ${channel} failed`, error); - throw normalizeIpcError(error); - } - }); -} - -/** - * Register all IPC handlers - */ -export function registerIPCHandlers(): void { - const taskManager = getTaskManager(); - - // Start the permission API server for file-permission MCP - // Initialize when we have a window (deferred until first task:start) - let permissionApiInitialized = false; - - // Task: Start a new task - handle('task:start', async (event: IpcMainInvokeEvent, config: TaskConfig) => { - const window = assertTrustedWindow(BrowserWindow.fromWebContents(event.sender)); - const sender = event.sender; - const validatedConfig = validateTaskConfig(config); - - // Initialize permission API server (once, when we have a window) - if (!permissionApiInitialized) { - initPermissionApi(window, () => taskManager.getActiveTaskId()); - startPermissionApiServer(); - startQuestionApiServer(); - permissionApiInitialized = true; - } - - const taskId = createTaskId(); - const memoryContext = await getMemoryContextForPrompt(validatedConfig.prompt, taskId); - const configWithMemory = applyMemoryContext(validatedConfig, memoryContext); - - // E2E Mock Mode: Return mock task and emit simulated events - if (isMockTaskEventsEnabled()) { - const mockTask = createMockTask(taskId, validatedConfig.prompt); - const scenario = detectScenarioFromPrompt(validatedConfig.prompt); - - // Save task to history so Execution page can load it - saveTask(mockTask); - - // Execute mock flow asynchronously (sends IPC events) - void executeMockTaskFlow(window, { - taskId, - prompt: validatedConfig.prompt, - scenario, - delayMs: 50, - }); - - return mockTask; - } - - // Setup event forwarding to renderer - const forwardToRenderer = (channel: string, data: unknown) => { - if (!window.isDestroyed() && !sender.isDestroyed()) { - sender.send(channel, data); - } - }; - - // Create task-scoped callbacks for the TaskManager - const callbacks: TaskCallbacks = { - onMessage: (message: OpenCodeMessage) => { - const taskMessage = toTaskMessage(message); - if (!taskMessage) return; - - // Queue message for batching instead of immediate send - queueMessage(taskId, taskMessage, forwardToRenderer, addTaskMessage); - }, - - onProgress: (progress: { stage: string; message?: string }) => { - forwardToRenderer('task:progress', { - taskId, - ...progress, - }); - }, - - onPermissionRequest: (request: unknown) => { - // Flush pending messages before showing permission request - flushAndCleanupBatcher(taskId); - forwardToRenderer('permission:request', request); - }, - - onComplete: (result: TaskResult) => { - // Flush any pending messages before completing - flushAndCleanupBatcher(taskId); - - forwardToRenderer('task:update', { - taskId, - type: 'complete', - result, - }); - - // Map result status to task status - let taskStatus: TaskStatus; - if (result.status === 'success') { - taskStatus = 'completed'; - } else if (result.status === 'interrupted') { - taskStatus = 'interrupted'; - } else { - taskStatus = 'failed'; - } - - // Update task status in history - updateTaskStatus(taskId, taskStatus, new Date().toISOString()); - - // Update session ID if available (important for interrupted tasks to allow continuation) - const sessionId = result.sessionId || taskManager.getSessionId(taskId); - if (sessionId) { - updateTaskSessionId(taskId, sessionId); - } - - if (result.status !== 'error') { - const storedTask = getTask(taskId); - if (storedTask) { - void rememberTask(storedTask); - } - } - }, - - onError: (error: Error) => { - // Flush any pending messages before error - flushAndCleanupBatcher(taskId); - - forwardToRenderer('task:update', { - taskId, - type: 'error', - error: error.message, - }); - - // Update task status in history - updateTaskStatus(taskId, 'failed', new Date().toISOString()); - }, - - onDebug: (log: { type: string; message: string; data?: unknown }) => { - if (getDebugMode()) { - forwardToRenderer('debug:log', { - taskId, - timestamp: new Date().toISOString(), - ...log, - }); - } - }, - - onStatusChange: (status: TaskStatus) => { - // Notify renderer of status change (e.g., queued -> running) - forwardToRenderer('task:status-change', { - taskId, - status, - }); - // Update task status in history - updateTaskStatus(taskId, status, new Date().toISOString()); - }, - }; - - // Start the task via TaskManager (creates isolated adapter or queues if busy) - const task = await taskManager.startTask(taskId, configWithMemory, callbacks); - - // Add initial user message with the prompt to the chat - const initialUserMessage: TaskMessage = { - id: createMessageId(), - type: 'user', - content: validatedConfig.prompt, - timestamp: new Date().toISOString(), - }; - task.messages = [initialUserMessage]; - - // Save task to history (includes the initial user message) - saveTask(task); - - // Generate AI summary asynchronously (don't block task execution) - generateTaskSummary(validatedConfig.prompt) - .then((summary) => { - updateTaskSummary(taskId, summary); - forwardToRenderer('task:summary', { taskId, summary }); - }) - .catch((err) => { - console.warn('[IPC] Failed to generate task summary:', err); - }); - - return task; - }); - - // Task: Cancel current task (running or queued) - handle('task:cancel', async (_event: IpcMainInvokeEvent, taskId?: string) => { - if (!taskId) return; - - // Check if it's a queued task first - if (taskManager.isTaskQueued(taskId)) { - taskManager.cancelQueuedTask(taskId); - updateTaskStatus(taskId, 'cancelled', new Date().toISOString()); - return; - } - - // Otherwise cancel the running task - if (taskManager.hasActiveTask(taskId)) { - await taskManager.cancelTask(taskId); - updateTaskStatus(taskId, 'cancelled', new Date().toISOString()); - } - }); - - // Task: Interrupt current task (graceful Ctrl+C, doesn't kill process) - handle('task:interrupt', async (_event: IpcMainInvokeEvent, taskId?: string) => { - if (!taskId) return; - - if (taskManager.hasActiveTask(taskId)) { - await taskManager.interruptTask(taskId); - // Note: Don't change task status - task is still running, just interrupted - console.log(`[IPC] Task ${taskId} interrupted`); - } - }); - - // Task: Get task from history - handle('task:get', async (_event: IpcMainInvokeEvent, taskId: string) => { - return getTask(taskId) || null; - }); - - // Task: List tasks from history - handle('task:list', async (_event: IpcMainInvokeEvent) => { - return getTasks(); - }); - - // Task: Delete task from history - handle('task:delete', async (_event: IpcMainInvokeEvent, taskId: string) => { - deleteTask(taskId); - }); - - // Task: Clear all history - handle('task:clear-history', async (_event: IpcMainInvokeEvent) => { - clearHistory(); - }); - - // Permission: Respond to permission request - handle('permission:respond', async (_event: IpcMainInvokeEvent, response: PermissionResponse) => { - const parsedResponse = validate(permissionResponseSchema, response); - const { taskId, decision, requestId } = parsedResponse; - - // Check if this is a file permission request from the MCP server - if (requestId && isFilePermissionRequest(requestId)) { - const allowed = decision === 'allow'; - const resolved = resolvePermission(requestId, allowed); - if (resolved) { - console.log(`[IPC] File permission request ${requestId} resolved: ${allowed ? 'allowed' : 'denied'}`); - return; - } - // If not found in pending, fall through to standard handling - console.warn(`[IPC] File permission request ${requestId} not found in pending requests`); - } - - // Check if this is a question request from the MCP server - if (requestId && isQuestionRequest(requestId)) { - const denied = decision === 'deny'; - const resolved = resolveQuestion(requestId, { - selectedOptions: parsedResponse.selectedOptions, - customText: parsedResponse.customText, - denied, - }); - if (resolved) { - console.log(`[IPC] Question request ${requestId} resolved: ${denied ? 'denied' : 'answered'}`); - return; - } - // If not found in pending, fall through to standard handling - console.warn(`[IPC] Question request ${requestId} not found in pending requests`); - } - - // Check if the task is still active - if (!taskManager.hasActiveTask(taskId)) { - console.warn(`[IPC] Permission response for inactive task ${taskId}`); - return; - } - - if (decision === 'allow') { - // Send the response to the correct task's CLI - const message = parsedResponse.selectedOptions?.join(', ') || parsedResponse.message || 'yes'; - const sanitizedMessage = sanitizeString(message, 'permissionResponse', 1024); - await taskManager.sendResponse(taskId, sanitizedMessage); - } else { - // Send denial to the correct task - await taskManager.sendResponse(taskId, 'no'); - } - }); - - // Session: Resume (continue conversation) - handle('session:resume', async (event: IpcMainInvokeEvent, sessionId: string, prompt: string, existingTaskId?: string) => { - const window = assertTrustedWindow(BrowserWindow.fromWebContents(event.sender)); - const sender = event.sender; - const validatedSessionId = sanitizeString(sessionId, 'sessionId', 128); - const validatedPrompt = sanitizeString(prompt, 'prompt'); - const validatedExistingTaskId = existingTaskId - ? sanitizeString(existingTaskId, 'taskId', 128) - : undefined; - - // Use existing task ID or create a new one - const taskId = validatedExistingTaskId || createTaskId(); - - // Persist the user's follow-up message to task history - if (validatedExistingTaskId) { - const userMessage: TaskMessage = { - id: createMessageId(), - type: 'user', - content: validatedPrompt, - timestamp: new Date().toISOString(), - }; - addTaskMessage(validatedExistingTaskId, userMessage); - } - - // Setup event forwarding to renderer - const forwardToRenderer = (channel: string, data: unknown) => { - if (!window.isDestroyed() && !sender.isDestroyed()) { - sender.send(channel, data); - } - }; - - // Create task-scoped callbacks for the TaskManager (with batching for performance) - const callbacks: TaskCallbacks = { - onMessage: (message: OpenCodeMessage) => { - const taskMessage = toTaskMessage(message); - if (!taskMessage) return; - - // Queue message for batching instead of immediate send - queueMessage(taskId, taskMessage, forwardToRenderer, addTaskMessage); - }, - - onProgress: (progress: { stage: string; message?: string }) => { - forwardToRenderer('task:progress', { - taskId, - ...progress, - }); - }, - - onPermissionRequest: (request: unknown) => { - // Flush pending messages before showing permission request - flushAndCleanupBatcher(taskId); - forwardToRenderer('permission:request', request); - }, - - onComplete: (result: TaskResult) => { - // Flush any pending messages before completing - flushAndCleanupBatcher(taskId); - - forwardToRenderer('task:update', { - taskId, - type: 'complete', - result, - }); - - // Map result status to task status - let taskStatus: TaskStatus; - if (result.status === 'success') { - taskStatus = 'completed'; - } else if (result.status === 'interrupted') { - taskStatus = 'interrupted'; - } else { - taskStatus = 'failed'; - } - - // Update task status in history - updateTaskStatus(taskId, taskStatus, new Date().toISOString()); - - // Update session ID if available (important for interrupted tasks to allow continuation) - const newSessionId = result.sessionId || taskManager.getSessionId(taskId); - if (newSessionId) { - updateTaskSessionId(taskId, newSessionId); - } - - if (result.status !== 'error') { - const storedTask = getTask(taskId); - if (storedTask) { - void rememberTask(storedTask); - } - } - }, - - onError: (error: Error) => { - // Flush any pending messages before error - flushAndCleanupBatcher(taskId); - - forwardToRenderer('task:update', { - taskId, - type: 'error', - error: error.message, - }); - - // Update task status in history - updateTaskStatus(taskId, 'failed', new Date().toISOString()); - }, - - onDebug: (log: { type: string; message: string; data?: unknown }) => { - if (getDebugMode()) { - forwardToRenderer('debug:log', { - taskId, - timestamp: new Date().toISOString(), - ...log, - }); - } - }, - - onStatusChange: (status: TaskStatus) => { - // Notify renderer of status change (e.g., queued -> running) - forwardToRenderer('task:status-change', { - taskId, - status, - }); - // Update task status in history - updateTaskStatus(taskId, status, new Date().toISOString()); - }, - }; - - const memoryContext = await getMemoryContextForPrompt(validatedPrompt, taskId); - const taskConfigWithMemory = applyMemoryContext( - { - prompt: validatedPrompt, - sessionId: validatedSessionId, - taskId, - }, - memoryContext - ); - - // Start the task via TaskManager with sessionId for resume (creates isolated adapter or queues if busy) - const task = await taskManager.startTask(taskId, taskConfigWithMemory, callbacks); - - // Update task status in history (whether running or queued) - if (validatedExistingTaskId) { - updateTaskStatus(validatedExistingTaskId, task.status, new Date().toISOString()); - } - - return task; - }); - - // Settings: Get API keys - // Note: In production, this should fetch from backend to get metadata - // The actual keys are stored locally in secure storage - handle('settings:api-keys', async (_event: IpcMainInvokeEvent) => { - const storedCredentials = await listStoredCredentials(); - - return storedCredentials - .filter((credential) => credential.account.startsWith('apiKey:')) - .map((credential) => { - const provider = credential.account.replace('apiKey:', ''); - - // Handle Bedrock specially - it stores JSON credentials - let keyPrefix = ''; - if (provider === 'bedrock') { - try { - const parsed = JSON.parse(credential.password); - if (parsed.authType === 'accessKeys') { - keyPrefix = `${parsed.accessKeyId?.substring(0, 8) || 'AKIA'}...`; - } else if (parsed.authType === 'profile') { - keyPrefix = `Profile: ${parsed.profileName || 'default'}`; - } - } catch { - keyPrefix = 'AWS Credentials'; - } - } else { - keyPrefix = - credential.password && credential.password.length > 0 - ? `${credential.password.substring(0, 8)}...` - : ''; - } - - return { - id: `local-${provider}`, - provider, - label: provider === 'bedrock' ? 'AWS Credentials' : 'Local API Key', - keyPrefix, - isActive: true, - createdAt: new Date().toISOString(), - }; - }); - }); - - // Settings: Add API key (stores securely in OS keychain) - handle( - 'settings:add-api-key', - async (_event: IpcMainInvokeEvent, provider: string, key: string, label?: string) => { - if (!ALLOWED_API_KEY_PROVIDERS.has(provider)) { - throw new Error('Unsupported API key provider'); - } - const sanitizedKey = sanitizeString(key, 'apiKey', 256); - const sanitizedLabel = label ? sanitizeString(label, 'label', 128) : undefined; - - // Store the API key securely in OS keychain - await storeApiKey(provider, sanitizedKey); - - return { - id: `local-${provider}`, - provider, - label: sanitizedLabel || 'Local API Key', - keyPrefix: sanitizedKey.substring(0, 8) + '...', - isActive: true, - createdAt: new Date().toISOString(), - }; - } - ); - - // Settings: Remove API key - handle('settings:remove-api-key', async (_event: IpcMainInvokeEvent, id: string) => { - // Extract provider from id (format: local-{provider}) - const sanitizedId = sanitizeString(id, 'id', 128); - const provider = sanitizedId.replace('local-', ''); - await deleteApiKey(provider); - }); - - // API Key: Check if API key exists - handle('api-key:exists', async (_event: IpcMainInvokeEvent) => { - const apiKey = await getApiKey('anthropic'); - return Boolean(apiKey); - }); - - // API Key: Set API key - handle('api-key:set', async (_event: IpcMainInvokeEvent, key: string) => { - const sanitizedKey = sanitizeString(key, 'apiKey', 256); - await storeApiKey('anthropic', sanitizedKey); - console.log('[API Key] Key set', { keyPrefix: sanitizedKey.substring(0, 8) }); - }); - - // API Key: Get API key - handle('api-key:get', async (_event: IpcMainInvokeEvent) => { - return getApiKey('anthropic'); - }); - - // API Key: Validate API key by making a test request - handle('api-key:validate', async (_event: IpcMainInvokeEvent, key: string) => { - const sanitizedKey = sanitizeString(key, 'apiKey', 256); - console.log('[API Key] Validation requested'); - - try { - // Make a simple API call to validate the key - const response = await fetchWithTimeout( - 'https://api.anthropic.com/v1/messages', - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'x-api-key': sanitizedKey, - 'anthropic-version': '2023-06-01', - }, - body: JSON.stringify({ - model: 'claude-3-haiku-20240307', - max_tokens: 1, - messages: [{ role: 'user', content: 'test' }], - }), - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - - if (response.ok) { - console.log('[API Key] Validation succeeded'); - return { valid: true }; - } - - const errorData = await response.json().catch(() => ({})); - const errorMessage = (errorData as { error?: { message?: string } })?.error?.message || `API returned status ${response.status}`; - - console.warn('[API Key] Validation failed', { status: response.status, error: errorMessage }); - - return { valid: false, error: errorMessage }; - } catch (error) { - console.error('[API Key] Validation error', { error: error instanceof Error ? error.message : String(error) }); - if (error instanceof Error && error.name === 'AbortError') { - return { valid: false, error: 'Request timed out. Please check your internet connection and try again.' }; - } - return { valid: false, error: 'Failed to validate API key. Check your internet connection.' }; - } - }); - - // API Key: Validate API key for any provider - handle('api-key:validate-provider', async (_event: IpcMainInvokeEvent, provider: string, key: string) => { - if (!ALLOWED_API_KEY_PROVIDERS.has(provider)) { - return { valid: false, error: 'Unsupported provider' }; - } - const sanitizedKey = sanitizeString(key, 'apiKey', 256); - console.log(`[API Key] Validation requested for provider: ${provider}`); - - try { - let response: Response; - - switch (provider) { - case 'anthropic': - response = await fetchWithTimeout( - 'https://api.anthropic.com/v1/messages', - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'x-api-key': sanitizedKey, - 'anthropic-version': '2023-06-01', - }, - body: JSON.stringify({ - model: 'claude-3-haiku-20240307', - max_tokens: 1, - messages: [{ role: 'user', content: 'test' }], - }), - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - break; - - case 'openai': - response = await fetchWithTimeout( - 'https://api.openai.com/v1/models', - { - method: 'GET', - headers: { - 'Authorization': `Bearer ${sanitizedKey}`, - }, - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - break; - - case 'openrouter': - response = await fetchWithTimeout( - 'https://openrouter.ai/api/v1/models', - { - method: 'GET', - headers: { - 'Authorization': `Bearer ${sanitizedKey}`, - }, - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - break; - - case 'google': - response = await fetchWithTimeout( - `https://generativelanguage.googleapis.com/v1beta/models?key=${sanitizedKey}`, - { - method: 'GET', - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - break; - - case 'xai': - response = await fetchWithTimeout( - 'https://api.x.ai/v1/models', - { - method: 'GET', - headers: { - 'Authorization': `Bearer ${sanitizedKey}`, - }, - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - break; - - case 'deepseek': - response = await fetchWithTimeout( - 'https://api.deepseek.com/models', - { - method: 'GET', - headers: { - 'Authorization': `Bearer ${sanitizedKey}`, - }, - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - break; - - // Z.AI Coding Plan uses the same validation as standard API - case 'zai': - response = await fetchWithTimeout( - 'https://open.bigmodel.cn/api/paas/v4/models', - { - method: 'GET', - headers: { - 'Authorization': `Bearer ${sanitizedKey}`, - }, - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - break; - - default: - // For 'custom' provider, skip validation - console.log('[API Key] Skipping validation for custom provider'); - return { valid: true }; - } - - if (response.ok) { - console.log(`[API Key] Validation succeeded for ${provider}`); - return { valid: true }; - } - - const errorData = await response.json().catch(() => ({})); - const errorMessage = (errorData as { error?: { message?: string } })?.error?.message || `API returned status ${response.status}`; - - console.warn(`[API Key] Validation failed for ${provider}`, { status: response.status, error: errorMessage }); - return { valid: false, error: errorMessage }; - } catch (error) { - console.error(`[API Key] Validation error for ${provider}`, { error: error instanceof Error ? error.message : String(error) }); - if (error instanceof Error && error.name === 'AbortError') { - return { valid: false, error: 'Request timed out. Please check your internet connection and try again.' }; - } - return { valid: false, error: 'Failed to validate API key. Check your internet connection.' }; - } - }); - - // Bedrock: Validate AWS credentials - handle('bedrock:validate', async (_event: IpcMainInvokeEvent, credentials: string) => { - console.log('[Bedrock] Validation requested'); - - try { - const parsed = JSON.parse(credentials); - let client: BedrockClient; - - if (parsed.authType === 'accessKeys') { - // Access key authentication - const awsCredentials: { accessKeyId: string; secretAccessKey: string; sessionToken?: string } = { - accessKeyId: parsed.accessKeyId, - secretAccessKey: parsed.secretAccessKey, - }; - if (parsed.sessionToken) { - awsCredentials.sessionToken = parsed.sessionToken; - } - client = new BedrockClient({ - region: parsed.region || 'us-east-1', - credentials: awsCredentials, - }); - } else if (parsed.authType === 'profile') { - // AWS Profile authentication - client = new BedrockClient({ - region: parsed.region || 'us-east-1', - credentials: fromIni({ profile: parsed.profileName || 'default' }), - }); - } else { - return { valid: false, error: 'Invalid authentication type' }; - } - - // Test by listing foundation models - const command = new ListFoundationModelsCommand({}); - await client.send(command); - - console.log('[Bedrock] Validation succeeded'); - return { valid: true }; - } catch (error) { - const message = error instanceof Error ? error.message : 'Validation failed'; - console.warn('[Bedrock] Validation failed:', message); - - // Provide user-friendly error messages - if (message.includes('UnrecognizedClientException') || message.includes('InvalidSignatureException')) { - return { valid: false, error: 'Invalid AWS credentials. Please check your Access Key ID and Secret Access Key.' }; - } - if (message.includes('AccessDeniedException')) { - return { valid: false, error: 'Access denied. Ensure your AWS credentials have Bedrock permissions.' }; - } - if (message.includes('could not be found')) { - return { valid: false, error: 'AWS profile not found. Check your ~/.aws/credentials file.' }; - } - - return { valid: false, error: message }; - } - }); - - // Bedrock: Save credentials - handle('bedrock:save', async (_event: IpcMainInvokeEvent, credentials: string) => { - const parsed = JSON.parse(credentials); - - // Validate structure - if (parsed.authType === 'accessKeys') { - if (!parsed.accessKeyId || !parsed.secretAccessKey) { - throw new Error('Access Key ID and Secret Access Key are required'); - } - } else if (parsed.authType === 'profile') { - if (!parsed.profileName) { - throw new Error('Profile name is required'); - } - } else { - throw new Error('Invalid authentication type'); - } - - // Store the credentials - storeApiKey('bedrock', credentials); - - return { - id: 'local-bedrock', - provider: 'bedrock', - label: parsed.authType === 'accessKeys' ? 'AWS Access Keys' : `AWS Profile: ${parsed.profileName}`, - keyPrefix: parsed.authType === 'accessKeys' ? `${parsed.accessKeyId.substring(0, 8)}...` : parsed.profileName, - isActive: true, - createdAt: new Date().toISOString(), - }; - }); - - // Bedrock: Get credentials - handle('bedrock:get-credentials', async (_event: IpcMainInvokeEvent) => { - const stored = getApiKey('bedrock'); - if (!stored) return null; - try { - return JSON.parse(stored); - } catch { - return null; - } - }); - - // API Key: Clear API key - handle('api-key:clear', async (_event: IpcMainInvokeEvent) => { - await deleteApiKey('anthropic'); - console.log('[API Key] Key cleared'); - }); - - // OpenCode CLI: Check if installed - handle('opencode:check', async (_event: IpcMainInvokeEvent) => { - // E2E test bypass: return mock CLI status when E2E skip auth is enabled - if (isE2ESkipAuthEnabled()) { - return { - installed: true, - version: '1.0.0-test', - installCommand: 'npm install -g opencode-ai', - }; - } - - const installed = await isOpenCodeCliInstalled(); - const version = installed ? await getOpenCodeCliVersion() : null; - return { - installed, - version, - installCommand: 'npm install -g opencode-ai', - }; - }); - - // OpenCode CLI: Get version - handle('opencode:version', async (_event: IpcMainInvokeEvent) => { - return getOpenCodeCliVersion(); - }); - - // Model: Get selected model - handle('model:get', async (_event: IpcMainInvokeEvent) => { - return getSelectedModel(); - }); - - // Model: Set selected model - handle('model:set', async (_event: IpcMainInvokeEvent, model: SelectedModel) => { - if (!model || typeof model.provider !== 'string' || typeof model.model !== 'string') { - throw new Error('Invalid model configuration'); - } - setSelectedModel(model); - }); - - // Ollama: Test connection and get models - handle('ollama:test-connection', async (_event: IpcMainInvokeEvent, url: string) => { - const sanitizedUrl = sanitizeString(url, 'ollamaUrl', 256); - - // Validate URL format and protocol - try { - const parsed = new URL(sanitizedUrl); - if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { - return { success: false, error: 'Only http and https URLs are allowed' }; - } - } catch { - return { success: false, error: 'Invalid URL format' }; - } - - try { - const response = await fetchWithTimeout( - `${sanitizedUrl}/api/tags`, - { method: 'GET' }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - - if (!response.ok) { - throw new Error(`Ollama returned status ${response.status}`); - } - - const data = await response.json() as { models?: Array<{ name: string; size: number }> }; - const models: OllamaModel[] = (data.models || []).map((m) => ({ - id: m.name, - displayName: m.name, - size: m.size, - })); - - console.log(`[Ollama] Connection successful, found ${models.length} models`); - return { success: true, models }; - } catch (error) { - const message = error instanceof Error ? error.message : 'Connection failed'; - console.warn('[Ollama] Connection failed:', message); - - if (error instanceof Error && error.name === 'AbortError') { - return { success: false, error: 'Connection timed out. Make sure Ollama is running.' }; - } - return { success: false, error: `Cannot connect to Ollama: ${message}` }; - } - }); - - // Ollama: Get stored config - handle('ollama:get-config', async (_event: IpcMainInvokeEvent) => { - return getOllamaConfig(); - }); - - // Ollama: Set config - handle('ollama:set-config', async (_event: IpcMainInvokeEvent, config: OllamaConfig | null) => { - if (config !== null) { - if (typeof config.baseUrl !== 'string' || typeof config.enabled !== 'boolean') { - throw new Error('Invalid Ollama configuration'); - } - // Validate URL format and protocol - try { - const parsed = new URL(config.baseUrl); - if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { - throw new Error('Only http and https URLs are allowed'); - } - } catch (e) { - if (e instanceof Error && e.message.includes('http')) { - throw e; // Re-throw our protocol error - } - throw new Error('Invalid base URL format'); - } - // Validate optional lastValidated if present - if (config.lastValidated !== undefined && typeof config.lastValidated !== 'number') { - throw new Error('Invalid Ollama configuration'); - } - // Validate optional models array if present - if (config.models !== undefined) { - if (!Array.isArray(config.models)) { - throw new Error('Invalid Ollama configuration: models must be an array'); - } - for (const model of config.models) { - if (typeof model.id !== 'string' || typeof model.displayName !== 'string' || typeof model.size !== 'number') { - throw new Error('Invalid Ollama configuration: invalid model format'); - } - } - } - } - setOllamaConfig(config); - console.log('[Ollama] Config saved:', config); - }); - - // OpenRouter: Fetch available models - handle('openrouter:fetch-models', async (_event: IpcMainInvokeEvent) => { - const apiKey = getApiKey('openrouter'); - if (!apiKey) { - return { success: false, error: 'No OpenRouter API key configured' }; - } - - try { - const response = await fetchWithTimeout( - 'https://openrouter.ai/api/v1/models', - { - method: 'GET', - headers: { - 'Authorization': `Bearer ${apiKey}`, - }, - }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - const errorMessage = (errorData as { error?: { message?: string } })?.error?.message || `API returned status ${response.status}`; - return { success: false, error: errorMessage }; - } - - const data = await response.json() as { data?: Array<{ id: string; name: string; context_length?: number }> }; - const models = (data.data || []).map((m) => { - // Extract provider from model ID (e.g., "anthropic/claude-3.5-sonnet" -> "anthropic") - const provider = m.id.split('/')[0] || 'unknown'; - return { - id: m.id, - name: m.name || m.id, - provider, - contextLength: m.context_length || 0, - }; - }); - - console.log(`[OpenRouter] Fetched ${models.length} models`); - return { success: true, models }; - } catch (error) { - const message = error instanceof Error ? error.message : 'Failed to fetch models'; - console.warn('[OpenRouter] Fetch failed:', message); - - if (error instanceof Error && error.name === 'AbortError') { - return { success: false, error: 'Request timed out. Check your internet connection.' }; - } - return { success: false, error: `Failed to fetch models: ${message}` }; - } - }); - - // LiteLLM: Test connection and fetch models - handle('litellm:test-connection', async (_event: IpcMainInvokeEvent, url: string, apiKey?: string) => { - const sanitizedUrl = sanitizeString(url, 'litellmUrl', 256); - const sanitizedApiKey = apiKey ? sanitizeString(apiKey, 'apiKey', 256) : undefined; - - // Validate URL format and protocol - try { - const parsed = new URL(sanitizedUrl); - if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { - return { success: false, error: 'Only http and https URLs are allowed' }; - } - } catch { - return { success: false, error: 'Invalid URL format' }; - } - - try { - const headers: Record = {}; - if (sanitizedApiKey) { - headers['Authorization'] = `Bearer ${sanitizedApiKey}`; - } - - const response = await fetchWithTimeout( - `${sanitizedUrl}/v1/models`, - { method: 'GET', headers }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - const errorMessage = (errorData as { error?: { message?: string } })?.error?.message || `API returned status ${response.status}`; - return { success: false, error: errorMessage }; - } - - const data = await response.json() as { data?: Array<{ id: string; object: string; created?: number; owned_by?: string }> }; - const models = (data.data || []).map((m) => { - // Extract provider from model ID (e.g., "openai/gpt-4" -> "openai") - const provider = m.id.split('/')[0] || m.owned_by || 'unknown'; - return { - id: m.id, - name: m.id, // LiteLLM uses id as name - provider, - contextLength: 0, // LiteLLM doesn't provide this in /v1/models - }; - }); - - console.log(`[LiteLLM] Connection successful, found ${models.length} models`); - return { success: true, models }; - } catch (error) { - const message = error instanceof Error ? error.message : 'Connection failed'; - console.warn('[LiteLLM] Connection failed:', message); - - if (error instanceof Error && error.name === 'AbortError') { - return { success: false, error: 'Connection timed out. Make sure LiteLLM proxy is running.' }; - } - return { success: false, error: `Cannot connect to LiteLLM: ${message}` }; - } - }); - - // LiteLLM: Fetch models from configured proxy - handle('litellm:fetch-models', async (_event: IpcMainInvokeEvent) => { - const config = getLiteLLMConfig(); - if (!config || !config.baseUrl) { - return { success: false, error: 'No LiteLLM proxy configured' }; - } - - const apiKey = getApiKey('litellm'); - - try { - const headers: Record = {}; - if (apiKey) { - headers['Authorization'] = `Bearer ${apiKey}`; - } - - const response = await fetchWithTimeout( - `${config.baseUrl}/v1/models`, - { method: 'GET', headers }, - API_KEY_VALIDATION_TIMEOUT_MS - ); - - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - const errorMessage = (errorData as { error?: { message?: string } })?.error?.message || `API returned status ${response.status}`; - return { success: false, error: errorMessage }; - } - - const data = await response.json() as { data?: Array<{ id: string; object: string; created?: number; owned_by?: string }> }; - const models = (data.data || []).map((m) => { - // Extract provider from model ID (e.g., "anthropic/claude-sonnet" -> "anthropic") - const parts = m.id.split('/'); - const provider = parts.length > 1 ? parts[0] : (m.owned_by !== 'openai' ? m.owned_by : 'unknown') || 'unknown'; - - // Generate display name (e.g., "anthropic/claude-sonnet" -> "Anthropic: Claude Sonnet") - const modelPart = parts.length > 1 ? parts.slice(1).join('/') : m.id; - const providerDisplay = provider.charAt(0).toUpperCase() + provider.slice(1); - const modelDisplay = modelPart - .split('-') - .map(word => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' '); - const displayName = parts.length > 1 ? `${providerDisplay}: ${modelDisplay}` : modelDisplay; - - return { - id: m.id, - name: displayName, - provider, - contextLength: 0, - }; - }); - - console.log(`[LiteLLM] Fetched ${models.length} models`); - return { success: true, models }; - } catch (error) { - const message = error instanceof Error ? error.message : 'Failed to fetch models'; - console.warn('[LiteLLM] Fetch failed:', message); - - if (error instanceof Error && error.name === 'AbortError') { - return { success: false, error: 'Request timed out. Check your LiteLLM proxy.' }; - } - return { success: false, error: `Failed to fetch models: ${message}` }; - } - }); - - // LiteLLM: Get stored config - handle('litellm:get-config', async (_event: IpcMainInvokeEvent) => { - return getLiteLLMConfig(); - }); - - // LiteLLM: Set config - handle('litellm:set-config', async (_event: IpcMainInvokeEvent, config: LiteLLMConfig | null) => { - if (config !== null) { - if (typeof config.baseUrl !== 'string' || typeof config.enabled !== 'boolean') { - throw new Error('Invalid LiteLLM configuration'); - } - // Validate URL format and protocol - try { - const parsed = new URL(config.baseUrl); - if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { - throw new Error('Only http and https URLs are allowed'); - } - } catch (e) { - if (e instanceof Error && e.message.includes('http')) { - throw e; // Re-throw our protocol error - } - throw new Error('Invalid base URL format'); - } - // Validate optional lastValidated if present - if (config.lastValidated !== undefined && typeof config.lastValidated !== 'number') { - throw new Error('Invalid LiteLLM configuration'); - } - // Validate optional models array if present - if (config.models !== undefined) { - if (!Array.isArray(config.models)) { - throw new Error('Invalid LiteLLM configuration: models must be an array'); - } - for (const model of config.models) { - if (typeof model.id !== 'string' || typeof model.name !== 'string' || typeof model.provider !== 'string') { - throw new Error('Invalid LiteLLM configuration: invalid model format'); - } - } - } - } - setLiteLLMConfig(config); - console.log('[LiteLLM] Config saved:', config); - }); - - // API Keys: Get all API keys (with masked values) - handle('api-keys:all', async (_event: IpcMainInvokeEvent) => { - const keys = await getAllApiKeys(); - // Return masked versions for UI - const masked: Record = {}; - for (const [provider, key] of Object.entries(keys)) { - masked[provider] = { - exists: Boolean(key), - prefix: key ? key.substring(0, 8) + '...' : undefined, - }; - } - return masked; - }); - - // API Keys: Check if any key exists - handle('api-keys:has-any', async (_event: IpcMainInvokeEvent) => { - // In E2E mock mode, pretend we have API keys - if (isMockTaskEventsEnabled()) { - return true; - } - return hasAnyApiKey(); - }); - - // Settings: Get debug mode setting - handle('settings:debug-mode', async (_event: IpcMainInvokeEvent) => { - return getDebugMode(); - }); - - // Settings: Set debug mode setting - handle('settings:set-debug-mode', async (_event: IpcMainInvokeEvent, enabled: boolean) => { - if (typeof enabled !== 'boolean') { - throw new Error('Invalid debug mode flag'); - } - setDebugMode(enabled); - // Broadcast the change to all renderer windows - for (const win of BrowserWindow.getAllWindows()) { - win.webContents.send('settings:debug-mode-changed', { enabled }); - } - }); - - // Settings: Get all app settings - handle('settings:app-settings', async (_event: IpcMainInvokeEvent) => { - return getAppSettings(); - }); - - // Memory: Get MemOS status - handle('memory:get-config', async (_event: IpcMainInvokeEvent) => { - const apiKey = getApiKey('memos'); - return { - hasApiKey: Boolean(apiKey), - apiKeyPrefix: apiKey ? `${apiKey.substring(0, 8)}...` : undefined, - }; - }); - - // Memory: Set MemOS API key - handle('memory:set-api-key', async (_event: IpcMainInvokeEvent, key: string) => { - const sanitizedKey = sanitizeString(key, 'memosApiKey', 512); - storeApiKey('memos', sanitizedKey); - }); - - // Memory: Clear MemOS API key - handle('memory:clear-api-key', async (_event: IpcMainInvokeEvent) => { - deleteApiKey('memos'); - }); - - // Onboarding: Get onboarding complete status - // Also checks for existing task history to handle upgrades from pre-onboarding versions - handle('onboarding:complete', async (_event: IpcMainInvokeEvent) => { - // E2E test bypass: skip onboarding when E2E skip auth is enabled - if (isE2ESkipAuthEnabled()) { - return true; - } - - // If onboarding is already marked complete, return true - if (getOnboardingComplete()) { - return true; - } - - // Check if this is an existing user (has task history) - // If so, mark onboarding as complete and skip the wizard - const tasks = getTasks(); - if (tasks.length > 0) { - setOnboardingComplete(true); - return true; - } - - return false; - }); - - // Onboarding: Set onboarding complete status - handle('onboarding:set-complete', async (_event: IpcMainInvokeEvent, complete: boolean) => { - setOnboardingComplete(complete); - }); - - // Shell: Open URL in external browser - // Only allows http/https URLs for security - handle('shell:open-external', async (_event: IpcMainInvokeEvent, url: string) => { - try { - const parsed = new URL(url); - if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { - throw new Error('Only http and https URLs are allowed'); - } - await shell.openExternal(url); - } catch (error) { - console.error('Failed to open external URL:', error); - throw error; - } - }); - - // Log event handler - now just returns ok (no external logging) - handle( - 'log:event', - async (_event: IpcMainInvokeEvent, _payload: { level?: string; message?: string; context?: Record }) => { - // No-op: external logging removed - return { ok: true }; - } - ); -} - -function createTaskId(): string { - return `task_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`; -} - -function createMessageId(): string { - return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`; -} - -/** - * Extract base64 screenshots from tool output - * Returns cleaned text (with images replaced by placeholders) and extracted attachments - */ -function extractScreenshots(output: string): { - cleanedText: string; - attachments: Array<{ type: 'screenshot' | 'json'; data: string; label?: string }>; -} { - const attachments: Array<{ type: 'screenshot' | 'json'; data: string; label?: string }> = []; - - // Match data URLs (data:image/png;base64,...) - const dataUrlRegex = /data:image\/(png|jpeg|jpg|webp);base64,[A-Za-z0-9+/=]+/g; - let match; - while ((match = dataUrlRegex.exec(output)) !== null) { - attachments.push({ - type: 'screenshot', - data: match[0], - label: 'Browser screenshot', - }); - } - - // Also check for raw base64 PNG (starts with iVBORw0) - // This pattern matches PNG base64 that isn't already a data URL - const rawBase64Regex = /(? 100) { - attachments.push({ - type: 'screenshot', - data: `data:image/png;base64,${base64Data}`, - label: 'Browser screenshot', - }); - } - } - - // Clean the text - replace image data with placeholder - let cleanedText = output - .replace(dataUrlRegex, '[Screenshot captured]') - .replace(rawBase64Regex, '[Screenshot captured]'); - - // Also clean up common JSON wrappers around screenshots - cleanedText = cleanedText - .replace(/"[Screenshot captured]"/g, '"[Screenshot]"') - .replace(/\[Screenshot captured\]\[Screenshot captured\]/g, '[Screenshot captured]'); - - return { cleanedText, attachments }; -} - -/** - * Sanitize tool output to remove technical details that confuse users - */ -function sanitizeToolOutput(text: string, isError: boolean): string { - let result = text; - - // Strip any remaining ANSI escape codes - result = result.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, ''); - // Also strip any leftover escape sequences that may have been partially matched - result = result.replace(/\x1B\[2m|\x1B\[22m|\x1B\[0m/g, ''); - - // Remove WebSocket URLs - result = result.replace(/ws:\/\/[^\s\]]+/g, '[connection]'); - - // Remove "Call log:" sections and everything after - result = result.replace(/\s*Call log:[\s\S]*/i, ''); - - // Simplify common Playwright/CDP errors for users - if (isError) { - // Timeout errors: extract just the timeout duration - const timeoutMatch = result.match(/timed? ?out after (\d+)ms/i); - if (timeoutMatch) { - const seconds = Math.round(parseInt(timeoutMatch[1]) / 1000); - return `Timed out after ${seconds}s`; - } - - // "browserType.connectOverCDP: Protocol error (X): Y" → "Y" - const protocolMatch = result.match(/Protocol error \([^)]+\):\s*(.+)/i); - if (protocolMatch) { - result = protocolMatch[1].trim(); - } - - // "Error executing code: X" → just the meaningful part - result = result.replace(/^Error executing code:\s*/i, ''); - - // Clean up "browserType.connectOverCDP:" prefix - result = result.replace(/browserType\.connectOverCDP:\s*/i, ''); - - // Remove stack traces (lines starting with "at ") - result = result.replace(/\s+at\s+.+/g, ''); - - // Remove error class names like "CodeExecutionTimeoutError:" - result = result.replace(/\w+Error:\s*/g, ''); - } - - return result.trim(); -} - -function toTaskMessage(message: OpenCodeMessage): TaskMessage | null { - // OpenCode format: step_start, text, tool_call, tool_use, tool_result, step_finish - - // Handle text content - if (message.type === 'text') { - if (message.part.text) { - return { - id: createMessageId(), - type: 'assistant', - content: message.part.text, - timestamp: new Date().toISOString(), - }; - } - return null; - } - - // Handle tool calls (legacy format - just shows tool is starting) - if (message.type === 'tool_call') { - return { - id: createMessageId(), - type: 'tool', - content: `Using tool: ${message.part.tool}`, - toolName: message.part.tool, - toolInput: message.part.input, - timestamp: new Date().toISOString(), - }; - } - - // Handle tool_use messages (combined tool call + result) - if (message.type === 'tool_use') { - const toolUseMsg = message as import('@accomplish/shared').OpenCodeToolUseMessage; - const toolName = toolUseMsg.part.tool || 'unknown'; - const toolInput = toolUseMsg.part.state?.input; - const toolOutput = toolUseMsg.part.state?.output || ''; - const status = toolUseMsg.part.state?.status; - - // Only create message for completed/error status (not pending/running) - if (status === 'completed' || status === 'error') { - // Extract screenshots from tool output - const { cleanedText, attachments } = extractScreenshots(toolOutput); - - // Sanitize output - more aggressive for errors - const isError = status === 'error'; - const sanitizedText = sanitizeToolOutput(cleanedText, isError); - - // Truncate long outputs for display - const displayText = sanitizedText.length > 500 - ? sanitizedText.substring(0, 500) + '...' - : sanitizedText; - - return { - id: createMessageId(), - type: 'tool', - content: displayText || `Tool ${toolName} ${status}`, - toolName, - toolInput, - timestamp: new Date().toISOString(), - attachments: attachments.length > 0 ? attachments : undefined, - }; - } - return null; - } - - return null; -} diff --git a/openwork-memos-integration/apps/desktop/src/main/ipc/validation.ts b/openwork-memos-integration/apps/desktop/src/main/ipc/validation.ts deleted file mode 100644 index a0ded6f58..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/ipc/validation.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { z } from 'zod'; - -export const taskConfigSchema = z.object({ - prompt: z.string().min(1, 'Prompt is required'), - taskId: z.string().optional(), - workingDirectory: z.string().optional(), - allowedTools: z.array(z.string()).optional(), - systemPromptAppend: z.string().optional(), - outputSchema: z.record(z.any()).optional(), - sessionId: z.string().optional(), - chrome: z.boolean().optional(), -}); - -export const permissionResponseSchema = z.object({ - requestId: z.string().min(1, 'Request ID is required'), - taskId: z.string().min(1, 'Task ID is required'), - decision: z.enum(['allow', 'deny']), - message: z.string().optional(), - selectedOptions: z.array(z.string()).optional(), - customText: z.string().optional(), -}); - -export const resumeSessionSchema = z.object({ - sessionId: z.string().min(1, 'Session ID is required'), - prompt: z.string().min(1, 'Prompt is required'), - existingTaskId: z.string().optional(), - chrome: z.boolean().optional(), -}); - -export function validate( - schema: TSchema, - payload: unknown -): z.infer { - const result = schema.safeParse(payload); - if (!result.success) { - const message = result.error.issues.map((issue: z.ZodIssue) => issue.message).join('; '); - throw new Error(`Invalid payload: ${message}`); - } - return result.data; -} - -export function normalizeIpcError(error: unknown): Error { - if (error instanceof Error) { - return error; - } - return new Error(typeof error === 'string' ? error : 'Unknown IPC error'); -} diff --git a/openwork-memos-integration/apps/desktop/src/main/opencode/adapter.ts b/openwork-memos-integration/apps/desktop/src/main/opencode/adapter.ts deleted file mode 100644 index d208f410b..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/opencode/adapter.ts +++ /dev/null @@ -1,784 +0,0 @@ -import * as pty from 'node-pty'; -import { EventEmitter } from 'events'; -import { app } from 'electron'; -import fs from 'fs'; -import { StreamParser } from './stream-parser'; -import { - getOpenCodeCliPath, - isOpenCodeBundled, - getBundledOpenCodeVersion, -} from './cli-path'; -import { getAllApiKeys, getBedrockCredentials } from '../store/secureStorage'; -import { getSelectedModel } from '../store/appSettings'; -import { generateOpenCodeConfig, ACCOMPLISH_AGENT_NAME, syncApiKeysToOpenCodeAuth } from './config-generator'; -import { getExtendedNodePath } from '../utils/system-path'; -import { getBundledNodePaths, logBundledNodeInfo } from '../utils/bundled-node'; -import path from 'path'; -import type { - TaskConfig, - Task, - TaskMessage, - TaskResult, - OpenCodeMessage, - PermissionRequest, -} from '@accomplish/shared'; - -/** - * Error thrown when OpenCode CLI is not available - */ -export class OpenCodeCliNotFoundError extends Error { - constructor() { - super( - 'OpenCode CLI is not available. The bundled CLI may be missing or corrupted. Please reinstall the application.' - ); - this.name = 'OpenCodeCliNotFoundError'; - } -} - -/** - * Check if OpenCode CLI is available (bundled or installed) - */ -export async function isOpenCodeCliInstalled(): Promise { - return isOpenCodeBundled(); -} - -/** - * Get OpenCode CLI version - */ -export async function getOpenCodeCliVersion(): Promise { - return getBundledOpenCodeVersion(); -} - -export interface OpenCodeAdapterEvents { - message: [OpenCodeMessage]; - 'tool-use': [string, unknown]; - 'tool-result': [string]; - 'permission-request': [PermissionRequest]; - progress: [{ stage: string; message?: string }]; - complete: [TaskResult]; - error: [Error]; - debug: [{ type: string; message: string; data?: unknown }]; -} - -export class OpenCodeAdapter extends EventEmitter { - private ptyProcess: pty.IPty | null = null; - private streamParser: StreamParser; - private currentSessionId: string | null = null; - private currentTaskId: string | null = null; - private messages: TaskMessage[] = []; - private hasCompleted: boolean = false; - private isDisposed: boolean = false; - private wasInterrupted: boolean = false; - - /** - * Create a new OpenCodeAdapter instance - * @param taskId - Optional task ID for this adapter instance (used for logging) - */ - constructor(taskId?: string) { - super(); - this.currentTaskId = taskId || null; - this.streamParser = new StreamParser(); - this.setupStreamParsing(); - } - - /** - * Start a new task with OpenCode CLI - */ - async startTask(config: TaskConfig): Promise { - // Check if adapter has been disposed - if (this.isDisposed) { - throw new Error('Adapter has been disposed and cannot start new tasks'); - } - - // Check if OpenCode CLI is installed before attempting to start - const cliInstalled = await isOpenCodeCliInstalled(); - if (!cliInstalled) { - throw new OpenCodeCliNotFoundError(); - } - - const taskId = config.taskId || this.generateTaskId(); - this.currentTaskId = taskId; - this.currentSessionId = null; - this.messages = []; - this.streamParser.reset(); - this.hasCompleted = false; - this.wasInterrupted = false; - - // Sync API keys to OpenCode CLI's auth.json (for DeepSeek, Z.AI support) - await syncApiKeysToOpenCodeAuth(); - - // Generate OpenCode config file with MCP settings and agent - console.log('[OpenCode CLI] Generating OpenCode config with MCP settings and agent...'); - const configPath = await generateOpenCodeConfig(config.systemPromptAppend); - console.log('[OpenCode CLI] Config generated at:', configPath); - - const cliArgs = await this.buildCliArgs(config); - - // Get the bundled CLI path - const { command, args: baseArgs } = getOpenCodeCliPath(); - const startMsg = `Starting: ${command} ${[...baseArgs, ...cliArgs].join(' ')}`; - console.log('[OpenCode CLI]', startMsg); - this.emit('debug', { type: 'info', message: startMsg }); - - // Build environment with API keys - const env = await this.buildEnvironment(); - - const allArgs = [...baseArgs, ...cliArgs]; - const cmdMsg = `Command: ${command}`; - const argsMsg = `Args: ${allArgs.join(' ')}`; - // Use temp directory as default cwd to avoid TCC permission prompts. - // Home directory (~/) triggers TCC when the CLI scans for projects/configs - // because it lists Desktop, Documents, etc. - const safeCwd = config.workingDirectory || app.getPath('temp'); - const cwdMsg = `Working directory: ${safeCwd}`; - - console.log('[OpenCode CLI]', cmdMsg); - console.log('[OpenCode CLI]', argsMsg); - console.log('[OpenCode CLI]', cwdMsg); - - this.emit('debug', { type: 'info', message: cmdMsg }); - this.emit('debug', { type: 'info', message: argsMsg, data: { args: allArgs } }); - this.emit('debug', { type: 'info', message: cwdMsg }); - - // Always use PTY for proper terminal emulation - // We spawn via shell because posix_spawnp doesn't interpret shebangs - { - const fullCommand = [command, ...allArgs].map(arg => { - // Escape single quotes in arguments for shell (Unix) or handle Windows quoting - if (process.platform === 'win32') { - // Windows: use double quotes for arguments with spaces - if (arg.includes(' ') || arg.includes('"')) { - return `"${arg.replace(/"/g, '\\"')}"`; - } - return arg; - } else { - // Unix: use single quotes - if (arg.includes("'") || arg.includes(' ') || arg.includes('"')) { - return `'${arg.replace(/'/g, "'\\''")}'`; - } - return arg; - } - }).join(' '); - - const shellCmdMsg = `Full shell command: ${fullCommand}`; - console.log('[OpenCode CLI]', shellCmdMsg); - this.emit('debug', { type: 'info', message: shellCmdMsg }); - - // Use platform-appropriate shell - const shellCmd = this.getPlatformShell(); - const shellArgs = this.getShellArgs(fullCommand); - const shellMsg = `Using shell: ${shellCmd} ${shellArgs.join(' ')}`; - console.log('[OpenCode CLI]', shellMsg); - this.emit('debug', { type: 'info', message: shellMsg }); - - this.ptyProcess = pty.spawn(shellCmd, shellArgs, { - name: 'xterm-256color', - cols: 200, - rows: 30, - cwd: safeCwd, - env: env as { [key: string]: string }, - }); - const pidMsg = `PTY Process PID: ${this.ptyProcess.pid}`; - console.log('[OpenCode CLI]', pidMsg); - this.emit('debug', { type: 'info', message: pidMsg }); - - // Handle PTY data (combines stdout/stderr) - this.ptyProcess.onData((data: string) => { - // Filter out ANSI escape codes and control characters for cleaner parsing - const cleanData = data.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, ''); - if (cleanData.trim()) { - // Truncate for console.log to avoid flooding terminal - const truncated = cleanData.substring(0, 500) + (cleanData.length > 500 ? '...' : ''); - console.log('[OpenCode CLI stdout]:', truncated); - // Send full data to debug panel - this.emit('debug', { type: 'stdout', message: cleanData }); - - this.streamParser.feed(cleanData); - } - }); - - // Handle PTY exit - this.ptyProcess.onExit(({ exitCode, signal }) => { - const exitMsg = `PTY Process exited with code: ${exitCode}, signal: ${signal}`; - console.log('[OpenCode CLI]', exitMsg); - this.emit('debug', { type: 'exit', message: exitMsg, data: { exitCode, signal } }); - this.handleProcessExit(exitCode); - }); - } - - return { - id: taskId, - prompt: config.prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - startedAt: new Date().toISOString(), - }; - } - - /** - * Resume an existing session - */ - async resumeSession(sessionId: string, prompt: string): Promise { - return this.startTask({ - prompt, - sessionId, - }); - } - - /** - * Send user response for permission/question - * Note: This requires the PTY to be active - */ - async sendResponse(response: string): Promise { - if (!this.ptyProcess) { - throw new Error('No active process'); - } - - this.ptyProcess.write(response + '\n'); - console.log('[OpenCode CLI] Response sent via PTY'); - } - - /** - * Cancel the current task (hard kill) - */ - async cancelTask(): Promise { - if (this.ptyProcess) { - // Kill the PTY process - this.ptyProcess.kill(); - this.ptyProcess = null; - } - } - - /** - * Interrupt the current task (graceful Ctrl+C) - * Sends SIGINT to allow the CLI to stop gracefully and wait for next input. - * Unlike cancelTask(), this doesn't kill the process - it just interrupts the current operation. - */ - async interruptTask(): Promise { - if (!this.ptyProcess) { - console.log('[OpenCode CLI] No active process to interrupt'); - return; - } - - // Mark as interrupted so we can handle the exit appropriately - this.wasInterrupted = true; - - // Send Ctrl+C (ASCII 0x03) to the PTY to interrupt current operation - this.ptyProcess.write('\x03'); - console.log('[OpenCode CLI] Sent Ctrl+C interrupt signal'); - } - - /** - * Get the current session ID - */ - getSessionId(): string | null { - return this.currentSessionId; - } - - /** - * Get the current task ID - */ - getTaskId(): string | null { - return this.currentTaskId; - } - - /** - * Check if the adapter has been disposed - */ - isAdapterDisposed(): boolean { - return this.isDisposed; - } - - /** - * Dispose the adapter and clean up all resources - * Called when task completes, is cancelled, or on app quit - */ - dispose(): void { - if (this.isDisposed) { - return; - } - - console.log(`[OpenCode Adapter] Disposing adapter for task ${this.currentTaskId}`); - this.isDisposed = true; - - // Kill PTY process if running - if (this.ptyProcess) { - try { - this.ptyProcess.kill(); - } catch (error) { - console.error('[OpenCode Adapter] Error killing PTY process:', error); - } - this.ptyProcess = null; - } - - // Clear state - this.currentSessionId = null; - this.currentTaskId = null; - this.messages = []; - this.hasCompleted = true; - - // Reset stream parser - this.streamParser.reset(); - - // Remove all listeners - this.removeAllListeners(); - - console.log('[OpenCode Adapter] Adapter disposed'); - } - - /** - * Build environment variables with all API keys - */ - private async buildEnvironment(): Promise { - const env: NodeJS.ProcessEnv = { - ...process.env, - }; - - if (app.isPackaged) { - // Run the bundled CLI with Electron acting as Node (no system Node required). - env.ELECTRON_RUN_AS_NODE = '1'; - - // Log bundled Node.js configuration - logBundledNodeInfo(); - - // Add bundled Node.js to PATH (highest priority) - const bundledNode = getBundledNodePaths(); - if (bundledNode) { - // Prepend bundled Node.js bin directory to PATH - const delimiter = process.platform === 'win32' ? ';' : ':'; - env.PATH = `${bundledNode.binDir}${delimiter}${env.PATH || ''}`; - // Also expose as NODE_BIN_PATH so agent can use it in bash commands - env.NODE_BIN_PATH = bundledNode.binDir; - console.log('[OpenCode CLI] Added bundled Node.js to PATH:', bundledNode.binDir); - } - - // For packaged apps on macOS, also extend PATH to include common Node.js locations as fallback. - // This avoids using login shell which triggers folder access permissions. - if (process.platform === 'darwin') { - env.PATH = getExtendedNodePath(env.PATH); - console.log('[OpenCode CLI] Extended PATH for packaged app'); - } - } - - // Load all API keys - const apiKeys = await getAllApiKeys(); - - if (apiKeys.anthropic) { - env.ANTHROPIC_API_KEY = apiKeys.anthropic; - console.log('[OpenCode CLI] Using Anthropic API key from settings'); - } - if (apiKeys.openai) { - env.OPENAI_API_KEY = apiKeys.openai; - console.log('[OpenCode CLI] Using OpenAI API key from settings'); - } - if (apiKeys.google) { - env.GOOGLE_GENERATIVE_AI_API_KEY = apiKeys.google; - console.log('[OpenCode CLI] Using Google API key from settings'); - } - if (apiKeys.xai) { - env.XAI_API_KEY = apiKeys.xai; - console.log('[OpenCode CLI] Using xAI API key from settings'); - } - if (apiKeys.deepseek) { - env.DEEPSEEK_API_KEY = apiKeys.deepseek; - console.log('[OpenCode CLI] Using DeepSeek API key from settings'); - } - if (apiKeys.zai) { - env.ZAI_API_KEY = apiKeys.zai; - console.log('[OpenCode CLI] Using Z.AI API key from settings'); - } - if (apiKeys.openrouter) { - env.OPENROUTER_API_KEY = apiKeys.openrouter; - console.log('[OpenCode CLI] Using OpenRouter API key from settings'); - } - if (apiKeys.litellm) { - env.LITELLM_API_KEY = apiKeys.litellm; - console.log('[OpenCode CLI] Using LiteLLM API key from settings'); - } - - // Set Bedrock credentials if configured - const bedrockCredentials = getBedrockCredentials(); - if (bedrockCredentials) { - if (bedrockCredentials.authType === 'accessKeys') { - env.AWS_ACCESS_KEY_ID = bedrockCredentials.accessKeyId; - env.AWS_SECRET_ACCESS_KEY = bedrockCredentials.secretAccessKey; - if (bedrockCredentials.sessionToken) { - env.AWS_SESSION_TOKEN = bedrockCredentials.sessionToken; - } - console.log('[OpenCode CLI] Using Bedrock Access Key credentials'); - } else if (bedrockCredentials.authType === 'profile') { - env.AWS_PROFILE = bedrockCredentials.profileName; - console.log('[OpenCode CLI] Using Bedrock AWS Profile:', bedrockCredentials.profileName); - } - if (bedrockCredentials.region) { - env.AWS_REGION = bedrockCredentials.region; - console.log('[OpenCode CLI] Using Bedrock region:', bedrockCredentials.region); - } - } - - // Set Ollama host if configured - const selectedModel = getSelectedModel(); - if (selectedModel?.provider === 'ollama' && selectedModel.baseUrl) { - env.OLLAMA_HOST = selectedModel.baseUrl; - console.log('[OpenCode CLI] Using Ollama host:', selectedModel.baseUrl); - } - - // Log config environment variable - console.log('[OpenCode CLI] OPENCODE_CONFIG in env:', process.env.OPENCODE_CONFIG); - if (process.env.OPENCODE_CONFIG) { - env.OPENCODE_CONFIG = process.env.OPENCODE_CONFIG; - console.log('[OpenCode CLI] Passing OPENCODE_CONFIG to subprocess:', env.OPENCODE_CONFIG); - } - - // Pass task ID to environment for task-scoped page naming in parallel execution - if (this.currentTaskId) { - env.ACCOMPLISH_TASK_ID = this.currentTaskId; - console.log('[OpenCode CLI] Task ID in environment:', this.currentTaskId); - } - - this.emit('debug', { type: 'info', message: 'Environment configured with API keys' }); - - return env; - } - - private async buildCliArgs(config: TaskConfig): Promise { - // Get selected model from settings - const selectedModel = getSelectedModel(); - - // OpenCode CLI uses: opencode run "message" --format json - const args = [ - 'run', - config.prompt, - '--format', 'json', - ]; - - // Add model selection if specified - if (selectedModel?.model) { - if (selectedModel.provider === 'zai') { - // Z.AI Coding Plan uses 'zai-coding-plan' provider in OpenCode CLI - const modelId = selectedModel.model.split('/').pop(); - args.push('--model', `zai-coding-plan/${modelId}`); - } else if (selectedModel.provider === 'deepseek') { - // DeepSeek uses 'deepseek' provider in OpenCode CLI - const modelId = selectedModel.model.split('/').pop(); - args.push('--model', `deepseek/${modelId}`); - } else if (selectedModel.provider === 'openrouter') { - // OpenRouter models use format: openrouter/provider/model - // The fullId is already in the correct format (e.g., openrouter/anthropic/claude-opus-4-5) - args.push('--model', selectedModel.model); - } else { - args.push('--model', selectedModel.model); - } - } - - // Resume session if specified - if (config.sessionId) { - args.push('--session', config.sessionId); - } - - // Use the Accomplish agent for browser automation guidance - args.push('--agent', ACCOMPLISH_AGENT_NAME); - - return args; - } - - private setupStreamParsing(): void { - this.streamParser.on('message', (message: OpenCodeMessage) => { - this.handleMessage(message); - }); - - // Handle parse errors gracefully to prevent crashes from non-JSON output - // PTY combines stdout/stderr, so shell banners, warnings, etc. may appear - this.streamParser.on('error', (error: Error) => { - // Log but don't crash - non-JSON lines are expected from PTY (shell banners, warnings, etc.) - console.warn('[OpenCode Adapter] Stream parse warning:', error.message); - this.emit('debug', { type: 'parse-warning', message: error.message }); - }); - } - - private handleMessage(message: OpenCodeMessage): void { - console.log('[OpenCode Adapter] Handling message type:', message.type); - - switch (message.type) { - // Step start event - case 'step_start': - this.currentSessionId = message.part.sessionID; - this.emit('progress', { stage: 'init', message: 'Task started' }); - break; - - // Text content event - case 'text': - if (!this.currentSessionId && message.part.sessionID) { - this.currentSessionId = message.part.sessionID; - } - this.emit('message', message); - - if (message.part.text) { - const taskMessage: TaskMessage = { - id: this.generateMessageId(), - type: 'assistant', - content: message.part.text, - timestamp: new Date().toISOString(), - }; - this.messages.push(taskMessage); - } - break; - - // Tool call event - case 'tool_call': - const toolName = message.part.tool || 'unknown'; - const toolInput = message.part.input; - - console.log('[OpenCode Adapter] Tool call:', toolName); - - this.emit('tool-use', toolName, toolInput); - this.emit('progress', { - stage: 'tool-use', - message: `Using ${toolName}`, - }); - - // Check if this is AskUserQuestion (requires user input) - if (toolName === 'AskUserQuestion') { - this.handleAskUserQuestion(toolInput as AskUserQuestionInput); - } - break; - - // Tool use event - combined tool call and result from OpenCode CLI - case 'tool_use': - const toolUseMessage = message as import('@accomplish/shared').OpenCodeToolUseMessage; - const toolUseName = toolUseMessage.part.tool || 'unknown'; - const toolUseInput = toolUseMessage.part.state?.input; - const toolUseOutput = toolUseMessage.part.state?.output || ''; - - // For models that don't emit text messages (like Gemini), emit the tool description - // as a thinking message so users can see what the AI is doing - const toolDescription = (toolUseInput as { description?: string })?.description; - if (toolDescription) { - // Create a synthetic text message for the description - const syntheticTextMessage: OpenCodeMessage = { - type: 'text', - timestamp: message.timestamp, - sessionID: message.sessionID, - part: { - id: this.generateMessageId(), - sessionID: toolUseMessage.part.sessionID, - messageID: toolUseMessage.part.messageID, - type: 'text', - text: toolDescription, - }, - } as import('@accomplish/shared').OpenCodeTextMessage; - this.emit('message', syntheticTextMessage); - } - - // Forward to handlers.ts for message processing (screenshots, etc.) - this.emit('message', message); - const toolUseStatus = toolUseMessage.part.state?.status; - - console.log('[OpenCode Adapter] Tool use:', toolUseName, 'status:', toolUseStatus); - - // Emit tool-use event for the call - this.emit('tool-use', toolUseName, toolUseInput); - this.emit('progress', { - stage: 'tool-use', - message: `Using ${toolUseName}`, - }); - - // If status is completed or error, also emit tool-result - if (toolUseStatus === 'completed' || toolUseStatus === 'error') { - this.emit('tool-result', toolUseOutput); - } - - // Check if this is AskUserQuestion (requires user input) - if (toolUseName === 'AskUserQuestion') { - this.handleAskUserQuestion(toolUseInput as AskUserQuestionInput); - } - break; - - // Tool result event - case 'tool_result': - const toolOutput = message.part.output || ''; - console.log('[OpenCode Adapter] Tool result received, length:', toolOutput.length); - this.emit('tool-result', toolOutput); - break; - - // Step finish event - case 'step_finish': - // Only complete if reason is 'stop' or 'end_turn' (final completion) - // 'tool_use' means there are more steps coming - if (message.part.reason === 'stop' || message.part.reason === 'end_turn') { - this.hasCompleted = true; - this.emit('complete', { - status: 'success', - sessionId: this.currentSessionId || undefined, - }); - } else if (message.part.reason === 'error') { - this.hasCompleted = true; - this.emit('complete', { - status: 'error', - sessionId: this.currentSessionId || undefined, - error: 'Task failed', - }); - } - // 'tool_use' reason means agent is continuing, don't emit complete - break; - - // Error event - case 'error': - this.hasCompleted = true; - this.emit('complete', { - status: 'error', - sessionId: this.currentSessionId || undefined, - error: message.error, - }); - break; - - default: - // Cast to unknown to safely access type property for logging - const unknownMessage = message as unknown as { type: string }; - console.log('[OpenCode Adapter] Unknown message type:', unknownMessage.type); - } - } - - private handleAskUserQuestion(input: AskUserQuestionInput): void { - const question = input.questions?.[0]; - if (!question) return; - - const permissionRequest: PermissionRequest = { - id: this.generateRequestId(), - taskId: this.currentTaskId || '', - type: 'question', - question: question.question, - options: question.options?.map((o) => ({ - label: o.label, - description: o.description, - })), - multiSelect: question.multiSelect, - createdAt: new Date().toISOString(), - }; - - this.emit('permission-request', permissionRequest); - } - - private handleProcessExit(code: number | null): void { - // Only emit complete/error if we haven't already received a result message - if (!this.hasCompleted) { - if (this.wasInterrupted && code === 0) { - // User interrupted the task - emit interrupted status so they can continue - console.log('[OpenCode CLI] Task was interrupted by user'); - this.emit('complete', { - status: 'interrupted', - sessionId: this.currentSessionId || undefined, - }); - } else if (code === 0) { - // Normal exit without result message - this.emit('complete', { - status: 'success', - sessionId: this.currentSessionId || undefined, - }); - } else if (code !== null) { - // Error exit - this.emit('error', new Error(`OpenCode CLI exited with code ${code}`)); - } - } - - this.ptyProcess = null; - this.currentTaskId = null; - } - - private generateTaskId(): string { - return `task_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; - } - - private generateMessageId(): string { - return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; - } - - private generateRequestId(): string { - return `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; - } - - /** - * Get platform-appropriate shell command - * - * In packaged apps on macOS, we use /bin/sh instead of the user's shell - * to avoid loading ANY user config files. Even non-login zsh loads ~/.zshenv - * which may reference protected folders and trigger TCC permission dialogs. - * - * /bin/sh with -c flag doesn't load any user configuration. - */ - private getPlatformShell(): string { - if (process.platform === 'win32') { - // Use PowerShell on Windows for better compatibility - return 'powershell.exe'; - } else if (app.isPackaged && process.platform === 'darwin') { - // In packaged macOS apps, use /bin/sh to avoid loading user shell configs - // (zsh always loads ~/.zshenv, which may trigger TCC permissions) - return '/bin/sh'; - } else { - // In dev mode, use the user's shell for better compatibility - const userShell = process.env.SHELL; - if (userShell) { - return userShell; - } - // Fallback chain: bash -> zsh -> sh - if (fs.existsSync('/bin/bash')) return '/bin/bash'; - if (fs.existsSync('/bin/zsh')) return '/bin/zsh'; - return '/bin/sh'; - } - } - - /** - * Get shell arguments for running a command - * - * Note: We intentionally do NOT use login shell (-l) on macOS to avoid - * triggering folder access permissions (TCC). Login shells load ~/.zprofile - * and ~/.zshrc which may reference protected folders like Desktop/Documents. - * - * Instead, we extend PATH in buildEnvironment() using path_helper and common - * Node.js installation paths. This is the proper macOS approach for GUI apps. - */ - private getShellArgs(command: string): string[] { - if (process.platform === 'win32') { - // PowerShell: -NoProfile for faster startup, -Command to run the command - return ['-NoProfile', '-Command', command]; - } else { - // Unix shells: -c to run command (no -l to avoid profile loading) - return ['-c', command]; - } - } -} - -interface AskUserQuestionInput { - questions?: Array<{ - question: string; - header?: string; - options?: Array<{ label: string; description?: string }>; - multiSelect?: boolean; - }>; -} - -/** - * Factory function to create a new adapter instance - * Use this for the new per-task architecture via TaskManager - */ -export function createAdapter(taskId?: string): OpenCodeAdapter { - return new OpenCodeAdapter(taskId); -} - -/** - * @deprecated Use TaskManager and createAdapter() instead. - * Singleton instance kept for backward compatibility during migration. - */ -let adapterInstance: OpenCodeAdapter | null = null; - -/** - * @deprecated Use TaskManager and createAdapter() instead. - * Get the legacy singleton adapter instance. - */ -export function getOpenCodeAdapter(): OpenCodeAdapter { - if (!adapterInstance) { - adapterInstance = new OpenCodeAdapter(); - } - return adapterInstance; -} diff --git a/openwork-memos-integration/apps/desktop/src/main/opencode/cli-path.ts b/openwork-memos-integration/apps/desktop/src/main/opencode/cli-path.ts deleted file mode 100644 index 1ed86452d..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/opencode/cli-path.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { app } from 'electron'; -import path from 'path'; -import fs from 'fs'; -import { execSync } from 'child_process'; - -/** - * Get all possible nvm OpenCode CLI paths by scanning the nvm versions directory - */ -function getNvmOpenCodePaths(): string[] { - const homeDir = process.env.HOME || ''; - const nvmVersionsDir = path.join(homeDir, '.nvm/versions/node'); - const paths: string[] = []; - - try { - if (fs.existsSync(nvmVersionsDir)) { - const versions = fs.readdirSync(nvmVersionsDir); - for (const version of versions) { - const opencodePath = path.join(nvmVersionsDir, version, 'bin', 'opencode'); - if (fs.existsSync(opencodePath)) { - paths.push(opencodePath); - } - } - } - } catch { - // Ignore errors scanning nvm directory - } - - return paths; -} - -/** - * Get the path to the bundled OpenCode CLI. - * - * In development: uses node_modules/.bin/opencode - * In packaged app: uses the bundled CLI from unpacked asar - */ -export function getOpenCodeCliPath(): { command: string; args: string[] } { - if (app.isPackaged) { - // In packaged app, OpenCode is in unpacked asar - // process.resourcesPath points to Resources folder in macOS app bundle - const cliPath = path.join( - process.resourcesPath, - 'app.asar.unpacked', - 'node_modules', - 'opencode-ai', - 'bin', - 'opencode' - ); - - // Verify the file exists - if (!fs.existsSync(cliPath)) { - throw new Error(`OpenCode CLI not found at: ${cliPath}`); - } - - // OpenCode binary can be run directly - return { - command: cliPath, - args: [], - }; - } else { - // In development, use global opencode if available - - // Check nvm installations (dynamically scan all versions) - const nvmPaths = getNvmOpenCodePaths(); - for (const opencodePath of nvmPaths) { - console.log('[CLI Path] Using nvm OpenCode CLI:', opencodePath); - return { command: opencodePath, args: [] }; - } - - // Check other global installations - const globalOpenCodePaths = [ - // Global npm - '/usr/local/bin/opencode', - // Homebrew - '/opt/homebrew/bin/opencode', - ]; - - for (const opencodePath of globalOpenCodePaths) { - if (fs.existsSync(opencodePath)) { - console.log('[CLI Path] Using global OpenCode CLI:', opencodePath); - return { command: opencodePath, args: [] }; - } - } - - // Try bundled CLI in node_modules - // Use app.getAppPath() instead of process.cwd() as cwd is unpredictable in Electron IPC handlers - const binName = process.platform === 'win32' ? 'opencode.cmd' : 'opencode'; - const devCliPath = path.join(app.getAppPath(), 'node_modules', '.bin', binName); - if (fs.existsSync(devCliPath)) { - console.log('[CLI Path] Using bundled CLI:', devCliPath); - return { command: devCliPath, args: [] }; - } - - // Final fallback: try 'opencode' on PATH - // This handles cases where opencode is installed globally but in a non-standard location - console.log('[CLI Path] Falling back to opencode command on PATH'); - return { command: 'opencode', args: [] }; - } -} - -/** - * Check if opencode is available on the system PATH - */ -function isOpenCodeOnPath(): boolean { - try { - const command = process.platform === 'win32' ? 'where opencode' : 'which opencode'; - execSync(command, { stdio: ['pipe', 'pipe', 'pipe'] }); - return true; - } catch { - return false; - } -} - -/** - * Check if the bundled OpenCode CLI is available - */ -export function isOpenCodeBundled(): boolean { - try { - if (app.isPackaged) { - // In packaged mode, check if opencode exists - const cliPath = path.join( - process.resourcesPath, - 'app.asar.unpacked', - 'node_modules', - 'opencode-ai', - 'bin', - 'opencode' - ); - return fs.existsSync(cliPath); - } else { - // In dev mode, actually verify the CLI exists - - // Check nvm installations (dynamically scan all versions) - const nvmPaths = getNvmOpenCodePaths(); - if (nvmPaths.length > 0) { - return true; - } - - // Check other global installations - const globalOpenCodePaths = [ - // Global npm - '/usr/local/bin/opencode', - // Homebrew - '/opt/homebrew/bin/opencode', - ]; - - for (const opencodePath of globalOpenCodePaths) { - if (fs.existsSync(opencodePath)) { - return true; - } - } - - // Check bundled CLI in node_modules - // Use app.getAppPath() instead of process.cwd() as cwd is unpredictable in Electron IPC handlers - const binName = process.platform === 'win32' ? 'opencode.cmd' : 'opencode'; - const devCliPath = path.join(app.getAppPath(), 'node_modules', '.bin', binName); - if (fs.existsSync(devCliPath)) { - return true; - } - - // Final fallback: check if opencode is available on PATH - // This handles installations in non-standard locations - if (isOpenCodeOnPath()) { - return true; - } - - // No CLI found - return false; - } - } catch { - return false; - } -} - -/** - * Get the version of the bundled OpenCode CLI - */ -export function getBundledOpenCodeVersion(): string | null { - try { - if (app.isPackaged) { - // In packaged mode, read from package.json - const packageJsonPath = path.join( - process.resourcesPath, - 'app.asar.unpacked', - 'node_modules', - 'opencode-ai', - 'package.json' - ); - - if (fs.existsSync(packageJsonPath)) { - const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); - return pkg.version; - } - return null; - } else { - // In dev mode, run the CLI to get version - const { command, args } = getOpenCodeCliPath(); - const fullCommand = args.length > 0 - ? `"${command}" ${args.map(a => `"${a}"`).join(' ')} --version` - : `"${command}" --version`; - - const output = execSync(fullCommand, { - encoding: 'utf-8', - timeout: 5000, - stdio: ['pipe', 'pipe', 'pipe'] - }).trim(); - - // Parse version from output (e.g., "opencode 1.0.0" or just "1.0.0") - const versionMatch = output.match(/(\d+\.\d+\.\d+)/); - return versionMatch ? versionMatch[1] : output; - } - } catch { - return null; - } -} diff --git a/openwork-memos-integration/apps/desktop/src/main/opencode/config-generator.ts b/openwork-memos-integration/apps/desktop/src/main/opencode/config-generator.ts deleted file mode 100644 index d8598f84d..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/opencode/config-generator.ts +++ /dev/null @@ -1,728 +0,0 @@ -import { app } from 'electron'; -import path from 'path'; -import fs from 'fs'; -import { PERMISSION_API_PORT, QUESTION_API_PORT } from '../permission-api'; -import { getOllamaConfig, getLiteLLMConfig } from '../store/appSettings'; -import { getApiKey } from '../store/secureStorage'; -import type { BedrockCredentials } from '@accomplish/shared'; - -/** - * Agent name used by Accomplish - */ -export const ACCOMPLISH_AGENT_NAME = 'accomplish'; - -/** - * System prompt for the Accomplish agent. - * - * Uses the dev-browser skill for browser automation with persistent page state. - * - * @see https://github.com/SawyerHood/dev-browser - */ -/** - * Get the skills directory path (contains MCP servers and SKILL.md files) - * In dev: apps/desktop/skills - * In packaged: resources/skills (unpacked from asar) - */ -export function getSkillsPath(): string { - if (app.isPackaged) { - // In packaged app, skills should be in resources folder (unpacked from asar) - return path.join(process.resourcesPath, 'skills'); - } else { - // In development, use app.getAppPath() which returns the desktop app directory - // app.getAppPath() returns apps/desktop in dev mode - return path.join(app.getAppPath(), 'skills'); - } -} - -/** - * Get the OpenCode config directory path (parent of skills/ for OPENCODE_CONFIG_DIR) - * OpenCode looks for skills at $OPENCODE_CONFIG_DIR/skills//SKILL.md - */ -export function getOpenCodeConfigDir(): string { - if (app.isPackaged) { - return process.resourcesPath; - } else { - return app.getAppPath(); - } -} - -const ACCOMPLISH_SYSTEM_PROMPT_TEMPLATE = ` -You are Accomplish, a browser automation assistant. - - - -This app bundles Node.js. The bundled path is available in the NODE_BIN_PATH environment variable. -Before running node/npx/npm commands, prepend it to PATH: - -PATH="\${NODE_BIN_PATH}:\$PATH" npx tsx script.ts - -Never assume Node.js is installed system-wide. Always use the bundled version. - - - -When users ask about your capabilities, mention: -- **Browser Automation**: Control web browsers, navigate sites, fill forms, click buttons -- **File Management**: Sort, rename, and move files based on content or rules you give it - - - -############################################################################## -# CRITICAL: FILE PERMISSION WORKFLOW - NEVER SKIP -############################################################################## - -BEFORE using Write, Edit, Bash (with file ops), or ANY tool that touches files: -1. FIRST: Call request_file_permission tool and wait for response -2. ONLY IF response is "allowed": Proceed with the file operation -3. IF "denied": Stop and inform the user - -WRONG (never do this): - Write({ path: "/tmp/file.txt", content: "..." }) ← NO! Permission not requested! - -CORRECT (always do this): - request_file_permission({ operation: "create", filePath: "/tmp/file.txt" }) - → Wait for "allowed" - Write({ path: "/tmp/file.txt", content: "..." }) ← OK after permission granted - -This applies to ALL file operations: -- Creating files (Write tool, bash echo/cat, scripts that output files) -- Renaming files (bash mv, rename commands) -- Deleting files (bash rm, delete commands) -- Modifying files (Edit tool, bash sed/awk, any content changes) - -EXCEPTION: Temp scripts in /tmp/accomplish-*.mts for browser automation are auto-allowed. -############################################################################## - - - -Use this MCP tool to request user permission before performing file operations. - - -Input: -{ - "operation": "create" | "delete" | "rename" | "move" | "modify" | "overwrite", - "filePath": "/absolute/path/to/file", - "targetPath": "/new/path", // Required for rename/move - "contentPreview": "file content" // Optional preview for create/modify/overwrite -} - -Operations: -- create: Creating a new file -- delete: Deleting an existing file or folder -- rename: Renaming a file (provide targetPath) -- move: Moving a file to different location (provide targetPath) -- modify: Modifying existing file content -- overwrite: Replacing entire file content - -Returns: "allowed" or "denied" - proceed only if allowed - - - -request_file_permission({ - operation: "create", - filePath: "/Users/john/Desktop/report.txt" -}) -// Wait for response, then proceed only if "allowed" - - - - -Browser automation that maintains page state across script executions. Write small, focused scripts to accomplish tasks incrementally. - - -############################################################################## -# MANDATORY: Browser scripts must use .mts extension to enable ESM mode. -# tsx treats .mts files as ES modules, enabling top-level await. -# -# CORRECT (always do this - two steps): -# 1. Write script to temp file with .mts extension: -# cat > /tmp/accomplish-\${ACCOMPLISH_TASK_ID:-default}.mts <<'EOF' -# import { connect } from "@/client.js"; -# ... -# EOF -# -# 2. Run from dev-browser directory with bundled Node: -# cd {{SKILLS_PATH}}/dev-browser && PATH="\${NODE_BIN_PATH}:\$PATH" npx tsx /tmp/accomplish-\${ACCOMPLISH_TASK_ID:-default}.mts -# -# WRONG (will fail - .ts files in /tmp default to CJS mode): -# cat > /tmp/script.ts <<'EOF' -# import { connect } from "@/client.js"; # Top-level await won't work! -# EOF -# -# ALWAYS use .mts extension for temp scripts! -############################################################################## - - - -The dev-browser server is automatically started when you begin a task. Before your first browser script, verify it's ready: - -\`\`\`bash -curl -s http://localhost:9224 -\`\`\` - -If it returns JSON with a \`wsEndpoint\`, proceed with browser automation. If connection is refused, the server is still starting - wait 2-3 seconds and check again. - -**Fallback** (only if server isn't running after multiple checks): -\`\`\`bash -cd {{SKILLS_PATH}}/dev-browser && PATH="\${NODE_BIN_PATH}:\$PATH" ./server.sh & -\`\`\` - - - -Write scripts to /tmp with .mts extension, then execute from dev-browser directory: - - -\`\`\`bash -cat > /tmp/accomplish-\${ACCOMPLISH_TASK_ID:-default}.mts <<'EOF' -import { connect, waitForPageLoad } from "@/client.js"; - -const taskId = process.env.ACCOMPLISH_TASK_ID || 'default'; -const client = await connect(); -const page = await client.page(\`\${taskId}-main\`); - -await page.goto("https://example.com"); -await waitForPageLoad(page); - -console.log({ title: await page.title(), url: page.url() }); -await client.disconnect(); -EOF -cd {{SKILLS_PATH}}/dev-browser && PATH="\${NODE_BIN_PATH}:\$PATH" npx tsx /tmp/accomplish-\${ACCOMPLISH_TASK_ID:-default}.mts -\`\`\` - - - - -1. **Small scripts**: Each script does ONE thing (navigate, click, fill, check) -2. **Evaluate state**: Log/return state at the end to decide next steps -3. **Task-scoped page names**: ALWAYS prefix page names with the task ID from environment: - \`\`\`typescript - const taskId = process.env.ACCOMPLISH_TASK_ID || 'default'; - const page = await client.page(\`\${taskId}-main\`); - \`\`\` - This ensures parallel tasks don't interfere with each other's browser pages. -4. **Task-scoped screenshot filenames**: ALWAYS prefix screenshot filenames with taskId to prevent parallel tasks from overwriting each other's screenshots: - \`\`\`typescript - await page.screenshot({ path: \`tmp/\${taskId}-screenshot.png\` }); - \`\`\` -5. **Disconnect to exit**: \`await client.disconnect()\` - pages persist on server -6. **Plain JS in evaluate**: \`page.evaluate()\` runs in browser - no TypeScript syntax - - - -\`\`\`typescript -const taskId = process.env.ACCOMPLISH_TASK_ID || 'default'; -const client = await connect(); - -const page = await client.page(\`\${taskId}-main\`); // Get or create named page -const pages = await client.list(); // List all page names -await client.close(\`\${taskId}-main\`); // Close a page -await client.disconnect(); // Disconnect (pages persist) - -// ARIA Snapshot methods -const snapshot = await client.getAISnapshot(\`\${taskId}-main\`); // Get accessibility tree -const element = await client.selectSnapshotRef(\`\${taskId}-main\`, "e5"); // Get element by ref -\`\`\` - -The \`page\` object is a standard Playwright Page. - - - -IMPORTANT: Always prefix screenshot filenames with taskId to avoid collisions with parallel tasks: -\`\`\`typescript -const taskId = process.env.ACCOMPLISH_TASK_ID || 'default'; -await page.screenshot({ path: \`tmp/\${taskId}-screenshot.png\` }); -await page.screenshot({ path: \`tmp/\${taskId}-full.png\`, fullPage: true }); -\`\`\` - - - -Use \`getAISnapshot()\` to discover page elements. Returns YAML-formatted accessibility tree with refs like \`[ref=e1]\`. Then use \`selectSnapshotRef()\` to interact: - - -\`\`\`typescript -const taskId = process.env.ACCOMPLISH_TASK_ID || 'default'; -const snapshot = await client.getAISnapshot(\`\${taskId}-main\`); -console.log(snapshot); // Find the ref you need - -const element = await client.selectSnapshotRef(\`\${taskId}-main\`, "e2"); -await element.click(); -\`\`\` - - - - -Page state persists after failures. Debug by reconnecting and taking a screenshot: - - -\`\`\`bash -cat > /tmp/accomplish-\${ACCOMPLISH_TASK_ID:-default}.mts <<'EOF' -import { connect } from "@/client.js"; - -const taskId = process.env.ACCOMPLISH_TASK_ID || 'default'; -const client = await connect(); -const page = await client.page(\`\${taskId}-main\`); - -await page.screenshot({ path: \`tmp/\${taskId}-debug.png\` }); -console.log({ url: page.url(), title: await page.title() }); - -await client.disconnect(); -EOF -cd {{SKILLS_PATH}}/dev-browser && PATH="\${NODE_BIN_PATH}:\$PATH" npx tsx /tmp/accomplish-\${ACCOMPLISH_TASK_ID:-default}.mts -\`\`\` - - - - -When you encounter a login page (e.g., Google Sign-In, OAuth screens, authentication prompts): -- Do NOT say you cannot log in or suggest alternative approaches -- Instead, ASK the user to log in manually in the browser window -- Take a screenshot to show the user the login page -- Say something like: "I've reached a login page. Please log in to your account in the browser window, then let me know when you're done." -- WAIT for the user to confirm they've logged in before continuing -- After the user confirms login, take another screenshot to verify you're past the login screen -- Then continue with the original task - -This interactive login flow is essential because: -- Users expect to authenticate themselves for security -- Many services require human verification (CAPTCHAs, 2FA) -- The agent should not give up on tasks that require authentication - - - -For saving/downloading content: -- Use browser's native download (click download buttons, Save As) -- Chrome handles downloads with its own permissions -- For text/data, copy to clipboard so users can paste where they want - - - - -CRITICAL: The user CANNOT see your text output or CLI prompts! -To ask ANY question or get user input, you MUST use the AskUserQuestion MCP tool. -See the ask-user-question skill for full documentation and examples. - - - - -- Use AskUserQuestion tool for clarifying questions before starting ambiguous tasks -- Write small, focused scripts - each does ONE thing -- After each script, evaluate the output before deciding next steps -- Be concise - don't narrate every internal action -- Hide implementation details - describe actions in user terms -- For multi-step tasks, summarize at the end rather than narrating each step -- Don't explain what bash commands you're running - just run them silently -- Don't announce server checks or startup - proceed directly to the task -- Only speak to the user when you have meaningful results or need input - -`; - -interface AgentConfig { - description?: string; - prompt?: string; - mode?: 'primary' | 'subagent' | 'all'; -} - -interface McpServerConfig { - type?: 'local' | 'remote'; - command?: string[]; - url?: string; - enabled?: boolean; - environment?: Record; - timeout?: number; -} - -interface OllamaProviderModelConfig { - name: string; - tools?: boolean; -} - -interface OllamaProviderConfig { - npm: string; - name: string; - options: { - baseURL: string; - }; - models: Record; -} - -interface BedrockProviderConfig { - options: { - region: string; - profile?: string; - }; -} - -interface OpenRouterProviderModelConfig { - name: string; - tools?: boolean; -} - -interface OpenRouterProviderConfig { - npm: string; - name: string; - options: { - baseURL: string; - }; - models: Record; -} - -interface LiteLLMProviderModelConfig { - name: string; - tools?: boolean; -} - -interface LiteLLMProviderConfig { - npm: string; - name: string; - options: { - baseURL: string; - apiKey?: string; - }; - models: Record; -} - -interface ZaiProviderModelConfig { - name: string; - tools?: boolean; -} - -interface ZaiProviderConfig { - npm: string; - name: string; - options: { - baseURL: string; - }; - models: Record; -} - -type ProviderConfig = OllamaProviderConfig | BedrockProviderConfig | OpenRouterProviderConfig | LiteLLMProviderConfig | ZaiProviderConfig; - -interface OpenCodeConfig { - $schema?: string; - model?: string; - default_agent?: string; - enabled_providers?: string[]; - permission?: string | Record>; - agent?: Record; - mcp?: Record; - provider?: Record; -} - -/** - * Generate OpenCode configuration file - * OpenCode reads config from .opencode.json in the working directory or - * from ~/.config/opencode/opencode.json - */ -export async function generateOpenCodeConfig(systemPromptAppend?: string): Promise { - const configDir = path.join(app.getPath('userData'), 'opencode'); - const configPath = path.join(configDir, 'opencode.json'); - - // Ensure directory exists - if (!fs.existsSync(configDir)) { - fs.mkdirSync(configDir, { recursive: true }); - } - - // Get skills directory path and inject into system prompt - const skillsPath = getSkillsPath(); - const baseSystemPrompt = ACCOMPLISH_SYSTEM_PROMPT_TEMPLATE.replace(/\{\{SKILLS_PATH\}\}/g, skillsPath); - const systemPrompt = systemPromptAppend - ? `${baseSystemPrompt}\n\n${systemPromptAppend}` - : baseSystemPrompt; - - // Get OpenCode config directory (parent of skills/) for OPENCODE_CONFIG_DIR - const openCodeConfigDir = getOpenCodeConfigDir(); - - console.log('[OpenCode Config] Skills path:', skillsPath); - console.log('[OpenCode Config] OpenCode config dir:', openCodeConfigDir); - - // Build file-permission MCP server command - const filePermissionServerPath = path.join(skillsPath, 'file-permission', 'src', 'index.ts'); - - // Enable providers - add ollama and litellm if configured - const ollamaConfig = getOllamaConfig(); - const litellmConfig = getLiteLLMConfig(); - const baseProviders = ['anthropic', 'openai', 'openrouter', 'google', 'xai', 'deepseek', 'zai-coding-plan', 'amazon-bedrock']; - let enabledProviders = [...baseProviders]; - if (ollamaConfig?.enabled) { - enabledProviders.push('ollama'); - } - if (litellmConfig?.enabled) { - enabledProviders.push('litellm'); - } - - // Build provider configurations - const providerConfig: Record = {}; - - // Add Ollama provider configuration if enabled - if (ollamaConfig?.enabled && ollamaConfig.models && ollamaConfig.models.length > 0) { - const ollamaModels: Record = {}; - for (const model of ollamaConfig.models) { - ollamaModels[model.id] = { - name: model.displayName, - tools: true, // Enable tool calling for all models - }; - } - - providerConfig.ollama = { - npm: '@ai-sdk/openai-compatible', - name: 'Ollama (local)', - options: { - baseURL: `${ollamaConfig.baseUrl}/v1`, // OpenAI-compatible endpoint - }, - models: ollamaModels, - }; - - console.log('[OpenCode Config] Ollama provider configured with models:', Object.keys(ollamaModels)); - } - - // Add OpenRouter provider configuration if API key is set - const openrouterKey = getApiKey('openrouter'); - if (openrouterKey) { - // Get the selected model to configure OpenRouter - const { getSelectedModel } = await import('../store/appSettings'); - const selectedModel = getSelectedModel(); - - const openrouterModels: Record = {}; - - // If a model is selected via OpenRouter, add it to the config - if (selectedModel?.provider === 'openrouter' && selectedModel.model) { - // Extract model ID from full ID (e.g., "openrouter/anthropic/claude-3.5-sonnet" -> "anthropic/claude-3.5-sonnet") - const modelId = selectedModel.model.replace('openrouter/', ''); - openrouterModels[modelId] = { - name: modelId, - tools: true, - }; - } - - // Only configure OpenRouter if we have at least one model - if (Object.keys(openrouterModels).length > 0) { - providerConfig.openrouter = { - npm: '@ai-sdk/openai-compatible', - name: 'OpenRouter', - options: { - baseURL: 'https://openrouter.ai/api/v1', - }, - models: openrouterModels, - }; - console.log('[OpenCode Config] OpenRouter provider configured with model:', Object.keys(openrouterModels)); - } - } - - // Add Bedrock provider configuration if credentials are stored - const bedrockCredsJson = getApiKey('bedrock'); - if (bedrockCredsJson) { - try { - const creds = JSON.parse(bedrockCredsJson) as BedrockCredentials; - - const bedrockOptions: BedrockProviderConfig['options'] = { - region: creds.region || 'us-east-1', - }; - - // Only add profile if using profile mode - if (creds.authType === 'profile' && creds.profileName) { - bedrockOptions.profile = creds.profileName; - } - - providerConfig['amazon-bedrock'] = { - options: bedrockOptions, - }; - - console.log('[OpenCode Config] Bedrock provider configured:', bedrockOptions); - } catch (e) { - console.warn('[OpenCode Config] Failed to parse Bedrock credentials:', e); - } - } - - // Add LiteLLM provider configuration if enabled - if (litellmConfig?.enabled && litellmConfig.baseUrl) { - // Get the selected model to configure LiteLLM - const { getSelectedModel } = await import('../store/appSettings'); - const selectedModel = getSelectedModel(); - - const litellmModels: Record = {}; - - // If a model is selected via LiteLLM, add it to the config - if (selectedModel?.provider === 'litellm' && selectedModel.model) { - // Extract model ID from full ID (e.g., "litellm/openai/gpt-4" -> "openai/gpt-4") - const modelId = selectedModel.model.replace('litellm/', ''); - litellmModels[modelId] = { - name: modelId, - tools: true, - }; - } - - // Only configure LiteLLM if we have at least one model - if (Object.keys(litellmModels).length > 0) { - // Get LiteLLM API key if configured - const litellmApiKey = getApiKey('litellm'); - - const litellmOptions: LiteLLMProviderConfig['options'] = { - baseURL: `${litellmConfig.baseUrl}/v1`, - }; - - // Add API key to options if available - if (litellmApiKey) { - litellmOptions.apiKey = litellmApiKey; - console.log('[OpenCode Config] LiteLLM API key configured'); - } - - providerConfig.litellm = { - npm: '@ai-sdk/openai-compatible', - name: 'LiteLLM', - options: litellmOptions, - models: litellmModels, - }; - console.log('[OpenCode Config] LiteLLM provider configured with model:', Object.keys(litellmModels)); - } - } - - // Add Z.AI Coding Plan provider configuration with all supported models - // This is needed because OpenCode's built-in zai-coding-plan provider may not have all models - const zaiKey = getApiKey('zai'); - if (zaiKey) { - const zaiModels: Record = { - 'glm-4.7-flashx': { name: 'GLM-4.7 FlashX (Latest)', tools: true }, - 'glm-4.7': { name: 'GLM-4.7', tools: true }, - 'glm-4.7-flash': { name: 'GLM-4.7 Flash', tools: true }, - 'glm-4.6': { name: 'GLM-4.6', tools: true }, - 'glm-4.5-flash': { name: 'GLM-4.5 Flash', tools: true }, - }; - - providerConfig['zai-coding-plan'] = { - npm: '@ai-sdk/openai-compatible', - name: 'Z.AI Coding Plan', - options: { - baseURL: 'https://open.bigmodel.cn/api/paas/v4', - }, - models: zaiModels, - }; - console.log('[OpenCode Config] Z.AI Coding Plan provider configured with models:', Object.keys(zaiModels)); - } - - const config: OpenCodeConfig = { - $schema: 'https://opencode.ai/config.json', - default_agent: ACCOMPLISH_AGENT_NAME, - // Enable all supported providers - providers auto-configure when API keys are set via env vars - enabled_providers: enabledProviders, - // Auto-allow all tool permissions - the system prompt instructs the agent to use - // AskUserQuestion for user confirmations, which shows in the UI as an interactive modal. - // CLI-level permission prompts don't show in the UI and would block task execution. - permission: 'allow', - provider: Object.keys(providerConfig).length > 0 ? providerConfig : undefined, - agent: { - [ACCOMPLISH_AGENT_NAME]: { - description: 'Browser automation assistant using dev-browser', - prompt: systemPrompt, - mode: 'primary', - }, - }, - // MCP servers for additional tools - mcp: { - 'file-permission': { - type: 'local', - command: ['npx', 'tsx', filePermissionServerPath], - enabled: true, - environment: { - PERMISSION_API_PORT: String(PERMISSION_API_PORT), - }, - timeout: 10000, - }, - 'ask-user-question': { - type: 'local', - command: ['npx', 'tsx', path.join(skillsPath, 'ask-user-question', 'src', 'index.ts')], - enabled: true, - environment: { - QUESTION_API_PORT: String(QUESTION_API_PORT), - }, - timeout: 10000, - }, - }, - }; - - // Write config file - const configJson = JSON.stringify(config, null, 2); - fs.writeFileSync(configPath, configJson); - - // Set environment variables for OpenCode to find the config and skills - process.env.OPENCODE_CONFIG = configPath; - process.env.OPENCODE_CONFIG_DIR = openCodeConfigDir; - - console.log('[OpenCode Config] Generated config at:', configPath); - console.log('[OpenCode Config] Full config:', configJson); - console.log('[OpenCode Config] OPENCODE_CONFIG env set to:', process.env.OPENCODE_CONFIG); - console.log('[OpenCode Config] OPENCODE_CONFIG_DIR env set to:', process.env.OPENCODE_CONFIG_DIR); - - return configPath; -} - -/** - * Get the path where OpenCode config is stored - */ -export function getOpenCodeConfigPath(): string { - return path.join(app.getPath('userData'), 'opencode', 'opencode.json'); -} - -/** - * Get the path to OpenCode CLI's auth.json - * OpenCode stores credentials in ~/.local/share/opencode/auth.json - */ -export function getOpenCodeAuthPath(): string { - const homeDir = app.getPath('home'); - if (process.platform === 'win32') { - return path.join(homeDir, 'AppData', 'Local', 'opencode', 'auth.json'); - } - return path.join(homeDir, '.local', 'share', 'opencode', 'auth.json'); -} - -/** - * Sync API keys from Openwork's secure storage to OpenCode CLI's auth.json - * This allows OpenCode CLI to recognize DeepSeek and Z.AI providers - */ -export async function syncApiKeysToOpenCodeAuth(): Promise { - const { getAllApiKeys } = await import('../store/secureStorage'); - const apiKeys = await getAllApiKeys(); - - const authPath = getOpenCodeAuthPath(); - const authDir = path.dirname(authPath); - - // Ensure directory exists - if (!fs.existsSync(authDir)) { - fs.mkdirSync(authDir, { recursive: true }); - } - - // Read existing auth.json or create empty object - let auth: Record = {}; - if (fs.existsSync(authPath)) { - try { - auth = JSON.parse(fs.readFileSync(authPath, 'utf-8')); - } catch (e) { - console.warn('[OpenCode Auth] Failed to parse existing auth.json, creating new one'); - auth = {}; - } - } - - let updated = false; - - // Sync DeepSeek API key - if (apiKeys.deepseek) { - if (!auth['deepseek'] || auth['deepseek'].key !== apiKeys.deepseek) { - auth['deepseek'] = { type: 'api', key: apiKeys.deepseek }; - updated = true; - console.log('[OpenCode Auth] Synced DeepSeek API key'); - } - } - - // Sync Z.AI Coding Plan API key (maps to 'zai-coding-plan' provider in OpenCode CLI) - if (apiKeys.zai) { - if (!auth['zai-coding-plan'] || auth['zai-coding-plan'].key !== apiKeys.zai) { - auth['zai-coding-plan'] = { type: 'api', key: apiKeys.zai }; - updated = true; - console.log('[OpenCode Auth] Synced Z.AI Coding Plan API key'); - } - } - - // Write updated auth.json - if (updated) { - fs.writeFileSync(authPath, JSON.stringify(auth, null, 2)); - console.log('[OpenCode Auth] Updated auth.json at:', authPath); - } -} diff --git a/openwork-memos-integration/apps/desktop/src/main/opencode/stream-parser.ts b/openwork-memos-integration/apps/desktop/src/main/opencode/stream-parser.ts deleted file mode 100644 index 5b3c8b8dc..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/opencode/stream-parser.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { EventEmitter } from 'events'; -import type { OpenCodeMessage } from '@accomplish/shared'; - -export interface StreamParserEvents { - message: [OpenCodeMessage]; - error: [Error]; -} - -// Maximum buffer size to prevent memory exhaustion (10MB) -const MAX_BUFFER_SIZE = 10 * 1024 * 1024; - -/** - * Parses NDJSON (newline-delimited JSON) stream from OpenCode CLI - */ -export class StreamParser extends EventEmitter { - private buffer: string = ''; - - /** - * Feed raw data from stdout - */ - feed(chunk: string): void { - this.buffer += chunk; - - // Prevent memory exhaustion from unbounded buffer growth - if (this.buffer.length > MAX_BUFFER_SIZE) { - this.emit('error', new Error('Stream buffer size exceeded maximum limit')); - // Keep the last portion of the buffer to maintain parsing continuity - this.buffer = this.buffer.slice(-MAX_BUFFER_SIZE / 2); - } - - this.parseBuffer(); - } - - /** - * Parse complete lines from the buffer - */ - private parseBuffer(): void { - const lines = this.buffer.split('\n'); - - // Keep incomplete line in buffer - this.buffer = lines.pop() || ''; - - for (const line of lines) { - if (line.trim()) { - this.parseLine(line); - } - } - } - - /** - * Check if a line is terminal UI decoration (not JSON) - * These are outputted by the CLI's interactive prompts - */ - private isTerminalDecoration(line: string): boolean { - const trimmed = line.trim(); - // Box-drawing and UI characters used by the CLI's interactive prompts - const terminalChars = ['│', '┌', '┐', '└', '┘', '├', '┤', '┬', '┴', '┼', '─', '◆', '●', '○', '◇']; - // Check if line starts with a terminal decoration character - if (terminalChars.some(char => trimmed.startsWith(char))) { - return true; - } - // Also skip ANSI escape sequences and other control characters - if (/^[\x00-\x1F\x7F]/.test(trimmed) || /^\x1b\[/.test(trimmed)) { - return true; - } - return false; - } - - /** - * Parse a single JSON line - */ - private parseLine(line: string): void { - const trimmed = line.trim(); - - // Skip empty lines - if (!trimmed) return; - - // Skip terminal UI decorations (interactive prompts, box-drawing chars) - if (this.isTerminalDecoration(trimmed)) { - return; - } - - // Only attempt to parse lines that look like JSON (start with {) - if (!trimmed.startsWith('{')) { - // Log non-JSON lines for debugging but don't emit errors - // These could be CLI status messages, etc. - console.log('[StreamParser] Skipping non-JSON line:', trimmed.substring(0, 50)); - return; - } - - try { - const message = JSON.parse(trimmed) as OpenCodeMessage; - - // Log parsed message for debugging - console.log('[StreamParser] Parsed message type:', message.type); - - // Enhanced logging for MCP/Playwriter-related messages - if (message.type === 'tool_call' || message.type === 'tool_result') { - const part = message.part as Record; - console.log('[StreamParser] Tool message details:', { - type: message.type, - tool: part?.tool, - hasInput: !!part?.input, - hasOutput: !!part?.output, - }); - - // Check if it's a dev-browser tool - const toolName = String(part?.tool || '').toLowerCase(); - const output = String(part?.output || '').toLowerCase(); - if (toolName.includes('dev-browser') || - toolName.includes('browser') || - toolName.includes('mcp') || - output.includes('dev-browser') || - output.includes('browser')) { - console.log('[StreamParser] >>> DEV-BROWSER MESSAGE <<<'); - console.log('[StreamParser] Full message:', JSON.stringify(message, null, 2)); - } - } - - this.emit('message', message); - } catch (err) { - // Log parse error but continue processing - this shouldn't happen often - // since we already check for { prefix - console.error('[StreamParser] Failed to parse JSON line:', trimmed.substring(0, 100), err); - this.emit('error', new Error(`Failed to parse JSON: ${trimmed.substring(0, 50)}...`)); - } - } - - /** - * Flush any remaining buffer content - */ - flush(): void { - if (this.buffer.trim()) { - this.parseLine(this.buffer); - this.buffer = ''; - } - } - - /** - * Reset the parser - */ - reset(): void { - this.buffer = ''; - } -} diff --git a/openwork-memos-integration/apps/desktop/src/main/opencode/task-manager.ts b/openwork-memos-integration/apps/desktop/src/main/opencode/task-manager.ts deleted file mode 100644 index 5b3d8b34d..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/opencode/task-manager.ts +++ /dev/null @@ -1,650 +0,0 @@ -/** - * TaskManager - Manages multiple concurrent OpenCode CLI task executions - * - * This class implements a process manager pattern to support true parallel - * session execution. Each task gets its own OpenCodeAdapter instance with - * isolated PTY process, state, and event handling. - */ - -import { OpenCodeAdapter, isOpenCodeCliInstalled, OpenCodeCliNotFoundError } from './adapter'; -import { getSkillsPath } from './config-generator'; -import { getNpxPath, getBundledNodePaths } from '../utils/bundled-node'; -import { spawn } from 'child_process'; -import path from 'path'; -import fs from 'fs'; -import os from 'os'; -import type { - TaskConfig, - Task, - TaskResult, - TaskStatus, - OpenCodeMessage, - PermissionRequest, -} from '@accomplish/shared'; - -/** - * Check if system Chrome is installed - */ -function isSystemChromeInstalled(): boolean { - if (process.platform === 'darwin') { - return fs.existsSync('/Applications/Google Chrome.app'); - } else if (process.platform === 'win32') { - // Check common Windows Chrome locations - const programFiles = process.env['PROGRAMFILES'] || 'C:\\Program Files'; - const programFilesX86 = process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)'; - return ( - fs.existsSync(path.join(programFiles, 'Google', 'Chrome', 'Application', 'chrome.exe')) || - fs.existsSync(path.join(programFilesX86, 'Google', 'Chrome', 'Application', 'chrome.exe')) - ); - } - // Linux - check common paths - return fs.existsSync('/usr/bin/google-chrome') || fs.existsSync('/usr/bin/chromium-browser'); -} - -/** - * Check if Playwright Chromium is installed - */ -function isPlaywrightInstalled(): boolean { - const homeDir = os.homedir(); - const possiblePaths = [ - path.join(homeDir, 'Library', 'Caches', 'ms-playwright'), // macOS - path.join(homeDir, '.cache', 'ms-playwright'), // Linux - ]; - - if (process.platform === 'win32' && process.env.LOCALAPPDATA) { - possiblePaths.unshift(path.join(process.env.LOCALAPPDATA, 'ms-playwright')); - } - - for (const playwrightDir of possiblePaths) { - if (fs.existsSync(playwrightDir)) { - try { - const entries = fs.readdirSync(playwrightDir); - if (entries.some((entry) => entry.startsWith('chromium'))) { - return true; - } - } catch { - continue; - } - } - } - return false; -} - -/** - * Install Playwright Chromium browser. - * Returns a promise that resolves when installation is complete. - * Uses bundled Node.js to ensure it works in packaged app. - */ -async function installPlaywrightChromium( - onProgress?: (message: string) => void -): Promise { - return new Promise((resolve, reject) => { - const skillsPath = getSkillsPath(); - const devBrowserDir = path.join(skillsPath, 'dev-browser'); - - // Use bundled npx for packaged app compatibility - const npxPath = getNpxPath(); - const bundledPaths = getBundledNodePaths(); - - console.log(`[TaskManager] Installing Playwright Chromium using bundled npx: ${npxPath}`); - onProgress?.('Downloading browser...'); - - // Build environment with bundled node in PATH - let spawnEnv: NodeJS.ProcessEnv = { ...process.env }; - if (bundledPaths) { - const delimiter = process.platform === 'win32' ? ';' : ':'; - spawnEnv.PATH = `${bundledPaths.binDir}${delimiter}${process.env.PATH || ''}`; - } - - const child = spawn(npxPath, ['playwright', 'install', 'chromium'], { - cwd: devBrowserDir, - stdio: ['ignore', 'pipe', 'pipe'], - env: spawnEnv, - }); - - child.stdout?.on('data', (data: Buffer) => { - const line = data.toString().trim(); - if (line) { - console.log(`[Playwright Install] ${line}`); - // Send progress info: percentage updates and "Downloading X" messages - if (line.includes('%') || line.toLowerCase().startsWith('downloading')) { - onProgress?.(line); - } - } - }); - - child.stderr?.on('data', (data: Buffer) => { - const line = data.toString().trim(); - if (line) { - console.log(`[Playwright Install] ${line}`); - } - }); - - child.on('close', (code) => { - if (code === 0) { - console.log('[TaskManager] Playwright Chromium installed successfully'); - onProgress?.('Browser installed successfully!'); - resolve(); - } else { - reject(new Error(`Playwright install failed with code ${code}`)); - } - }); - - child.on('error', (err) => { - reject(err); - }); - }); -} - -/** - * Ensure the dev-browser server is running. - * Called before starting tasks to pre-warm the browser. - * - * If neither system Chrome nor Playwright is installed, downloads Playwright first. - * - * Note: We don't check if server is already running via fetch() because - * that triggers macOS "Local Network" permission dialog. Instead, we just - * spawn server.sh which handles the "already running" case internally. - */ -async function ensureDevBrowserServer( - onProgress?: (progress: { stage: string; message?: string }) => void -): Promise { - // Check if we have a browser available - const hasChrome = isSystemChromeInstalled(); - const hasPlaywright = isPlaywrightInstalled(); - - console.log(`[TaskManager] Browser check: Chrome=${hasChrome}, Playwright=${hasPlaywright}`); - - // If no browser available, install Playwright first - if (!hasChrome && !hasPlaywright) { - console.log('[TaskManager] No browser available, installing Playwright Chromium...'); - onProgress?.({ - stage: 'setup', - message: 'Chrome not found. Downloading browser (one-time setup, ~2 min)...', - }); - - try { - await installPlaywrightChromium((msg) => { - onProgress?.({ stage: 'setup', message: msg }); - }); - } catch (error) { - console.error('[TaskManager] Failed to install Playwright:', error); - // Don't throw - let agent handle the failure - } - } - - // Now start the server - try { - const skillsPath = getSkillsPath(); - const serverScript = path.join(skillsPath, 'dev-browser', 'server.sh'); - - // Build environment with bundled Node.js in PATH - const bundledPaths = getBundledNodePaths(); - let spawnEnv: NodeJS.ProcessEnv = { ...process.env }; - if (bundledPaths) { - const delimiter = process.platform === 'win32' ? ';' : ':'; - spawnEnv.PATH = `${bundledPaths.binDir}${delimiter}${process.env.PATH || ''}`; - spawnEnv.NODE_BIN_PATH = bundledPaths.binDir; - } - - // Spawn server in background (detached, unref to not block) - const child = spawn('bash', [serverScript], { - detached: true, - stdio: 'ignore', - cwd: path.join(skillsPath, 'dev-browser'), - env: spawnEnv, - }); - child.unref(); - - console.log('[TaskManager] Dev-browser server spawn initiated'); - } catch (error) { - console.error('[TaskManager] Failed to start dev-browser server:', error); - } -} - -/** - * Callbacks for task events - scoped to a specific task - */ -export interface TaskCallbacks { - onMessage: (message: OpenCodeMessage) => void; - onProgress: (progress: { stage: string; message?: string }) => void; - onPermissionRequest: (request: PermissionRequest) => void; - onComplete: (result: TaskResult) => void; - onError: (error: Error) => void; - onStatusChange?: (status: TaskStatus) => void; - onDebug?: (log: { type: string; message: string; data?: unknown }) => void; -} - -/** - * Internal representation of a managed task - */ -interface ManagedTask { - taskId: string; - adapter: OpenCodeAdapter; - callbacks: TaskCallbacks; - cleanup: () => void; - createdAt: Date; -} - -/** - * Queued task waiting for execution - */ -interface QueuedTask { - taskId: string; - config: TaskConfig; - callbacks: TaskCallbacks; - createdAt: Date; -} - -/** - * Default maximum number of concurrent tasks - * Can be configured via constructor - */ -const DEFAULT_MAX_CONCURRENT_TASKS = 10; - -/** - * TaskManager manages OpenCode CLI task executions with parallel execution - * - * Multiple tasks can run concurrently up to maxConcurrentTasks. - * Each task gets its own isolated PTY process and browser pages (prefixed with task ID). - */ -export class TaskManager { - private activeTasks: Map = new Map(); - private taskQueue: QueuedTask[] = []; - private maxConcurrentTasks: number; - - constructor(options?: { maxConcurrentTasks?: number }) { - this.maxConcurrentTasks = options?.maxConcurrentTasks ?? DEFAULT_MAX_CONCURRENT_TASKS; - } - - /** - * Start a new task. Multiple tasks can run in parallel up to maxConcurrentTasks. - * If at capacity, new tasks are queued and start automatically when a task completes. - */ - async startTask( - taskId: string, - config: TaskConfig, - callbacks: TaskCallbacks - ): Promise { - // Check if CLI is installed - const cliInstalled = await isOpenCodeCliInstalled(); - if (!cliInstalled) { - throw new OpenCodeCliNotFoundError(); - } - - // Check if task already exists (either running or queued) - if (this.activeTasks.has(taskId) || this.taskQueue.some(q => q.taskId === taskId)) { - throw new Error(`Task ${taskId} is already running or queued`); - } - - // If at max concurrent tasks, queue this one - if (this.activeTasks.size >= this.maxConcurrentTasks) { - console.log(`[TaskManager] At max concurrent tasks (${this.maxConcurrentTasks}). Queueing task ${taskId}`); - return this.queueTask(taskId, config, callbacks); - } - - // Execute immediately (parallel execution) - return this.executeTask(taskId, config, callbacks); - } - - /** - * Queue a task for later execution - */ - private queueTask( - taskId: string, - config: TaskConfig, - callbacks: TaskCallbacks - ): Task { - // Check queue limit (allow same number of queued tasks as max concurrent) - if (this.taskQueue.length >= this.maxConcurrentTasks) { - throw new Error( - `Maximum queued tasks (${this.maxConcurrentTasks}) reached. Please wait for tasks to complete.` - ); - } - - const queuedTask: QueuedTask = { - taskId, - config, - callbacks, - createdAt: new Date(), - }; - - this.taskQueue.push(queuedTask); - console.log(`[TaskManager] Task ${taskId} queued. Queue length: ${this.taskQueue.length}`); - - // Return a task object with 'queued' status - return { - id: taskId, - prompt: config.prompt, - status: 'queued', - messages: [], - createdAt: new Date().toISOString(), - }; - } - - /** - * Execute a task immediately (internal) - */ - private async executeTask( - taskId: string, - config: TaskConfig, - callbacks: TaskCallbacks - ): Promise { - // Create a new adapter instance for this task - const adapter = new OpenCodeAdapter(taskId); - - // Wire up event listeners - const onMessage = (message: OpenCodeMessage) => { - callbacks.onMessage(message); - }; - - const onProgress = (progress: { stage: string; message?: string }) => { - callbacks.onProgress(progress); - }; - - const onPermissionRequest = (request: PermissionRequest) => { - callbacks.onPermissionRequest(request); - }; - - const onComplete = (result: TaskResult) => { - callbacks.onComplete(result); - // Auto-cleanup on completion and process queue - this.cleanupTask(taskId); - this.processQueue(); - }; - - const onError = (error: Error) => { - callbacks.onError(error); - // Auto-cleanup on error and process queue - this.cleanupTask(taskId); - this.processQueue(); - }; - - const onDebug = (log: { type: string; message: string; data?: unknown }) => { - callbacks.onDebug?.(log); - }; - - // Attach listeners - adapter.on('message', onMessage); - adapter.on('progress', onProgress); - adapter.on('permission-request', onPermissionRequest); - adapter.on('complete', onComplete); - adapter.on('error', onError); - adapter.on('debug', onDebug); - - // Create cleanup function - const cleanup = () => { - adapter.off('message', onMessage); - adapter.off('progress', onProgress); - adapter.off('permission-request', onPermissionRequest); - adapter.off('complete', onComplete); - adapter.off('error', onError); - adapter.off('debug', onDebug); - adapter.dispose(); - }; - - // Register the managed task - const managedTask: ManagedTask = { - taskId, - adapter, - callbacks, - cleanup, - createdAt: new Date(), - }; - this.activeTasks.set(taskId, managedTask); - - console.log(`[TaskManager] Executing task ${taskId}. Active tasks: ${this.activeTasks.size}`); - - // Create task object immediately so UI can navigate - const task: Task = { - id: taskId, - prompt: config.prompt, - status: 'running', - messages: [], - createdAt: new Date().toISOString(), - }; - - // Start browser setup and agent asynchronously - // This allows the UI to navigate immediately while setup happens - (async () => { - try { - // Ensure browser is available (may download Playwright if needed) - await ensureDevBrowserServer(callbacks.onProgress); - - // Now start the agent - await adapter.startTask({ ...config, taskId }); - } catch (error) { - // Cleanup on failure and process queue - callbacks.onError(error instanceof Error ? error : new Error(String(error))); - this.cleanupTask(taskId); - this.processQueue(); - } - })(); - - return task; - } - - /** - * Process the queue - start queued tasks if we have capacity - */ - private async processQueue(): Promise { - // Start queued tasks while we have capacity - while (this.taskQueue.length > 0 && this.activeTasks.size < this.maxConcurrentTasks) { - const nextTask = this.taskQueue.shift()!; - console.log(`[TaskManager] Processing queue. Starting task ${nextTask.taskId}. Active: ${this.activeTasks.size}, Remaining in queue: ${this.taskQueue.length}`); - - // Notify that task is now running - nextTask.callbacks.onStatusChange?.('running'); - - try { - await this.executeTask(nextTask.taskId, nextTask.config, nextTask.callbacks); - } catch (error) { - console.error(`[TaskManager] Error starting queued task ${nextTask.taskId}:`, error); - nextTask.callbacks.onError(error instanceof Error ? error : new Error(String(error))); - } - } - - if (this.taskQueue.length === 0) { - console.log('[TaskManager] Queue empty, no more tasks to process'); - } - } - - /** - * Cancel a specific task (running or queued) - */ - async cancelTask(taskId: string): Promise { - // Check if it's a queued task - const queueIndex = this.taskQueue.findIndex(q => q.taskId === taskId); - if (queueIndex !== -1) { - console.log(`[TaskManager] Cancelling queued task ${taskId}`); - this.taskQueue.splice(queueIndex, 1); - return; - } - - // Otherwise, it's a running task - const managedTask = this.activeTasks.get(taskId); - if (!managedTask) { - console.warn(`[TaskManager] Task ${taskId} not found for cancellation`); - return; - } - - console.log(`[TaskManager] Cancelling running task ${taskId}`); - - try { - await managedTask.adapter.cancelTask(); - } finally { - this.cleanupTask(taskId); - // Process queue after cancellation - this.processQueue(); - } - } - - /** - * Interrupt a running task (graceful Ctrl+C) - * Unlike cancel, this doesn't kill the process - it just interrupts the current operation - * and allows the agent to wait for the next user input. - */ - async interruptTask(taskId: string): Promise { - const managedTask = this.activeTasks.get(taskId); - if (!managedTask) { - console.warn(`[TaskManager] Task ${taskId} not found for interruption`); - return; - } - - console.log(`[TaskManager] Interrupting task ${taskId}`); - await managedTask.adapter.interruptTask(); - } - - /** - * Cancel a queued task and optionally revert to a previous status - * Used for cancelling follow-ups on completed tasks - */ - cancelQueuedTask(taskId: string): boolean { - const queueIndex = this.taskQueue.findIndex(q => q.taskId === taskId); - if (queueIndex === -1) { - return false; - } - - console.log(`[TaskManager] Removing task ${taskId} from queue`); - this.taskQueue.splice(queueIndex, 1); - return true; - } - - /** - * Check if there are any running tasks - */ - hasRunningTask(): boolean { - return this.activeTasks.size > 0; - } - - /** - * Check if a specific task is queued - */ - isTaskQueued(taskId: string): boolean { - return this.taskQueue.some(q => q.taskId === taskId); - } - - /** - * Get queue position (1-based) for a task, or 0 if not queued - */ - getQueuePosition(taskId: string): number { - const index = this.taskQueue.findIndex(q => q.taskId === taskId); - return index === -1 ? 0 : index + 1; - } - - /** - * Get the current queue length - */ - getQueueLength(): number { - return this.taskQueue.length; - } - - /** - * Send a response to a specific task's PTY (for permissions/questions) - */ - async sendResponse(taskId: string, response: string): Promise { - const managedTask = this.activeTasks.get(taskId); - if (!managedTask) { - throw new Error(`Task ${taskId} not found or not active`); - } - - await managedTask.adapter.sendResponse(response); - } - - /** - * Get the session ID for a specific task - */ - getSessionId(taskId: string): string | null { - const managedTask = this.activeTasks.get(taskId); - return managedTask?.adapter.getSessionId() ?? null; - } - - /** - * Check if a task is active - */ - hasActiveTask(taskId: string): boolean { - return this.activeTasks.has(taskId); - } - - /** - * Get the number of active tasks - */ - getActiveTaskCount(): number { - return this.activeTasks.size; - } - - /** - * Get all active task IDs - */ - getActiveTaskIds(): string[] { - return Array.from(this.activeTasks.keys()); - } - - /** - * Get the currently running task ID (not queued) - * Returns the first active task if multiple are running - */ - getActiveTaskId(): string | null { - const firstActive = this.activeTasks.keys().next(); - return firstActive.done ? null : firstActive.value; - } - - /** - * Cleanup a specific task (internal) - */ - private cleanupTask(taskId: string): void { - const managedTask = this.activeTasks.get(taskId); - if (managedTask) { - console.log(`[TaskManager] Cleaning up task ${taskId}`); - managedTask.cleanup(); - this.activeTasks.delete(taskId); - console.log(`[TaskManager] Task ${taskId} cleaned up. Active tasks: ${this.activeTasks.size}`); - } - } - - /** - * Dispose all tasks and cleanup resources - * Called on app quit - */ - dispose(): void { - console.log(`[TaskManager] Disposing all tasks (${this.activeTasks.size} active, ${this.taskQueue.length} queued)`); - - // Clear the queue - this.taskQueue = []; - - for (const [taskId, managedTask] of this.activeTasks) { - try { - managedTask.cleanup(); - } catch (error) { - console.error(`[TaskManager] Error cleaning up task ${taskId}:`, error); - } - } - - this.activeTasks.clear(); - console.log('[TaskManager] All tasks disposed'); - } -} - -// Singleton TaskManager instance for the application -let taskManagerInstance: TaskManager | null = null; - -/** - * Get the global TaskManager instance - */ -export function getTaskManager(): TaskManager { - if (!taskManagerInstance) { - taskManagerInstance = new TaskManager(); - } - return taskManagerInstance; -} - -/** - * Dispose the global TaskManager instance - * Called on app quit - */ -export function disposeTaskManager(): void { - if (taskManagerInstance) { - taskManagerInstance.dispose(); - taskManagerInstance = null; - } -} diff --git a/openwork-memos-integration/apps/desktop/src/main/permission-api.ts b/openwork-memos-integration/apps/desktop/src/main/permission-api.ts deleted file mode 100644 index b6d135839..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/permission-api.ts +++ /dev/null @@ -1,356 +0,0 @@ -/** - * Permission API Server - * - * HTTP server that the file-permission MCP server calls to request - * user permission for file operations. This bridges the MCP server - * (separate process) with the Electron UI. - */ - -import http from 'http'; -import type { BrowserWindow } from 'electron'; -import type { PermissionRequest, FileOperation } from '@accomplish/shared'; - -export const PERMISSION_API_PORT = 9226; -export const QUESTION_API_PORT = 9227; - -interface PendingPermission { - resolve: (allowed: boolean) => void; - timeoutId: NodeJS.Timeout; -} - -interface PendingQuestion { - resolveWithData: (data: { selectedOptions?: string[]; customText?: string; denied?: boolean }) => void; - timeoutId: NodeJS.Timeout; -} - -// Store pending permission requests waiting for user response -const pendingPermissions = new Map(); - -// Store pending question requests waiting for user response -const pendingQuestions = new Map(); - -// Store reference to main window and task manager -let mainWindow: BrowserWindow | null = null; -let getActiveTaskId: (() => string | null) | null = null; - -/** - * Initialize the permission API with dependencies - */ -export function initPermissionApi( - window: BrowserWindow, - taskIdGetter: () => string | null -): void { - mainWindow = window; - getActiveTaskId = taskIdGetter; -} - -/** - * Resolve a pending permission request from the MCP server - * Called when user responds via the UI - */ -export function resolvePermission(requestId: string, allowed: boolean): boolean { - const pending = pendingPermissions.get(requestId); - if (!pending) { - return false; - } - - clearTimeout(pending.timeoutId); - pending.resolve(allowed); - pendingPermissions.delete(requestId); - return true; -} - -/** - * Resolve a pending question request from the MCP server - * Called when user responds via the UI - */ -export function resolveQuestion( - requestId: string, - response: { selectedOptions?: string[]; customText?: string; denied?: boolean } -): boolean { - const pending = pendingQuestions.get(requestId); - if (!pending) { - return false; - } - - clearTimeout(pending.timeoutId); - pending.resolveWithData(response); - pendingQuestions.delete(requestId); - return true; -} - -/** - * Generate a unique request ID for file permissions - */ -function generateRequestId(): string { - return `filereq_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; -} - -/** - * Generate a unique request ID for questions - */ -function generateQuestionRequestId(): string { - return `questionreq_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; -} - -/** - * Create and start the HTTP server for permission requests - */ -export function startPermissionApiServer(): http.Server { - const server = http.createServer(async (req, res) => { - // CORS headers for local requests - res.setHeader('Access-Control-Allow-Origin', '*'); - res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS'); - res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); - - // Handle preflight - if (req.method === 'OPTIONS') { - res.writeHead(200); - res.end(); - return; - } - - // Only handle POST /permission - if (req.method !== 'POST' || req.url !== '/permission') { - res.writeHead(404, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Not found' })); - return; - } - - // Parse request body - let body = ''; - for await (const chunk of req) { - body += chunk; - } - - let data: { - operation?: string; - filePath?: string; - filePaths?: string[]; - targetPath?: string; - contentPreview?: string; - }; - - try { - data = JSON.parse(body); - } catch { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Invalid JSON' })); - return; - } - - // Validate required fields - if (!data.operation || (!data.filePath && (!data.filePaths || data.filePaths.length === 0))) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'operation and either filePath or filePaths are required' })); - return; - } - - // Validate operation type - const validOperations = ['create', 'delete', 'rename', 'move', 'modify', 'overwrite']; - if (!validOperations.includes(data.operation)) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: `Invalid operation. Must be one of: ${validOperations.join(', ')}` })); - return; - } - - // Check if we have the necessary dependencies - if (!mainWindow || mainWindow.isDestroyed() || !getActiveTaskId) { - res.writeHead(503, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Permission API not initialized' })); - return; - } - - const taskId = getActiveTaskId(); - if (!taskId) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'No active task' })); - return; - } - - const requestId = generateRequestId(); - - // Create permission request for the UI - const permissionRequest: PermissionRequest = { - id: requestId, - taskId, - type: 'file', - fileOperation: data.operation as FileOperation, - filePath: data.filePath, - filePaths: data.filePaths, - targetPath: data.targetPath, - contentPreview: data.contentPreview?.substring(0, 500), - createdAt: new Date().toISOString(), - }; - - // Send to renderer - mainWindow.webContents.send('permission:request', permissionRequest); - - // Wait for user response (with 5 minute timeout) - const PERMISSION_TIMEOUT_MS = 5 * 60 * 1000; - - try { - const allowed = await new Promise((resolve, reject) => { - const timeoutId = setTimeout(() => { - pendingPermissions.delete(requestId); - reject(new Error('Permission request timed out')); - }, PERMISSION_TIMEOUT_MS); - - pendingPermissions.set(requestId, { resolve, timeoutId }); - }); - - res.writeHead(200, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ allowed })); - } catch (error) { - res.writeHead(408, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Request timed out', allowed: false })); - } - }); - - server.listen(PERMISSION_API_PORT, '127.0.0.1', () => { - console.log(`[Permission API] Server listening on port ${PERMISSION_API_PORT}`); - }); - - server.on('error', (error: NodeJS.ErrnoException) => { - if (error.code === 'EADDRINUSE') { - console.warn(`[Permission API] Port ${PERMISSION_API_PORT} already in use, skipping server start`); - } else { - console.error('[Permission API] Server error:', error); - } - }); - - return server; -} - -/** - * Create and start the HTTP server for question requests - */ -export function startQuestionApiServer(): http.Server { - const server = http.createServer(async (req, res) => { - // CORS headers for local requests - res.setHeader('Access-Control-Allow-Origin', '*'); - res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS'); - res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); - - // Handle preflight - if (req.method === 'OPTIONS') { - res.writeHead(200); - res.end(); - return; - } - - // Only handle POST /question - if (req.method !== 'POST' || req.url !== '/question') { - res.writeHead(404, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Not found' })); - return; - } - - // Parse request body - let body = ''; - for await (const chunk of req) { - body += chunk; - } - - let data: { - question?: string; - header?: string; - options?: Array<{ label: string; description?: string }>; - multiSelect?: boolean; - }; - - try { - data = JSON.parse(body); - } catch { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Invalid JSON' })); - return; - } - - // Validate required fields - if (!data.question) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'question is required' })); - return; - } - - // Check if we have the necessary dependencies - if (!mainWindow || mainWindow.isDestroyed() || !getActiveTaskId) { - res.writeHead(503, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Question API not initialized' })); - return; - } - - const taskId = getActiveTaskId(); - if (!taskId) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'No active task' })); - return; - } - - const requestId = generateQuestionRequestId(); - - // Create question request for the UI - const questionRequest: PermissionRequest = { - id: requestId, - taskId, - type: 'question', - question: data.question, - header: data.header, - options: data.options, - multiSelect: data.multiSelect, - createdAt: new Date().toISOString(), - }; - - // Send to renderer - mainWindow.webContents.send('permission:request', questionRequest); - - // Wait for user response (with 5 minute timeout) - const QUESTION_TIMEOUT_MS = 5 * 60 * 1000; - - try { - const response = await new Promise<{ selectedOptions?: string[]; customText?: string; denied?: boolean }>((resolve, reject) => { - const timeoutId = setTimeout(() => { - pendingQuestions.delete(requestId); - reject(new Error('Question request timed out')); - }, QUESTION_TIMEOUT_MS); - - pendingQuestions.set(requestId, { resolveWithData: resolve, timeoutId }); - }); - - res.writeHead(200, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify(response)); - } catch (error) { - res.writeHead(408, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Request timed out', denied: true })); - } - }); - - server.listen(QUESTION_API_PORT, '127.0.0.1', () => { - console.log(`[Question API] Server listening on port ${QUESTION_API_PORT}`); - }); - - server.on('error', (error: NodeJS.ErrnoException) => { - if (error.code === 'EADDRINUSE') { - console.warn(`[Question API] Port ${QUESTION_API_PORT} already in use, skipping server start`); - } else { - console.error('[Question API] Server error:', error); - } - }); - - return server; -} - -/** - * Check if a request ID is a file permission request from the MCP server - */ -export function isFilePermissionRequest(requestId: string): boolean { - return requestId.startsWith('filereq_'); -} - -/** - * Check if a request ID is a question request from the MCP server - */ -export function isQuestionRequest(requestId: string): boolean { - return requestId.startsWith('questionreq_'); -} diff --git a/openwork-memos-integration/apps/desktop/src/main/services/memory.ts b/openwork-memos-integration/apps/desktop/src/main/services/memory.ts deleted file mode 100644 index 02e6f75b1..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/services/memory.ts +++ /dev/null @@ -1,329 +0,0 @@ -import type { TaskMessage } from '@accomplish/shared'; -import { getMemoryUserId } from '../store/appSettings'; -import { getApiKey } from '../store/secureStorage'; - -const DEFAULT_BASE_URL = 'https://memos.memtensor.cn/api/openmem/v1'; -const DEFAULT_TOP_K = 5; -const DEFAULT_TIMEOUT_MS = 6000; -const DEFAULT_MAX_CONTEXT_LENGTH = 3000; -const DEFAULT_MAX_MESSAGE_COUNT = 8; -const DEFAULT_MAX_MESSAGE_LENGTH = 2000; - -interface MemoryMessage { - role: 'user' | 'assistant'; - content: string; -} - -interface MemoryConfig { - enabled: boolean; - baseUrl?: string; - apiKey?: string; - apiKeyHeader: string; - apiKeyScheme: string; - searchPath: string; - addPath: string; - timeoutMs: number; - topK: number; - maxContextLength: number; -} - -function getEnv(): Record { - const env = (globalThis as { process?: { env?: Record } }).process?.env; - return env ?? {}; -} - -function resolveMemoryConfig(): MemoryConfig { - const env = getEnv(); - const envBaseUrl = env.MEMOS_BASE_URL?.trim() || env.MEMOS_API_URL?.trim(); - const envApiKey = env.MEMOS_API_KEY?.trim(); - const storedKey = getApiKey('memos')?.trim(); - - const baseUrl = envBaseUrl || DEFAULT_BASE_URL; - const apiKey = envApiKey || storedKey || undefined; - const apiKeyHeader = env.MEMOS_API_KEY_HEADER?.trim() - || 'Authorization'; - const apiKeyScheme = env.MEMOS_API_KEY_SCHEME?.trim() - || 'Token'; - const searchPath = env.MEMOS_SEARCH_PATH?.trim() - || '/search/memory'; - const addPath = env.MEMOS_ADD_PATH?.trim() - || '/add/message'; - const timeoutMs = Number(env.MEMOS_TIMEOUT_MS || DEFAULT_TIMEOUT_MS); - const topK = Number(env.MEMOS_TOP_K || DEFAULT_TOP_K); - const maxContextLength = Number(env.MEMOS_MAX_CONTEXT_LENGTH || DEFAULT_MAX_CONTEXT_LENGTH); - const enabled = Boolean(baseUrl && apiKey); - - return { - enabled, - baseUrl, - apiKey, - apiKeyHeader, - apiKeyScheme, - searchPath, - addPath, - timeoutMs: Number.isFinite(timeoutMs) ? timeoutMs : DEFAULT_TIMEOUT_MS, - topK: Number.isFinite(topK) ? topK : DEFAULT_TOP_K, - maxContextLength: Number.isFinite(maxContextLength) ? maxContextLength : DEFAULT_MAX_CONTEXT_LENGTH, - }; -} - -function resolveMemoryUserId(): string { - const env = getEnv(); - const fromEnv = env.MEMOS_USER_ID?.trim(); - return fromEnv || getMemoryUserId(); -} - -function buildUrl(baseUrl: string, path: string): string { - const trimmedBase = baseUrl.replace(/\/+$/, ''); - const trimmedPath = path.startsWith('/') ? path : `/${path}`; - return `${trimmedBase}${trimmedPath}`; -} - -function buildAuthHeaders(config: MemoryConfig): Record { - const headers: Record = { - 'Content-Type': 'application/json', - }; - - if (!config.apiKey) return headers; - - const headerKey = config.apiKeyHeader; - const headerValue = headerKey.toLowerCase() === 'authorization' - ? `${config.apiKeyScheme} ${config.apiKey}` - : config.apiKey; - - headers[headerKey] = headerValue; - return headers; -} - -async function fetchWithTimeout( - url: string, - options: RequestInit, - timeoutMs: number -): Promise { - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), timeoutMs); - - try { - return await fetch(url, { ...options, signal: controller.signal }); - } finally { - clearTimeout(timeoutId); - } -} - -function normalizeText(value: unknown): string | null { - if (typeof value !== 'string') return null; - const trimmed = value.trim(); - return trimmed ? trimmed : null; -} - -function extractMemoryTexts(payload: unknown): string[] { - if (!payload || typeof payload !== 'object') return []; - - const root = payload as Record; - const data = (root.data && typeof root.data === 'object') - ? (root.data as Record) - : root; - const candidates = - (Array.isArray(data.memory_detail_list) && data.memory_detail_list) || - (Array.isArray(data.text_mem) && data.text_mem) || - (Array.isArray(data.memories) && data.memories) || - (Array.isArray(data.data) && data.data) || - []; - - const preferenceCandidates = - (Array.isArray(data.preference_detail_list) && data.preference_detail_list) || []; - const toolCandidates = - (Array.isArray(data.tool_memory_detail_list) && data.tool_memory_detail_list) || []; - const preferenceNote = normalizeText(data.preference_note); - - const texts: string[] = []; - for (const entry of candidates) { - if (typeof entry === 'string') { - const normalized = normalizeText(entry); - if (normalized) texts.push(normalized); - continue; - } - if (entry && typeof entry === 'object') { - const entryObj = entry as Record; - const memoryKey = normalizeText(entryObj.memory_key); - const memoryValue = - normalizeText(entryObj.memory_value) || - normalizeText(entryObj.text) || - normalizeText(entryObj.content) || - normalizeText(entryObj.memory); - if (memoryValue && memoryKey) { - texts.push(`${memoryKey}: ${memoryValue}`); - } else if (memoryValue) { - texts.push(memoryValue); - } - } - } - - for (const entry of preferenceCandidates) { - if (!entry || typeof entry !== 'object') continue; - const entryObj = entry as Record; - const preference = normalizeText(entryObj.preference); - const reasoning = normalizeText(entryObj.reasoning); - if (preference && reasoning) { - texts.push(`Preference: ${preference} (reason: ${reasoning})`); - } else if (preference) { - texts.push(`Preference: ${preference}`); - } - } - - for (const entry of toolCandidates) { - if (!entry || typeof entry !== 'object') continue; - const entryObj = entry as Record; - const toolValue = normalizeText(entryObj.tool_value); - const experience = normalizeText(entryObj.experience); - if (toolValue && experience) { - texts.push(`Tool memory: ${toolValue} (experience: ${experience})`); - } else if (toolValue) { - texts.push(`Tool memory: ${toolValue}`); - } else if (experience) { - texts.push(`Tool experience: ${experience}`); - } - } - - if (preferenceNote) { - texts.push(preferenceNote); - } - return texts; -} - -function formatMemoryContext(entries: string[], maxLength: number): string | null { - if (entries.length === 0) return null; - - const lines = [ - 'Relevant memories (treat as factual context; use when the user asks):', - ]; - for (const entry of entries) { - lines.push(`- ${entry}`); - } - const combined = lines.join('\n'); - if (combined.length <= maxLength) return combined; - - return combined.slice(0, Math.max(0, maxLength - 3)) + '...'; -} - -function toMemoryMessages(messages: TaskMessage[], taskPrompt?: string, summary?: string): MemoryMessage[] { - const filtered: MemoryMessage[] = messages - .filter((message) => message.type === 'user' || message.type === 'assistant') - .map((message): MemoryMessage => ({ - role: message.type === 'user' ? 'user' : 'assistant', - content: message.content.trim(), - })) - .filter((message) => message.content.length > 0); - - const recent = filtered.slice(-DEFAULT_MAX_MESSAGE_COUNT); - const normalized: MemoryMessage[] = recent.map((message): MemoryMessage => ({ - role: message.role, - content: message.content.slice(0, DEFAULT_MAX_MESSAGE_LENGTH), - })); - - if (normalized.length === 0 && taskPrompt) { - normalized.push({ role: 'user', content: taskPrompt.slice(0, DEFAULT_MAX_MESSAGE_LENGTH) }); - } - - if (summary) { - normalized.push({ - role: 'assistant', - content: `Summary: ${summary.slice(0, DEFAULT_MAX_MESSAGE_LENGTH)}`, - }); - } - - return normalized; -} - -export async function getMemoryContextForPrompt( - prompt: string, - conversationId?: string -): Promise { - const config = resolveMemoryConfig(); - if (!config.enabled || !config.baseUrl) return null; - - const payload = { - user_id: resolveMemoryUserId(), - query: prompt, - top_k: config.topK, - conversation_id: conversationId, - }; - - try { - const response = await fetchWithTimeout( - buildUrl(config.baseUrl, config.searchPath), - { - method: 'POST', - headers: buildAuthHeaders(config), - body: JSON.stringify(payload), - }, - config.timeoutMs - ); - - if (!response.ok) { - console.warn('[Memory] Search failed:', response.status, response.statusText); - return null; - } - - const data = await response.json().catch(() => null); - const entries = extractMemoryTexts(data); - return formatMemoryContext(entries.slice(0, config.topK), config.maxContextLength); - } catch (error) { - if (error instanceof Error && error.name === 'AbortError') { - console.warn('[Memory] Search timed out'); - return null; - } - console.warn('[Memory] Search failed:', error instanceof Error ? error.message : String(error)); - return null; - } -} - -export async function rememberTask(task: { - id: string; - prompt: string; - messages?: TaskMessage[]; - summary?: string; - status?: string; - createdAt?: string; - completedAt?: string; -}): Promise { - const config = resolveMemoryConfig(); - if (!config.enabled || !config.baseUrl) return; - - const messages = toMemoryMessages(task.messages ?? [], task.prompt, task.summary); - if (messages.length === 0) return; - - const payload = { - user_id: resolveMemoryUserId(), - conversation_id: task.id, - messages, - metadata: { - taskId: task.id, - status: task.status, - createdAt: task.createdAt, - completedAt: task.completedAt, - }, - }; - - try { - const response = await fetchWithTimeout( - buildUrl(config.baseUrl, config.addPath), - { - method: 'POST', - headers: buildAuthHeaders(config), - body: JSON.stringify(payload), - }, - config.timeoutMs - ); - - if (!response.ok) { - console.warn('[Memory] Add failed:', response.status, response.statusText); - } - } catch (error) { - if (error instanceof Error && error.name === 'AbortError') { - console.warn('[Memory] Add timed out'); - return; - } - console.warn('[Memory] Add failed:', error instanceof Error ? error.message : String(error)); - } -} diff --git a/openwork-memos-integration/apps/desktop/src/main/services/summarizer.ts b/openwork-memos-integration/apps/desktop/src/main/services/summarizer.ts deleted file mode 100644 index 80d8e5bb0..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/services/summarizer.ts +++ /dev/null @@ -1,212 +0,0 @@ -/** - * Task summary generator using LLM APIs - * - * Generates short, descriptive titles for tasks (like ChatGPT's conversation titles). - * Uses the first available API key, preferring Anthropic for speed/cost. - */ - -import { getApiKey, type ApiKeyProvider } from '../store/secureStorage'; - -const SUMMARY_PROMPT = `Generate a very short title (3-5 words max) that summarizes this task request. -The title should be in sentence case, no quotes, no punctuation at end. -Examples: "Check calendar", "Download invoice", "Search flights to Paris" - -Task: `; - -/** - * Generate a short summary title for a task prompt - * @param prompt The user's task prompt - * @returns A short summary string, or truncated prompt as fallback - */ -export async function generateTaskSummary(prompt: string): Promise { - // Try providers in order of preference - const providers: ApiKeyProvider[] = ['anthropic', 'openai', 'google', 'xai']; - - for (const provider of providers) { - const apiKey = getApiKey(provider); - if (!apiKey) continue; - - try { - const summary = await callProvider(provider, apiKey, prompt); - if (summary) { - console.log(`[Summarizer] Generated summary using ${provider}: "${summary}"`); - return summary; - } - } catch (error) { - console.warn(`[Summarizer] ${provider} failed:`, error); - // Continue to next provider - } - } - - // Fallback: truncate prompt - console.log('[Summarizer] All providers failed, using truncated prompt'); - return truncatePrompt(prompt); -} - -async function callProvider( - provider: ApiKeyProvider, - apiKey: string, - prompt: string -): Promise { - switch (provider) { - case 'anthropic': - return callAnthropic(apiKey, prompt); - case 'openai': - return callOpenAI(apiKey, prompt); - case 'google': - return callGoogle(apiKey, prompt); - case 'xai': - return callXAI(apiKey, prompt); - default: - return null; - } -} - -async function callAnthropic(apiKey: string, prompt: string): Promise { - const response = await fetch('https://api.anthropic.com/v1/messages', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'x-api-key': apiKey, - 'anthropic-version': '2023-06-01', - }, - body: JSON.stringify({ - model: 'claude-3-5-haiku-latest', - max_tokens: 50, - messages: [ - { - role: 'user', - content: SUMMARY_PROMPT + prompt, - }, - ], - }), - }); - - if (!response.ok) { - throw new Error(`Anthropic API error: ${response.status}`); - } - - const data = (await response.json()) as { - content: Array<{ type: string; text?: string }>; - }; - const text = data.content?.[0]?.text; - return cleanSummary(text || ''); -} - -async function callOpenAI(apiKey: string, prompt: string): Promise { - const response = await fetch('https://api.openai.com/v1/chat/completions', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - body: JSON.stringify({ - model: 'gpt-4o-mini', - max_tokens: 50, - messages: [ - { - role: 'user', - content: SUMMARY_PROMPT + prompt, - }, - ], - }), - }); - - if (!response.ok) { - throw new Error(`OpenAI API error: ${response.status}`); - } - - const data = (await response.json()) as { - choices: Array<{ message: { content: string } }>; - }; - const text = data.choices?.[0]?.message?.content; - return cleanSummary(text || ''); -} - -async function callGoogle(apiKey: string, prompt: string): Promise { - const response = await fetch( - `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${apiKey}`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - contents: [ - { - parts: [{ text: SUMMARY_PROMPT + prompt }], - }, - ], - generationConfig: { - maxOutputTokens: 50, - }, - }), - } - ); - - if (!response.ok) { - throw new Error(`Google API error: ${response.status}`); - } - - const data = (await response.json()) as { - candidates: Array<{ content: { parts: Array<{ text: string }> } }>; - }; - const text = data.candidates?.[0]?.content?.parts?.[0]?.text; - return cleanSummary(text || ''); -} - -async function callXAI(apiKey: string, prompt: string): Promise { - const response = await fetch('https://api.x.ai/v1/chat/completions', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - body: JSON.stringify({ - model: 'grok-3', - max_tokens: 50, - messages: [ - { - role: 'user', - content: SUMMARY_PROMPT + prompt, - }, - ], - }), - }); - - if (!response.ok) { - throw new Error(`xAI API error: ${response.status}`); - } - - const data = (await response.json()) as { - choices: Array<{ message: { content: string } }>; - }; - const text = data.choices?.[0]?.message?.content; - return cleanSummary(text || ''); -} - -/** - * Clean up the generated summary - */ -function cleanSummary(text: string): string { - return ( - text - // Remove surrounding quotes - .replace(/^["']|["']$/g, '') - // Remove trailing punctuation - .replace(/[.!?]+$/, '') - // Trim whitespace - .trim() - ); -} - -/** - * Fallback: truncate prompt to a reasonable length - */ -function truncatePrompt(prompt: string, maxLength = 30): string { - const cleaned = prompt.replace(/\s+/g, ' ').trim(); - if (cleaned.length <= maxLength) { - return cleaned; - } - return cleaned.slice(0, maxLength - 3) + '...'; -} diff --git a/openwork-memos-integration/apps/desktop/src/main/store/appSettings.ts b/openwork-memos-integration/apps/desktop/src/main/store/appSettings.ts deleted file mode 100644 index 81eaf96a6..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/store/appSettings.ts +++ /dev/null @@ -1,140 +0,0 @@ -import Store from 'electron-store'; -import { randomUUID } from 'crypto'; -import type { SelectedModel, OllamaConfig, LiteLLMConfig } from '@accomplish/shared'; - -/** - * App settings schema - */ -interface AppSettingsSchema { - /** Enable debug mode to show backend logs in UI */ - debugMode: boolean; - /** Whether the user has completed the onboarding wizard */ - onboardingComplete: boolean; - /** Selected AI model (provider/model format) */ - selectedModel: SelectedModel | null; - /** Ollama server configuration */ - ollamaConfig: OllamaConfig | null; - /** LiteLLM proxy configuration */ - litellmConfig: LiteLLMConfig | null; - /** Stable user ID for memory services */ - memoryUserId: string; -} - -const appSettingsStore = new Store({ - name: 'app-settings', - defaults: { - debugMode: false, - onboardingComplete: false, - selectedModel: { - provider: 'anthropic', - model: 'anthropic/claude-opus-4-5', - }, - ollamaConfig: null, - litellmConfig: null, - memoryUserId: '', - }, -}); - -/** - * Get debug mode setting - */ -export function getDebugMode(): boolean { - return appSettingsStore.get('debugMode'); -} - -/** - * Set debug mode setting - */ -export function setDebugMode(enabled: boolean): void { - appSettingsStore.set('debugMode', enabled); -} - -/** - * Get onboarding complete setting - */ -export function getOnboardingComplete(): boolean { - return appSettingsStore.get('onboardingComplete'); -} - -/** - * Set onboarding complete setting - */ -export function setOnboardingComplete(complete: boolean): void { - appSettingsStore.set('onboardingComplete', complete); -} - -/** - * Get selected model - */ -export function getSelectedModel(): SelectedModel | null { - return appSettingsStore.get('selectedModel'); -} - -/** - * Set selected model - */ -export function setSelectedModel(model: SelectedModel): void { - appSettingsStore.set('selectedModel', model); -} - -/** - * Get Ollama configuration - */ -export function getOllamaConfig(): OllamaConfig | null { - return appSettingsStore.get('ollamaConfig'); -} - -/** - * Set Ollama configuration - */ -export function setOllamaConfig(config: OllamaConfig | null): void { - appSettingsStore.set('ollamaConfig', config); -} - -/** - * Get LiteLLM configuration - */ -export function getLiteLLMConfig(): LiteLLMConfig | null { - return appSettingsStore.get('litellmConfig'); -} - -/** - * Set LiteLLM configuration - */ -export function setLiteLLMConfig(config: LiteLLMConfig | null): void { - appSettingsStore.set('litellmConfig', config); -} - -/** - * Get or create stable memory user ID - */ -export function getMemoryUserId(): string { - let userId = appSettingsStore.get('memoryUserId'); - if (!userId) { - userId = randomUUID(); - appSettingsStore.set('memoryUserId', userId); - } - return userId; -} - -/** - * Get all app settings - */ -export function getAppSettings(): AppSettingsSchema { - return { - debugMode: appSettingsStore.get('debugMode'), - onboardingComplete: appSettingsStore.get('onboardingComplete'), - selectedModel: appSettingsStore.get('selectedModel'), - ollamaConfig: appSettingsStore.get('ollamaConfig') ?? null, - litellmConfig: appSettingsStore.get('litellmConfig') ?? null, - memoryUserId: appSettingsStore.get('memoryUserId'), - }; -} - -/** - * Clear all app settings (reset to defaults) - * Used during fresh install cleanup - */ -export function clearAppSettings(): void { - appSettingsStore.clear(); -} diff --git a/openwork-memos-integration/apps/desktop/src/main/store/freshInstallCleanup.ts b/openwork-memos-integration/apps/desktop/src/main/store/freshInstallCleanup.ts deleted file mode 100644 index c27987933..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/store/freshInstallCleanup.ts +++ /dev/null @@ -1,265 +0,0 @@ -import { app } from 'electron'; -import fs from 'fs'; -import path from 'path'; -import { clearAppSettings } from './appSettings'; -import { clearTaskHistoryStore } from './taskHistory'; -import { clearSecureStorage } from './secureStorage'; - -/** - * Fresh Install Cleanup - * - * Detects when the app has been reinstalled (e.g., from a new DMG) and clears - * old user data to ensure a clean first-run experience. - * - * Detection strategy: - * - Store the app bundle's modification timestamp - * - On startup, compare current bundle mtime with stored value - * - If different (or no stored value exists for a packaged app with existing data), - * it indicates a reinstall → clear old data - */ - -interface InstallMarker { - /** App bundle modification time (ISO string) */ - bundleMtime: string; - /** App version at install time */ - version: string; - /** Timestamp when marker was created */ - markerCreated: string; -} - -function getKnownUserDataDirs(): string[] { - const appDataPath = app.getPath('appData'); - const candidates = [ - app.getPath('userData'), - path.join(appDataPath, 'Accomplish'), - path.join(appDataPath, '@accomplish', 'desktop'), - path.join(appDataPath, 'ai.accomplish.desktop'), - path.join(appDataPath, 'com.accomplish.desktop'), - ]; - - return [...new Set(candidates)]; -} - -/** - * Get the path to the install marker file - */ -function getMarkerPath(): string { - return path.join(app.getPath('userData'), '.install-marker.json'); -} - -/** - * Get the app bundle's modification time - * For packaged apps, this is the .app bundle directory - * For dev mode, returns null (skip cleanup logic) - */ -function getAppBundleMtime(): Date | null { - if (!app.isPackaged) { - return null; - } - - // For macOS .app bundles, the executable is at: - // /Applications/Accomplish.app/Contents/MacOS/Accomplish - // We want the .app bundle directory - const execPath = app.getPath('exe'); - - // Find the .app bundle path - const appBundleMatch = execPath.match(/^(.+\.app)/); - if (!appBundleMatch) { - console.log('[FreshInstall] Could not determine app bundle path from:', execPath); - return null; - } - - const appBundlePath = appBundleMatch[1]; - - try { - const stats = fs.statSync(appBundlePath); - return stats.mtime; - } catch (err) { - console.error('[FreshInstall] Could not stat app bundle:', err); - return null; - } -} - -/** - * Read the stored install marker - */ -function readInstallMarker(): InstallMarker | null { - const markerPath = getMarkerPath(); - - try { - if (fs.existsSync(markerPath)) { - const content = fs.readFileSync(markerPath, 'utf-8'); - return JSON.parse(content) as InstallMarker; - } - } catch (err) { - console.error('[FreshInstall] Could not read install marker:', err); - } - - return null; -} - -/** - * Write the install marker - */ -function writeInstallMarker(marker: InstallMarker): void { - const markerPath = getMarkerPath(); - - try { - // Ensure userData directory exists - const userDataPath = app.getPath('userData'); - if (!fs.existsSync(userDataPath)) { - fs.mkdirSync(userDataPath, { recursive: true }); - } - - fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2)); - console.log('[FreshInstall] Install marker saved'); - } catch (err) { - console.error('[FreshInstall] Could not write install marker:', err); - } -} - -/** - * Check if there's existing user data that would indicate a previous installation - */ -function hasExistingUserData(): boolean { - const dataDirs = getKnownUserDataDirs(); - const storeFiles = ['app-settings.json', 'task-history.json']; - - return dataDirs.some((dir) => - storeFiles.some((file) => fs.existsSync(path.join(dir, file))) - ); -} - -/** - * Clear all user data from previous installation - */ -function clearPreviousInstallData(): void { - console.log('[FreshInstall] Clearing data from previous installation...'); - - // Clear electron-store data using the store APIs - // This is important because stores are already initialized in memory - try { - clearAppSettings(); - console.log('[FreshInstall] - Cleared app settings store'); - } catch (err) { - console.error('[FreshInstall] - Failed to clear app settings:', err); - } - - try { - clearTaskHistoryStore(); - console.log('[FreshInstall] - Cleared task history store'); - } catch (err) { - console.error('[FreshInstall] - Failed to clear task history:', err); - } - - // Also delete any other config files that might exist - const userDataPath = app.getPath('userData'); - const filesToRemove = ['config.json', '.install-marker.json']; - - for (const file of filesToRemove) { - const filePath = path.join(userDataPath, file); - try { - if (fs.existsSync(filePath)) { - fs.unlinkSync(filePath); - console.log(`[FreshInstall] - Removed: ${file}`); - } - } catch (err) { - console.error(`[FreshInstall] - Failed to remove ${file}:`, err); - } - } - - // Remove legacy data files from known previous locations - const legacyDirs = getKnownUserDataDirs().filter((dir) => dir !== userDataPath); - const legacyFiles = ['app-settings.json', 'task-history.json', 'config.json', '.install-marker.json']; - for (const dir of legacyDirs) { - for (const file of legacyFiles) { - const filePath = path.join(dir, file); - try { - if (fs.existsSync(filePath)) { - fs.unlinkSync(filePath); - console.log(`[FreshInstall] - Removed legacy ${file} from ${dir}`); - } - } catch (err) { - console.error(`[FreshInstall] - Failed to remove legacy ${file} from ${dir}:`, err); - } - } - } - - // Clear secure storage (API keys stored via electron-store + safeStorage) - try { - clearSecureStorage(); - console.log('[FreshInstall] - Cleared secure storage'); - } catch (err) { - console.error('[FreshInstall] - Failed to clear secure storage:', err); - } - - console.log('[FreshInstall] Previous installation data cleared'); -} - -/** - * Check if this is a fresh install after a previous installation and perform cleanup - * - * Call this early in the app startup, before any stores are initialized. - * Returns true if cleanup was performed. - */ -export async function checkAndCleanupFreshInstall(): Promise { - // Skip in development mode - if (!app.isPackaged) { - console.log('[FreshInstall] Skipping fresh install check in dev mode'); - return false; - } - - const bundleMtime = getAppBundleMtime(); - if (!bundleMtime) { - console.log('[FreshInstall] Could not determine bundle mtime, skipping check'); - return false; - } - - const currentMtimeStr = bundleMtime.toISOString(); - const currentVersion = app.getVersion(); - const existingMarker = readInstallMarker(); - - // Case 1: No marker exists - if (!existingMarker) { - // Check if there's existing user data (from a previous install) - const hadExistingData = hasExistingUserData(); - if (hadExistingData) { - console.log('[FreshInstall] Found existing data but no install marker - this is a reinstall'); - clearPreviousInstallData(); - } else { - console.log('[FreshInstall] First time install (no previous data)'); - } - - // Create the install marker - writeInstallMarker({ - bundleMtime: currentMtimeStr, - version: currentVersion, - markerCreated: new Date().toISOString(), - }); - - return hadExistingData; - } - - // Case 2: Marker exists, check if bundle has changed - if (existingMarker.bundleMtime !== currentMtimeStr) { - console.log('[FreshInstall] App bundle has changed since last run'); - console.log(`[FreshInstall] Previous: ${existingMarker.bundleMtime}`); - console.log(`[FreshInstall] Current: ${currentMtimeStr}`); - - // Clear old data - clearPreviousInstallData(); - - // Update the marker - writeInstallMarker({ - bundleMtime: currentMtimeStr, - version: currentVersion, - markerCreated: new Date().toISOString(), - }); - - return true; - } - - // Case 3: Same installation, no cleanup needed - console.log('[FreshInstall] Same installation detected, no cleanup needed'); - return false; -} diff --git a/openwork-memos-integration/apps/desktop/src/main/store/providerSettings.ts b/openwork-memos-integration/apps/desktop/src/main/store/providerSettings.ts deleted file mode 100644 index 3d127fd44..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/store/providerSettings.ts +++ /dev/null @@ -1,125 +0,0 @@ -// apps/desktop/src/main/store/providerSettings.ts - -import Store from 'electron-store'; -import type { ProviderSettings, ProviderId, ConnectedProvider } from '@accomplish/shared'; - -const DEFAULT_SETTINGS: ProviderSettings = { - activeProviderId: null, - connectedProviders: {}, - debugMode: false, -}; - -const providerSettingsStore = new Store({ - name: 'provider-settings', - defaults: DEFAULT_SETTINGS, -}); - -export function getProviderSettings(): ProviderSettings { - return { - activeProviderId: providerSettingsStore.get('activeProviderId') ?? null, - connectedProviders: providerSettingsStore.get('connectedProviders') ?? {}, - debugMode: providerSettingsStore.get('debugMode') ?? false, - }; -} - -export function setActiveProvider(providerId: ProviderId | null): void { - providerSettingsStore.set('activeProviderId', providerId); -} - -export function getActiveProviderId(): ProviderId | null { - return providerSettingsStore.get('activeProviderId'); -} - -export function getConnectedProvider(providerId: ProviderId): ConnectedProvider | null { - const providers = providerSettingsStore.get('connectedProviders'); - return providers[providerId] ?? null; -} - -export function setConnectedProvider(providerId: ProviderId, provider: ConnectedProvider): void { - const providers = providerSettingsStore.get('connectedProviders'); - providerSettingsStore.set('connectedProviders', { - ...providers, - [providerId]: provider, - }); -} - -export function removeConnectedProvider(providerId: ProviderId): void { - const providers = providerSettingsStore.get('connectedProviders'); - const { [providerId]: _, ...rest } = providers; - providerSettingsStore.set('connectedProviders', rest); - - // If this was the active provider, clear it - if (providerSettingsStore.get('activeProviderId') === providerId) { - providerSettingsStore.set('activeProviderId', null); - } -} - -export function updateProviderModel(providerId: ProviderId, modelId: string | null): void { - const provider = getConnectedProvider(providerId); - if (provider) { - setConnectedProvider(providerId, { - ...provider, - selectedModelId: modelId, - }); - } -} - -export function setProviderDebugMode(enabled: boolean): void { - providerSettingsStore.set('debugMode', enabled); -} - -export function getProviderDebugMode(): boolean { - return providerSettingsStore.get('debugMode'); -} - -export function clearProviderSettings(): void { - providerSettingsStore.clear(); -} - -/** - * Get the active provider's model for CLI args - * Returns null if no active provider or no model selected - */ -export function getActiveProviderModel(): { provider: ProviderId; model: string; baseUrl?: string } | null { - const settings = getProviderSettings(); - const activeId = settings.activeProviderId; - - if (!activeId) return null; - - const activeProvider = settings.connectedProviders[activeId]; - if (!activeProvider || !activeProvider.selectedModelId) return null; - - const result: { provider: ProviderId; model: string; baseUrl?: string } = { - provider: activeId, - model: activeProvider.selectedModelId, - }; - - // Add baseUrl for Ollama/LiteLLM - if (activeProvider.credentials.type === 'ollama') { - result.baseUrl = activeProvider.credentials.serverUrl; - } else if (activeProvider.credentials.type === 'litellm') { - result.baseUrl = activeProvider.credentials.serverUrl; - } - - return result; -} - -/** - * Check if any provider is ready (connected with model selected) - */ -export function hasReadyProvider(): boolean { - const settings = getProviderSettings(); - return Object.values(settings.connectedProviders).some( - p => p && p.connectionStatus === 'connected' && p.selectedModelId !== null - ); -} - -/** - * Get all connected provider IDs for enabled_providers config - */ -export function getConnectedProviderIds(): ProviderId[] { - const settings = getProviderSettings(); - return Object.values(settings.connectedProviders) - .filter((p): p is ConnectedProvider => p !== undefined && p.connectionStatus === 'connected') - .map(p => p.providerId); -} diff --git a/openwork-memos-integration/apps/desktop/src/main/store/secureStorage.ts b/openwork-memos-integration/apps/desktop/src/main/store/secureStorage.ts deleted file mode 100644 index 5f4e05297..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/store/secureStorage.ts +++ /dev/null @@ -1,269 +0,0 @@ -import Store from 'electron-store'; -import { app } from 'electron'; -import * as crypto from 'crypto'; -import * as os from 'os'; - -/** - * Secure storage using electron-store with custom AES-256-GCM encryption. - * - * This implementation derives an encryption key from machine-specific values - * (hostname, platform, user home directory, app path) to avoid macOS Keychain - * prompts while still providing reasonable security for API keys. - * - * Security considerations: - * - Keys are encrypted at rest using AES-256-GCM - * - Encryption key is derived from machine-specific data (not stored) - * - Less secure than Keychain (key derivation could be reverse-engineered) - * - Suitable for API keys that can be rotated if compromised - */ - -// Use different store names for dev vs production to avoid conflicts -const getStoreName = () => (app.isPackaged ? 'secure-storage' : 'secure-storage-dev'); - -interface SecureStorageSchema { - /** Encrypted values stored as base64 strings (format: iv:authTag:ciphertext) */ - values: Record; - /** Salt for key derivation (generated once per installation) */ - salt?: string; -} - -// Lazy initialization to ensure app is ready -let _secureStore: Store | null = null; -let _derivedKey: Buffer | null = null; - -function getSecureStore(): Store { - if (!_secureStore) { - _secureStore = new Store({ - name: getStoreName(), - defaults: { values: {} }, - }); - } - return _secureStore; -} - -/** - * Get or create a salt for key derivation. - * The salt is stored in the config file and generated once per installation. - */ -function getSalt(): Buffer { - const store = getSecureStore(); - let saltBase64 = store.get('salt'); - - if (!saltBase64) { - // Generate a new random salt - const salt = crypto.randomBytes(32); - saltBase64 = salt.toString('base64'); - store.set('salt', saltBase64); - } - - return Buffer.from(saltBase64, 'base64'); -} - -/** - * Derive an encryption key from machine-specific data. - * This is deterministic for the same machine/installation. - * - * Note: We avoid hostname as it can be changed by users (renaming laptop). - */ -function getDerivedKey(): Buffer { - if (_derivedKey) { - return _derivedKey; - } - - // Combine machine-specific values to create a unique identifier - const machineData = [ - os.platform(), - os.homedir(), - os.userInfo().username, - app.getPath('userData'), - 'ai.accomplish.desktop', // App identifier - ].join(':'); - - const salt = getSalt(); - - // Use PBKDF2 to derive a 256-bit key - _derivedKey = crypto.pbkdf2Sync( - machineData, - salt, - 100000, // iterations - 32, // key length (256 bits) - 'sha256' - ); - - return _derivedKey; -} - -/** - * Encrypt a string using AES-256-GCM. - * Returns format: iv:authTag:ciphertext (all base64) - */ -function encryptValue(value: string): string { - const key = getDerivedKey(); - const iv = crypto.randomBytes(12); // GCM recommended IV size - - const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); - - let encrypted = cipher.update(value, 'utf8', 'base64'); - encrypted += cipher.final('base64'); - - const authTag = cipher.getAuthTag(); - - // Format: iv:authTag:ciphertext - return `${iv.toString('base64')}:${authTag.toString('base64')}:${encrypted}`; -} - -/** - * Decrypt a value encrypted with encryptValue. - */ -function decryptValue(encryptedData: string): string | null { - try { - const parts = encryptedData.split(':'); - if (parts.length !== 3) { - // Invalid format - return null; - } - - const [ivBase64, authTagBase64, ciphertext] = parts; - const key = getDerivedKey(); - const iv = Buffer.from(ivBase64, 'base64'); - const authTag = Buffer.from(authTagBase64, 'base64'); - - const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv); - decipher.setAuthTag(authTag); - - let decrypted = decipher.update(ciphertext, 'base64', 'utf8'); - decrypted += decipher.final('utf8'); - - return decrypted; - } catch { - // Decryption failed (wrong key, corrupted data, etc.) - // Don't log error details to avoid leaking sensitive context - return null; - } -} - -/** - * Store an API key securely - */ -export function storeApiKey(provider: string, apiKey: string): void { - const store = getSecureStore(); - const encrypted = encryptValue(apiKey); - const values = store.get('values'); - values[`apiKey:${provider}`] = encrypted; - store.set('values', values); -} - -/** - * Retrieve an API key - */ -export function getApiKey(provider: string): string | null { - const store = getSecureStore(); - const values = store.get('values'); - if (!values) { - return null; - } - const encrypted = values[`apiKey:${provider}`]; - if (!encrypted) { - return null; - } - return decryptValue(encrypted); -} - -/** - * Delete an API key - */ -export function deleteApiKey(provider: string): boolean { - const store = getSecureStore(); - const values = store.get('values'); - const key = `apiKey:${provider}`; - if (!(key in values)) { - return false; - } - delete values[key]; - store.set('values', values); - return true; -} - -/** - * Supported API key providers - */ -export type ApiKeyProvider = 'anthropic' | 'openai' | 'openrouter' | 'google' | 'xai' | 'deepseek' | 'zai' | 'custom' | 'bedrock' | 'litellm'; - -/** - * Get all API keys for all providers - */ -export async function getAllApiKeys(): Promise> { - const [anthropic, openai, openrouter, google, xai, deepseek, zai, custom, bedrock, litellm] = await Promise.all([ - getApiKey('anthropic'), - getApiKey('openai'), - getApiKey('openrouter'), - getApiKey('google'), - getApiKey('xai'), - getApiKey('deepseek'), - getApiKey('zai'), - getApiKey('custom'), - getApiKey('bedrock'), - getApiKey('litellm'), - ]); - - return { anthropic, openai, openrouter, google, xai, deepseek, zai, custom, bedrock, litellm }; -} - -/** - * Store Bedrock credentials (JSON stringified) - */ -export function storeBedrockCredentials(credentials: string): void { - storeApiKey('bedrock', credentials); -} - -/** - * Get Bedrock credentials (returns parsed object or null) - */ -export function getBedrockCredentials(): Record | null { - const stored = getApiKey('bedrock'); - if (!stored) return null; - try { - return JSON.parse(stored); - } catch { - return null; - } -} - -/** - * Check if any API key is stored - */ -export async function hasAnyApiKey(): Promise { - const keys = await getAllApiKeys(); - return Object.values(keys).some((k) => k !== null); -} - -/** - * List all stored credentials for this service - * Returns key names with their (decrypted) values - */ -export function listStoredCredentials(): Array<{ account: string; password: string }> { - const store = getSecureStore(); - const values = store.get('values'); - const credentials: Array<{ account: string; password: string }> = []; - - for (const key of Object.keys(values)) { - const decrypted = decryptValue(values[key]); - if (decrypted) { - credentials.push({ - account: key, - password: decrypted, - }); - } - } - - return credentials; -} - -/** - * Clear all secure storage (used during fresh install cleanup) - */ -export function clearSecureStorage(): void { - const store = getSecureStore(); - store.clear(); - _derivedKey = null; // Clear cached key -} diff --git a/openwork-memos-integration/apps/desktop/src/main/store/taskHistory.ts b/openwork-memos-integration/apps/desktop/src/main/store/taskHistory.ts deleted file mode 100644 index 67e8b93e2..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/store/taskHistory.ts +++ /dev/null @@ -1,224 +0,0 @@ -import Store from 'electron-store'; -import type { Task, TaskMessage, TaskStatus } from '@accomplish/shared'; - -/** - * Task entry stored in history - */ -export interface StoredTask { - id: string; - prompt: string; - /** AI-generated short summary of the task (displayed in history) */ - summary?: string; - status: TaskStatus; - messages: TaskMessage[]; - sessionId?: string; - createdAt: string; - startedAt?: string; - completedAt?: string; -} - -interface TaskHistorySchema { - tasks: StoredTask[]; - maxHistoryItems: number; -} - -const taskHistoryStore = new Store({ - name: 'task-history', - defaults: { - tasks: [], - maxHistoryItems: 100, - }, -}); - -const PERSIST_DEBOUNCE_MS = 250; -let pendingTasks: StoredTask[] | null = null; -let persistTimeout: NodeJS.Timeout | null = null; - -function getCurrentTasks(): StoredTask[] { - return pendingTasks ?? taskHistoryStore.get('tasks') ?? []; -} - -function schedulePersist(tasks: StoredTask[]): void { - pendingTasks = tasks; - if (persistTimeout) { - return; - } - persistTimeout = setTimeout(() => { - if (pendingTasks) { - taskHistoryStore.set('tasks', pendingTasks); - pendingTasks = null; - } - persistTimeout = null; - }, PERSIST_DEBOUNCE_MS); -} - -/** - * Immediately flush any pending task history writes to disk. - * Call this on app shutdown (e.g., 'before-quit' event) to prevent data loss. - */ -export function flushPendingTasks(): void { - if (persistTimeout) { - clearTimeout(persistTimeout); - persistTimeout = null; - } - if (pendingTasks) { - taskHistoryStore.set('tasks', pendingTasks); - pendingTasks = null; - } -} - -/** - * Get all tasks from history - */ -export function getTasks(): StoredTask[] { - return getCurrentTasks(); -} - -/** - * Get a specific task by ID - */ -export function getTask(taskId: string): StoredTask | undefined { - const tasks = getCurrentTasks(); - return tasks.find((t) => t.id === taskId); -} - -/** - * Save a new task to history - */ -export function saveTask(task: Task): void { - const tasks = getCurrentTasks(); - const maxItems = taskHistoryStore.get('maxHistoryItems'); - - const storedTask: StoredTask = { - id: task.id, - prompt: task.prompt, - summary: task.summary, - status: task.status, - messages: task.messages || [], - sessionId: task.sessionId, - createdAt: task.createdAt, - startedAt: task.startedAt, - completedAt: task.completedAt, - }; - - // Check if task already exists (update it) - const existingIndex = tasks.findIndex((t) => t.id === task.id); - if (existingIndex >= 0) { - tasks[existingIndex] = storedTask; - } else { - // Add new task at the beginning - tasks.unshift(storedTask); - } - - // Limit history size - if (tasks.length > maxItems) { - tasks.splice(maxItems); - } - - schedulePersist([...tasks]); -} - -/** - * Update a task's status - */ -export function updateTaskStatus( - taskId: string, - status: StoredTask['status'], - completedAt?: string -): void { - const tasks = getCurrentTasks(); - const taskIndex = tasks.findIndex((t) => t.id === taskId); - - if (taskIndex >= 0) { - tasks[taskIndex].status = status; - if (completedAt) { - tasks[taskIndex].completedAt = completedAt; - } - schedulePersist([...tasks]); - } -} - -/** - * Add a message to a task - */ -export function addTaskMessage(taskId: string, message: TaskMessage): void { - const tasks = getCurrentTasks(); - const taskIndex = tasks.findIndex((t) => t.id === taskId); - - if (taskIndex >= 0) { - tasks[taskIndex].messages.push(message); - schedulePersist([...tasks]); - } -} - -/** - * Update task's session ID - */ -export function updateTaskSessionId(taskId: string, sessionId: string): void { - const tasks = getCurrentTasks(); - const taskIndex = tasks.findIndex((t) => t.id === taskId); - - if (taskIndex >= 0) { - tasks[taskIndex].sessionId = sessionId; - schedulePersist([...tasks]); - } -} - -/** - * Update task's AI-generated summary - */ -export function updateTaskSummary(taskId: string, summary: string): void { - const tasks = getCurrentTasks(); - const taskIndex = tasks.findIndex((t) => t.id === taskId); - - if (taskIndex >= 0) { - tasks[taskIndex].summary = summary; - schedulePersist([...tasks]); - } -} - -/** - * Delete a task from history - */ -export function deleteTask(taskId: string): void { - const tasks = getCurrentTasks(); - const filteredTasks = tasks.filter((t) => t.id !== taskId); - schedulePersist(filteredTasks); -} - -/** - * Clear all task history - */ -export function clearHistory(): void { - schedulePersist([]); -} - -/** - * Set maximum history items - */ -export function setMaxHistoryItems(max: number): void { - taskHistoryStore.set('maxHistoryItems', max); - - // Trim existing history if needed - const tasks = getCurrentTasks(); - if (tasks.length > max) { - tasks.splice(max); - schedulePersist([...tasks]); - } -} - -/** - * Clear all task history data (reset store to defaults) - * Used during fresh install cleanup - */ -export function clearTaskHistoryStore(): void { - // Clear any pending writes - if (persistTimeout) { - clearTimeout(persistTimeout); - persistTimeout = null; - } - pendingTasks = null; - - // Clear the store (resets to defaults) - taskHistoryStore.clear(); -} diff --git a/openwork-memos-integration/apps/desktop/src/main/test-utils/mock-task-flow.ts b/openwork-memos-integration/apps/desktop/src/main/test-utils/mock-task-flow.ts deleted file mode 100644 index 5390b60bf..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/test-utils/mock-task-flow.ts +++ /dev/null @@ -1,363 +0,0 @@ -/** - * Mock task flow utilities for E2E testing. - * Simulates IPC events without spawning real PTY processes. - */ -import { BrowserWindow } from 'electron'; -import type { Task, TaskMessage, TaskStatus } from '@accomplish/shared'; -import { updateTaskStatus } from '../store/taskHistory'; - -// ============================================================================ -// Types -// ============================================================================ - -export type MockScenario = - | 'success' - | 'with-tool' - | 'permission-required' - | 'question' - | 'error' - | 'interrupted'; - -export interface MockTaskConfig { - taskId: string; - prompt: string; - scenario: MockScenario; - /** Delay between events in milliseconds */ - delayMs?: number; -} - -// ============================================================================ -// E2E Mode Detection -// ============================================================================ - -/** - * Check if mock task events mode is enabled. - * Can be set via global flag, CLI arg, or environment variable. - */ -export function isMockTaskEventsEnabled(): boolean { - return ( - (global as Record).E2E_MOCK_TASK_EVENTS === true || - process.env.E2E_MOCK_TASK_EVENTS === '1' - ); -} - -// ============================================================================ -// Scenario Detection -// ============================================================================ - -/** - * Keywords that trigger specific test scenarios. - * Using explicit prefixes to avoid false positives from natural language. - */ -const SCENARIO_KEYWORDS: Record = { - success: ['__e2e_success__', 'test success'], - 'with-tool': ['__e2e_tool__', 'use tool', 'search files'], - 'permission-required': ['__e2e_permission__', 'write file', 'create file'], - question: ['__e2e_question__'], - error: ['__e2e_error__', 'cause error', 'trigger failure'], - interrupted: ['__e2e_interrupt__', 'stop task', 'cancel task'], -}; - -/** - * Detect the appropriate mock scenario from the prompt text. - * Checks for explicit keywords in priority order. - */ -export function detectScenarioFromPrompt(prompt: string): MockScenario { - const promptLower = prompt.toLowerCase(); - - // Check scenarios in priority order (error/interrupt first to handle edge cases) - const priorityOrder: MockScenario[] = [ - 'error', - 'interrupted', - 'question', - 'permission-required', - 'with-tool', - 'success', - ]; - - for (const scenario of priorityOrder) { - const keywords = SCENARIO_KEYWORDS[scenario]; - if (keywords.some(keyword => promptLower.includes(keyword.toLowerCase()))) { - return scenario; - } - } - - // Default to success - return 'success'; -} - -// ============================================================================ -// Utility Functions -// ============================================================================ - -function createMessageId(): string { - return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`; -} - -function sleep(ms: number): Promise { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -// ============================================================================ -// Mock Task Execution -// ============================================================================ - -/** - * Execute a mock task flow by emitting simulated IPC events. - * This allows E2E tests to verify UI behavior without real API calls. - */ -export async function executeMockTaskFlow( - window: BrowserWindow, - config: MockTaskConfig -): Promise { - const { taskId, prompt, scenario, delayMs = 100 } = config; - - // Verify window is still valid - if (window.isDestroyed()) { - console.warn('[MockTaskFlow] Window destroyed, skipping mock flow'); - return; - } - - const sendEvent = (channel: string, data: unknown) => { - if (!window.isDestroyed()) { - window.webContents.send(channel, data); - } - }; - - // Initial progress event - sendEvent('task:progress', { taskId, stage: 'init' }); - await sleep(delayMs); - - // Assistant acknowledgment message - sendEvent('task:update', { - taskId, - type: 'message', - message: { - id: createMessageId(), - type: 'assistant', - content: `I'll help you with: ${prompt}`, - timestamp: new Date().toISOString(), - }, - }); - await sleep(delayMs); - - // Execute scenario-specific flow - await executeScenario(sendEvent, taskId, scenario, delayMs); -} - -/** - * Execute the scenario-specific event sequence. - */ -async function executeScenario( - sendEvent: (channel: string, data: unknown) => void, - taskId: string, - scenario: MockScenario, - delayMs: number -): Promise { - switch (scenario) { - case 'success': - await executeSuccessScenario(sendEvent, taskId, delayMs); - break; - - case 'with-tool': - await executeToolScenario(sendEvent, taskId, delayMs); - break; - - case 'permission-required': - executePermissionScenario(sendEvent, taskId); - break; - - case 'question': - executeQuestionScenario(sendEvent, taskId); - break; - - case 'error': - executeErrorScenario(sendEvent, taskId); - break; - - case 'interrupted': - await executeInterruptedScenario(sendEvent, taskId, delayMs); - break; - } -} - -async function executeSuccessScenario( - sendEvent: (channel: string, data: unknown) => void, - taskId: string, - delayMs: number -): Promise { - sendEvent('task:update', { - taskId, - type: 'message', - message: { - id: createMessageId(), - type: 'assistant', - content: 'Task completed successfully.', - timestamp: new Date().toISOString(), - }, - }); - await sleep(delayMs); - - // Update task history status before sending completion event - updateTaskStatus(taskId, 'completed', new Date().toISOString()); - - sendEvent('task:update', { - taskId, - type: 'complete', - result: { status: 'success', sessionId: `session_${taskId}` }, - }); -} - -async function executeToolScenario( - sendEvent: (channel: string, data: unknown) => void, - taskId: string, - delayMs: number -): Promise { - // Simulate tool usage - sendEvent('task:update:batch', { - taskId, - messages: [ - { - id: createMessageId(), - type: 'tool', - content: 'Reading files', - toolName: 'Read', - timestamp: new Date().toISOString(), - }, - { - id: createMessageId(), - type: 'tool', - content: 'Searching code', - toolName: 'Grep', - timestamp: new Date().toISOString(), - }, - ], - }); - await sleep(delayMs * 2); - - sendEvent('task:update', { - taskId, - type: 'message', - message: { - id: createMessageId(), - type: 'assistant', - content: 'Found the information using available tools.', - timestamp: new Date().toISOString(), - }, - }); - await sleep(delayMs); - - // Update task history status before sending completion event - updateTaskStatus(taskId, 'completed', new Date().toISOString()); - - sendEvent('task:update', { - taskId, - type: 'complete', - result: { status: 'success', sessionId: `session_${taskId}` }, - }); -} - -function executePermissionScenario( - sendEvent: (channel: string, data: unknown) => void, - taskId: string -): void { - // Send permission request - task waits for user response - // Tests should call permission:respond to continue the flow - sendEvent('permission:request', { - id: `perm_${Date.now()}`, - taskId, - type: 'file', - question: 'Allow file write?', - toolName: 'Write', - fileOperation: 'create', - filePath: '/test/output.txt', - timestamp: new Date().toISOString(), - }); -} - -function executeQuestionScenario( - sendEvent: (channel: string, data: unknown) => void, - taskId: string -): void { - // Send question permission request - task waits for user to select an option - sendEvent('permission:request', { - id: `perm_${Date.now()}`, - taskId, - type: 'question', - header: 'Test Question', - question: 'Which option do you prefer?', - options: [ - { label: 'Option A', description: 'First option for testing' }, - { label: 'Option B', description: 'Second option for testing' }, - { label: 'Other', description: 'Enter a custom response' }, - ], - multiSelect: false, - timestamp: new Date().toISOString(), - }); -} - -function executeErrorScenario( - sendEvent: (channel: string, data: unknown) => void, - taskId: string -): void { - // Update task history status before sending error event - updateTaskStatus(taskId, 'failed', new Date().toISOString()); - - sendEvent('task:update', { - taskId, - type: 'error', - error: 'Command execution failed: File not found', - }); -} - -async function executeInterruptedScenario( - sendEvent: (channel: string, data: unknown) => void, - taskId: string, - delayMs: number -): Promise { - sendEvent('task:update', { - taskId, - type: 'message', - message: { - id: createMessageId(), - type: 'assistant', - content: 'Task was interrupted by user.', - timestamp: new Date().toISOString(), - }, - }); - await sleep(delayMs); - - // Update task history status before sending completion event - updateTaskStatus(taskId, 'interrupted', new Date().toISOString()); - - sendEvent('task:update', { - taskId, - type: 'complete', - result: { status: 'interrupted', sessionId: `session_${taskId}` }, - }); -} - -// ============================================================================ -// Task Creation -// ============================================================================ - -/** - * Create a mock Task object for immediate return from task:start handler. - */ -export function createMockTask(taskId: string, prompt: string): Task { - const initialMessage: TaskMessage = { - id: createMessageId(), - type: 'user', - content: prompt, - timestamp: new Date().toISOString(), - }; - - return { - id: taskId, - prompt, - status: 'running', - messages: [initialMessage], - createdAt: new Date().toISOString(), - startedAt: new Date().toISOString(), - }; -} diff --git a/openwork-memos-integration/apps/desktop/src/main/utils/bundled-node.ts b/openwork-memos-integration/apps/desktop/src/main/utils/bundled-node.ts deleted file mode 100644 index 41e12ecbd..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/utils/bundled-node.ts +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Utility module for accessing bundled Node.js binaries. - * - * The app bundles standalone Node.js v20.18.1 binaries to ensure - * MCP servers and CLI tools work regardless of the user's system configuration. - */ - -import { app } from 'electron'; -import path from 'path'; -import fs from 'fs'; - -const NODE_VERSION = '20.18.1'; - -export interface BundledNodePaths { - /** Path to the node executable */ - nodePath: string; - /** Path to the npm executable */ - npmPath: string; - /** Path to the npx executable */ - npxPath: string; - /** Directory containing the node binary */ - binDir: string; - /** Root directory of the Node.js installation */ - nodeDir: string; -} - -/** - * Get paths to the bundled Node.js binaries. - * - * In packaged apps, returns paths to the bundled Node.js installation. - * In development mode, returns null (use system Node.js). - * - * @returns Paths to bundled Node.js binaries, or null if not available - */ -export function getBundledNodePaths(): BundledNodePaths | null { - if (!app.isPackaged) { - // In development, use system Node - return null; - } - - const platform = process.platform; // 'darwin', 'win32', 'linux' - const arch = process.arch; // 'x64', 'arm64' - - const isWindows = platform === 'win32'; - const ext = isWindows ? '.exe' : ''; - const scriptExt = isWindows ? '.cmd' : ''; - - // Node.js directory is architecture-specific - const nodeDir = path.join( - process.resourcesPath, - 'nodejs', - arch // 'x64' or 'arm64' subdirectory - ); - - const binDir = isWindows ? nodeDir : path.join(nodeDir, 'bin'); - - return { - nodePath: path.join(binDir, `node${ext}`), - npmPath: path.join(binDir, `npm${scriptExt}`), - npxPath: path.join(binDir, `npx${scriptExt}`), - binDir, - nodeDir, - }; -} - -/** - * Check if bundled Node.js is available and accessible. - * - * @returns true if bundled Node.js exists and is accessible - */ -export function isBundledNodeAvailable(): boolean { - const paths = getBundledNodePaths(); - if (!paths) { - return false; - } - return fs.existsSync(paths.nodePath); -} - -/** - * Get the node binary path (bundled or system fallback). - * - * In packaged apps, returns the bundled node path. - * In development or if bundled node is unavailable, returns 'node' to use system PATH. - * - * @returns Absolute path to node binary or 'node' for system fallback - */ -export function getNodePath(): string { - const bundled = getBundledNodePaths(); - if (bundled && fs.existsSync(bundled.nodePath)) { - return bundled.nodePath; - } - // Warn if falling back to system node in packaged app (unexpected) - if (app.isPackaged) { - console.warn('[Bundled Node] WARNING: Bundled Node.js not found, falling back to system node'); - } - return 'node'; // Fallback to system node -} - -/** - * Get the npm binary path (bundled or system fallback). - * - * @returns Absolute path to npm binary or 'npm' for system fallback - */ -export function getNpmPath(): string { - const bundled = getBundledNodePaths(); - if (bundled && fs.existsSync(bundled.npmPath)) { - return bundled.npmPath; - } - if (app.isPackaged) { - console.warn('[Bundled Node] WARNING: Bundled npm not found, falling back to system npm'); - } - return 'npm'; // Fallback to system npm -} - -/** - * Get the npx binary path (bundled or system fallback). - * - * @returns Absolute path to npx binary or 'npx' for system fallback - */ -export function getNpxPath(): string { - const bundled = getBundledNodePaths(); - if (bundled && fs.existsSync(bundled.npxPath)) { - return bundled.npxPath; - } - if (app.isPackaged) { - console.warn('[Bundled Node] WARNING: Bundled npx not found, falling back to system npx'); - } - return 'npx'; // Fallback to system npx -} - -/** - * Log information about the bundled Node.js for debugging. - */ -export function logBundledNodeInfo(): void { - const paths = getBundledNodePaths(); - - if (!paths) { - console.log('[Bundled Node] Development mode - using system Node.js'); - return; - } - - console.log('[Bundled Node] Configuration:'); - console.log(` Platform: ${process.platform}`); - console.log(` Architecture: ${process.arch}`); - console.log(` Node directory: ${paths.nodeDir}`); - console.log(` Node path: ${paths.nodePath}`); - console.log(` Available: ${fs.existsSync(paths.nodePath)}`); -} diff --git a/openwork-memos-integration/apps/desktop/src/main/utils/system-path.ts b/openwork-memos-integration/apps/desktop/src/main/utils/system-path.ts deleted file mode 100644 index 5c7d0a473..000000000 --- a/openwork-memos-integration/apps/desktop/src/main/utils/system-path.ts +++ /dev/null @@ -1,230 +0,0 @@ -/** - * System PATH utilities for macOS packaged apps - * - * macOS GUI apps launched from /Applications don't inherit the user's terminal PATH. - * This module provides utilities to build a proper PATH without loading shell profiles, - * which avoids triggering macOS folder access permissions (TCC). - * - * We use two approaches: - * 1. /usr/libexec/path_helper - macOS official utility that reads /etc/paths and /etc/paths.d - * 2. Common Node.js installation paths - covers NVM, Volta, asdf, Homebrew, etc. - */ - -import { execSync } from 'child_process'; -import * as fs from 'fs'; -import * as path from 'path'; - -/** - * Get NVM Node.js version paths. - * NVM stores versions in ~/.nvm/versions/node/vX.X.X/bin/ - * Returns paths sorted by version (newest first). - */ -function getNvmNodePaths(): string[] { - const home = process.env.HOME || ''; - const nvmVersionsDir = path.join(home, '.nvm', 'versions', 'node'); - - if (!fs.existsSync(nvmVersionsDir)) { - return []; - } - - try { - const versions = fs.readdirSync(nvmVersionsDir) - .filter(name => name.startsWith('v')) - .sort((a, b) => { - // Sort by version number (descending - newest first) - const parseVersion = (v: string) => { - const parts = v.replace('v', '').split('.').map(Number); - return parts[0] * 10000 + (parts[1] || 0) * 100 + (parts[2] || 0); - }; - return parseVersion(b) - parseVersion(a); - }); - - return versions.map(v => path.join(nvmVersionsDir, v, 'bin')); - } catch { - return []; - } -} - -/** - * Get fnm Node.js version paths. - * fnm stores versions in ~/.fnm/node-versions/vX.X.X/installation/bin/ - */ -function getFnmNodePaths(): string[] { - const home = process.env.HOME || ''; - const fnmVersionsDir = path.join(home, '.fnm', 'node-versions'); - - if (!fs.existsSync(fnmVersionsDir)) { - return []; - } - - try { - const versions = fs.readdirSync(fnmVersionsDir) - .filter(name => name.startsWith('v')) - .sort((a, b) => { - const parseVersion = (v: string) => { - const parts = v.replace('v', '').split('.').map(Number); - return parts[0] * 10000 + (parts[1] || 0) * 100 + (parts[2] || 0); - }; - return parseVersion(b) - parseVersion(a); - }); - - return versions.map(v => path.join(fnmVersionsDir, v, 'installation', 'bin')); - } catch { - return []; - } -} - -/** - * Common Node.js installation paths on macOS. - * These are checked in order of preference. - */ -function getCommonNodePaths(): string[] { - const home = process.env.HOME || ''; - - // Get dynamic paths from version managers - const nvmPaths = getNvmNodePaths(); - const fnmPaths = getFnmNodePaths(); - - return [ - // Version managers (dynamic - most specific, checked first) - ...nvmPaths, - ...fnmPaths, - - // Homebrew (very common) - '/opt/homebrew/bin', // Apple Silicon - '/usr/local/bin', // Intel Mac - - // Version managers (static fallbacks) - `${home}/.nvm/current/bin`, // NVM with 'current' symlink (optional) - `${home}/.volta/bin`, // Volta - `${home}/.asdf/shims`, // asdf - `${home}/.fnm/current/bin`, // fnm current symlink (optional) - `${home}/.nodenv/shims`, // nodenv - - // Less common but valid paths - '/usr/local/opt/node/bin', // Homebrew node formula - '/opt/local/bin', // MacPorts - `${home}/.local/bin`, // pip/pipx style installations - ].filter(p => p && !p.includes('undefined')); -} - -/** - * Get system PATH using macOS path_helper utility. - * This reads from /etc/paths and /etc/paths.d without loading user shell profiles. - * - * @returns The system PATH or null if path_helper fails - */ -function getSystemPathFromPathHelper(): string | null { - if (process.platform !== 'darwin') { - return null; - } - - try { - // path_helper outputs: PATH="..."; export PATH; - // We need to extract just the path value - const output = execSync('/usr/libexec/path_helper -s', { - encoding: 'utf-8', - timeout: 5000, - }); - - // Parse the output: PATH="/usr/local/bin:/usr/bin:..."; export PATH; - const match = output.match(/PATH="([^"]+)"/); - if (match && match[1]) { - return match[1]; - } - } catch (err) { - console.warn('[SystemPath] path_helper failed:', err); - } - - return null; -} - -/** - * Build an extended PATH for finding Node.js tools (node, npm, npx) in packaged apps. - * - * This function: - * 1. Gets the system PATH from path_helper (includes Homebrew if in /etc/paths.d) - * 2. Prepends common Node.js installation paths - * 3. Does NOT load user shell profiles (avoids TCC permission prompts) - * - * @param basePath - The base PATH to extend (defaults to process.env.PATH) - * @returns Extended PATH string - */ -export function getExtendedNodePath(basePath?: string): string { - const base = basePath || process.env.PATH || ''; - - if (process.platform !== 'darwin') { - // On non-macOS, just return the base PATH - return base; - } - - // Start with common Node.js paths - const nodePaths = getCommonNodePaths(); - - // Try to get system PATH from path_helper - const systemPath = getSystemPathFromPathHelper(); - - // Build the final PATH: - // 1. Common Node.js paths (highest priority - finds user's preferred Node) - // 2. System PATH from path_helper (includes /etc/paths.d entries) - // 3. Base PATH (fallback) - const pathParts: string[] = []; - - // Add common Node.js paths - for (const p of nodePaths) { - if (fs.existsSync(p) && !pathParts.includes(p)) { - pathParts.push(p); - } - } - - // Add system PATH from path_helper - if (systemPath) { - for (const p of systemPath.split(':')) { - if (p && !pathParts.includes(p)) { - pathParts.push(p); - } - } - } - - // Add base PATH entries - for (const p of base.split(':')) { - if (p && !pathParts.includes(p)) { - pathParts.push(p); - } - } - - return pathParts.join(':'); -} - -/** - * Check if a command exists in the given PATH. - * - * @param command - The command to find (e.g., 'npx', 'node') - * @param searchPath - The PATH to search in - * @returns The full path to the command if found, null otherwise - */ -export function findCommandInPath(command: string, searchPath: string): string | null { - for (const dir of searchPath.split(':')) { - if (!dir) continue; - - const fullPath = `${dir}/${command}`; - try { - if (fs.existsSync(fullPath)) { - const stats = fs.statSync(fullPath); - if (stats.isFile()) { - // Check if executable - try { - fs.accessSync(fullPath, fs.constants.X_OK); - return fullPath; - } catch { - // Not executable, continue searching - } - } - } - } catch { - // Directory doesn't exist or other error, continue - } - } - - return null; -} diff --git a/openwork-memos-integration/apps/desktop/src/preload/index.ts b/openwork-memos-integration/apps/desktop/src/preload/index.ts deleted file mode 100644 index eed085b67..000000000 --- a/openwork-memos-integration/apps/desktop/src/preload/index.ts +++ /dev/null @@ -1,220 +0,0 @@ -/** - * Preload Script for Local Renderer - * - * This preload script exposes a secure API to the local React renderer - * for communicating with the Electron main process via IPC. - */ - -import { contextBridge, ipcRenderer } from 'electron'; - -// Expose the accomplish API to the renderer -const accomplishAPI = { - // App info - getVersion: (): Promise => ipcRenderer.invoke('app:version'), - getPlatform: (): Promise => ipcRenderer.invoke('app:platform'), - - // Shell - openExternal: (url: string): Promise => - ipcRenderer.invoke('shell:open-external', url), - - // Task operations - startTask: (config: { description: string }): Promise => - ipcRenderer.invoke('task:start', config), - cancelTask: (taskId: string): Promise => - ipcRenderer.invoke('task:cancel', taskId), - interruptTask: (taskId: string): Promise => - ipcRenderer.invoke('task:interrupt', taskId), - getTask: (taskId: string): Promise => - ipcRenderer.invoke('task:get', taskId), - listTasks: (): Promise => ipcRenderer.invoke('task:list'), - deleteTask: (taskId: string): Promise => - ipcRenderer.invoke('task:delete', taskId), - clearTaskHistory: (): Promise => ipcRenderer.invoke('task:clear-history'), - - // Permission responses - respondToPermission: (response: { taskId: string; allowed: boolean }): Promise => - ipcRenderer.invoke('permission:respond', response), - - // Session management - resumeSession: (sessionId: string, prompt: string, taskId?: string): Promise => - ipcRenderer.invoke('session:resume', sessionId, prompt, taskId), - - // Settings - getApiKeys: (): Promise => ipcRenderer.invoke('settings:api-keys'), - addApiKey: ( - provider: 'anthropic' | 'openai' | 'openrouter' | 'google' | 'xai' | 'deepseek' | 'zai' | 'custom' | 'bedrock' | 'litellm', - key: string, - label?: string - ): Promise => - ipcRenderer.invoke('settings:add-api-key', provider, key, label), - removeApiKey: (id: string): Promise => - ipcRenderer.invoke('settings:remove-api-key', id), - getDebugMode: (): Promise => - ipcRenderer.invoke('settings:debug-mode'), - setDebugMode: (enabled: boolean): Promise => - ipcRenderer.invoke('settings:set-debug-mode', enabled), - getAppSettings: (): Promise<{ debugMode: boolean; onboardingComplete: boolean }> => - ipcRenderer.invoke('settings:app-settings'), - - // Memory (MemOS) configuration - getMemoryConfig: (): Promise<{ hasApiKey: boolean; apiKeyPrefix?: string }> => - ipcRenderer.invoke('memory:get-config'), - setMemoryApiKey: (key: string): Promise => - ipcRenderer.invoke('memory:set-api-key', key), - clearMemoryApiKey: (): Promise => - ipcRenderer.invoke('memory:clear-api-key'), - - // API Key management (new simplified handlers) - hasApiKey: (): Promise => - ipcRenderer.invoke('api-key:exists'), - setApiKey: (key: string): Promise => - ipcRenderer.invoke('api-key:set', key), - getApiKey: (): Promise => - ipcRenderer.invoke('api-key:get'), - validateApiKey: (key: string): Promise<{ valid: boolean; error?: string }> => - ipcRenderer.invoke('api-key:validate', key), - validateApiKeyForProvider: (provider: string, key: string): Promise<{ valid: boolean; error?: string }> => - ipcRenderer.invoke('api-key:validate-provider', provider, key), - clearApiKey: (): Promise => - ipcRenderer.invoke('api-key:clear'), - - // Onboarding - getOnboardingComplete: (): Promise => - ipcRenderer.invoke('onboarding:complete'), - setOnboardingComplete: (complete: boolean): Promise => - ipcRenderer.invoke('onboarding:set-complete', complete), - - // OpenCode CLI status - checkOpenCodeCli: (): Promise<{ - installed: boolean; - version: string | null; - installCommand: string; - }> => ipcRenderer.invoke('opencode:check'), - getOpenCodeVersion: (): Promise => - ipcRenderer.invoke('opencode:version'), - - // Model selection - getSelectedModel: (): Promise<{ provider: string; model: string; baseUrl?: string } | null> => - ipcRenderer.invoke('model:get'), - setSelectedModel: (model: { provider: string; model: string; baseUrl?: string }): Promise => - ipcRenderer.invoke('model:set', model), - - // Multi-provider API keys - getAllApiKeys: (): Promise> => - ipcRenderer.invoke('api-keys:all'), - hasAnyApiKey: (): Promise => - ipcRenderer.invoke('api-keys:has-any'), - - // Ollama configuration - testOllamaConnection: (url: string): Promise<{ - success: boolean; - models?: Array<{ id: string; displayName: string; size: number }>; - error?: string; - }> => ipcRenderer.invoke('ollama:test-connection', url), - - getOllamaConfig: (): Promise<{ baseUrl: string; enabled: boolean; lastValidated?: number; models?: Array<{ id: string; displayName: string; size: number }> } | null> => - ipcRenderer.invoke('ollama:get-config'), - - setOllamaConfig: (config: { baseUrl: string; enabled: boolean; lastValidated?: number; models?: Array<{ id: string; displayName: string; size: number }> } | null): Promise => - ipcRenderer.invoke('ollama:set-config', config), - - // OpenRouter configuration - fetchOpenRouterModels: (): Promise<{ - success: boolean; - models?: Array<{ id: string; name: string; provider: string; contextLength: number }>; - error?: string; - }> => ipcRenderer.invoke('openrouter:fetch-models'), - - // LiteLLM configuration - testLiteLLMConnection: (url: string, apiKey?: string): Promise<{ - success: boolean; - models?: Array<{ id: string; name: string; provider: string; contextLength: number }>; - error?: string; - }> => ipcRenderer.invoke('litellm:test-connection', url, apiKey), - - fetchLiteLLMModels: (): Promise<{ - success: boolean; - models?: Array<{ id: string; name: string; provider: string; contextLength: number }>; - error?: string; - }> => ipcRenderer.invoke('litellm:fetch-models'), - - getLiteLLMConfig: (): Promise<{ baseUrl: string; enabled: boolean; lastValidated?: number; models?: Array<{ id: string; name: string; provider: string; contextLength: number }> } | null> => - ipcRenderer.invoke('litellm:get-config'), - - setLiteLLMConfig: (config: { baseUrl: string; enabled: boolean; lastValidated?: number; models?: Array<{ id: string; name: string; provider: string; contextLength: number }> } | null): Promise => - ipcRenderer.invoke('litellm:set-config', config), - - // Bedrock - validateBedrockCredentials: (credentials: string) => - ipcRenderer.invoke('bedrock:validate', credentials), - saveBedrockCredentials: (credentials: string) => - ipcRenderer.invoke('bedrock:save', credentials), - getBedrockCredentials: () => - ipcRenderer.invoke('bedrock:get-credentials'), - - // Event subscriptions - onTaskUpdate: (callback: (event: unknown) => void) => { - const listener = (_: unknown, event: unknown) => callback(event); - ipcRenderer.on('task:update', listener); - return () => ipcRenderer.removeListener('task:update', listener); - }, - // Batched task updates for performance - multiple messages in single IPC call - onTaskUpdateBatch: (callback: (event: { taskId: string; messages: unknown[] }) => void) => { - const listener = (_: unknown, event: { taskId: string; messages: unknown[] }) => callback(event); - ipcRenderer.on('task:update:batch', listener); - return () => ipcRenderer.removeListener('task:update:batch', listener); - }, - onPermissionRequest: (callback: (request: unknown) => void) => { - const listener = (_: unknown, request: unknown) => callback(request); - ipcRenderer.on('permission:request', listener); - return () => ipcRenderer.removeListener('permission:request', listener); - }, - onTaskProgress: (callback: (progress: unknown) => void) => { - const listener = (_: unknown, progress: unknown) => callback(progress); - ipcRenderer.on('task:progress', listener); - return () => ipcRenderer.removeListener('task:progress', listener); - }, - onDebugLog: (callback: (log: unknown) => void) => { - const listener = (_: unknown, log: unknown) => callback(log); - ipcRenderer.on('debug:log', listener); - return () => ipcRenderer.removeListener('debug:log', listener); - }, - // Debug mode setting changes - onDebugModeChange: (callback: (data: { enabled: boolean }) => void) => { - const listener = (_: unknown, data: { enabled: boolean }) => callback(data); - ipcRenderer.on('settings:debug-mode-changed', listener); - return () => ipcRenderer.removeListener('settings:debug-mode-changed', listener); - }, - // Task status changes (e.g., queued -> running) - onTaskStatusChange: (callback: (data: { taskId: string; status: string }) => void) => { - const listener = (_: unknown, data: { taskId: string; status: string }) => callback(data); - ipcRenderer.on('task:status-change', listener); - return () => ipcRenderer.removeListener('task:status-change', listener); - }, - // Task summary updates (AI-generated summary) - onTaskSummary: (callback: (data: { taskId: string; summary: string }) => void) => { - const listener = (_: unknown, data: { taskId: string; summary: string }) => callback(data); - ipcRenderer.on('task:summary', listener); - return () => ipcRenderer.removeListener('task:summary', listener); - }, - - logEvent: (payload: { level?: string; message: string; context?: Record }) => - ipcRenderer.invoke('log:event', payload), -}; - -// Expose the API to the renderer -contextBridge.exposeInMainWorld('accomplish', accomplishAPI); - -// Also expose shell info for compatibility checks -const packageVersion = process.env.npm_package_version; -if (!packageVersion) { - throw new Error('Package version is not defined. Build is misconfigured.'); -} -contextBridge.exposeInMainWorld('accomplishShell', { - version: packageVersion, - platform: process.platform, - isElectron: true, -}); - -// Type declarations -export type AccomplishAPI = typeof accomplishAPI; diff --git a/openwork-memos-integration/apps/desktop/src/renderer/App.tsx b/openwork-memos-integration/apps/desktop/src/renderer/App.tsx deleted file mode 100644 index 316b02606..000000000 --- a/openwork-memos-integration/apps/desktop/src/renderer/App.tsx +++ /dev/null @@ -1,144 +0,0 @@ -'use client'; - -import { useEffect, useState } from 'react'; -import { Routes, Route, Navigate, useLocation } from 'react-router-dom'; -import { AnimatePresence, motion } from 'framer-motion'; -import { isRunningInElectron, getAccomplish } from './lib/accomplish'; -import { springs, variants } from './lib/animations'; -import { analytics } from './lib/analytics'; - -// Pages -import HomePage from './pages/Home'; -import ExecutionPage from './pages/Execution'; - -// Components -import Sidebar from './components/layout/Sidebar'; -import { TaskLauncher } from './components/TaskLauncher'; -import { useTaskStore } from './stores/taskStore'; -import { Loader2, AlertTriangle } from 'lucide-react'; - -type AppStatus = 'loading' | 'ready' | 'error'; - -export default function App() { - const [status, setStatus] = useState('loading'); - const [errorMessage, setErrorMessage] = useState(null); - const location = useLocation(); - - // Get launcher actions - const { openLauncher } = useTaskStore(); - - // Track page views on route changes - useEffect(() => { - analytics.trackPageView(location.pathname); - }, [location.pathname]); - - // Cmd+K keyboard shortcut - useEffect(() => { - const handleKeyDown = (e: KeyboardEvent) => { - if ((e.metaKey || e.ctrlKey) && e.key === 'k') { - e.preventDefault(); - openLauncher(); - } - }; - - window.addEventListener('keydown', handleKeyDown); - return () => window.removeEventListener('keydown', handleKeyDown); - }, [openLauncher]); - - useEffect(() => { - const checkStatus = async () => { - // Check if running in Electron - if (!isRunningInElectron()) { - setErrorMessage('This application must be run inside the Openwork desktop app.'); - setStatus('error'); - return; - } - - try { - const accomplish = getAccomplish(); - // Mark onboarding as complete (no welcome screen needed) - await accomplish.setOnboardingComplete(true); - setStatus('ready'); - } catch (error) { - console.error('Failed to initialize app:', error); - // Still allow app to run even if setting fails - setStatus('ready'); - } - }; - - checkStatus(); - }, []); - - // Loading state - if (status === 'loading') { - return ( -
- -
- ); - } - - // Error state - if (status === 'error') { - return ( -
-
-
-
- -
-
-

Unable to Start

-

{errorMessage}

-
-
- ); - } - - // Ready - render the app with sidebar - return ( -
- {/* Invisible drag region for window dragging (macOS hiddenInset titlebar) */} -
- -
- - - - - - } - /> - - - - } - /> - } /> - - -
- -
- ); -} diff --git a/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncher.tsx b/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncher.tsx deleted file mode 100644 index 880c7df28..000000000 --- a/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncher.tsx +++ /dev/null @@ -1,221 +0,0 @@ -'use client'; - -import { useState, useEffect, useMemo, useCallback, useRef } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { motion, AnimatePresence } from 'framer-motion'; -import * as DialogPrimitive from '@radix-ui/react-dialog'; -import { Search, Plus, X } from 'lucide-react'; -import { useTaskStore } from '@/stores/taskStore'; -import { getAccomplish } from '@/lib/accomplish'; -import { cn } from '@/lib/utils'; -import { springs } from '@/lib/animations'; -import TaskLauncherItem from './TaskLauncherItem'; -import { hasAnyReadyProvider } from '@accomplish/shared'; - -export default function TaskLauncher() { - const navigate = useNavigate(); - const inputRef = useRef(null); - const [searchQuery, setSearchQuery] = useState(''); - const [selectedIndex, setSelectedIndex] = useState(0); - - const { - isLauncherOpen, - closeLauncher, - tasks, - startTask - } = useTaskStore(); - const accomplish = getAccomplish(); - - // Filter tasks by search query (title only) - const filteredTasks = useMemo(() => { - if (!searchQuery.trim()) { - // Show last 7 days when no search - const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000; - return tasks.filter(t => new Date(t.createdAt).getTime() > sevenDaysAgo); - } - const query = searchQuery.toLowerCase(); - return tasks.filter(t => t.prompt.toLowerCase().includes(query)); - }, [tasks, searchQuery]); - - // Total items: "New task" + filtered tasks - const totalItems = 1 + filteredTasks.length; - - // Reset state when modal opens - useEffect(() => { - if (isLauncherOpen) { - setSearchQuery(''); - setSelectedIndex(0); - // Focus input after animation - setTimeout(() => inputRef.current?.focus(), 100); - } - }, [isLauncherOpen]); - - // Clamp selected index when results change - useEffect(() => { - setSelectedIndex(i => Math.min(i, Math.max(0, totalItems - 1))); - }, [totalItems]); - - const handleSelect = useCallback(async (index: number) => { - if (index === 0) { - // "New task" selected - if (searchQuery.trim()) { - // Check if any provider is ready before starting task - const settings = await accomplish.getProviderSettings(); - if (!hasAnyReadyProvider(settings)) { - // No ready provider - navigate to home which will show settings - closeLauncher(); - navigate('/'); - return; - } - closeLauncher(); - const taskId = `task_${Date.now()}`; - const task = await startTask({ prompt: searchQuery.trim(), taskId }); - if (task) { - navigate(`/execution/${task.id}`); - } - } else { - // Navigate to home for empty input - closeLauncher(); - navigate('/'); - } - } else { - // Task selected - navigate to it - const task = filteredTasks[index - 1]; - if (task) { - closeLauncher(); - navigate(`/execution/${task.id}`); - } - } - }, [searchQuery, filteredTasks, closeLauncher, navigate, startTask, accomplish]); - - const handleKeyDown = useCallback((e: React.KeyboardEvent) => { - switch (e.key) { - case 'ArrowDown': - e.preventDefault(); - setSelectedIndex(i => Math.min(i + 1, totalItems - 1)); - break; - case 'ArrowUp': - e.preventDefault(); - setSelectedIndex(i => Math.max(i - 1, 0)); - break; - case 'Enter': - e.preventDefault(); - handleSelect(selectedIndex); - break; - case 'Escape': - e.preventDefault(); - closeLauncher(); - break; - } - }, [totalItems, selectedIndex, handleSelect, closeLauncher]); - - return ( - !open && closeLauncher()}> - - {isLauncherOpen && ( - - {/* Overlay */} - - - - - {/* Content */} - - - {/* Search Input */} -
- - setSearchQuery(e.target.value)} - placeholder="Search tasks..." - className="flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground" - /> - - - -
- - {/* Results */} -
- {/* New Task Option */} - - - {/* Task List */} - {filteredTasks.length > 0 && ( - <> -
- {searchQuery.trim() ? 'Results' : 'Last 7 days'} -
- {filteredTasks.slice(0, 10).map((task, i) => ( - handleSelect(i + 1)} - /> - ))} - - )} - - {/* Empty State */} - {searchQuery.trim() && filteredTasks.length === 0 && ( -
- No tasks found -
- )} -
- - {/* Footer hint */} -
- ↑↓ Navigate - Select - Esc Close -
-
-
-
- )} -
-
- ); -} diff --git a/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncherItem.tsx b/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncherItem.tsx deleted file mode 100644 index 2eee34ebb..000000000 --- a/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/TaskLauncherItem.tsx +++ /dev/null @@ -1,64 +0,0 @@ -'use client'; - -import type { Task } from '@accomplish/shared'; -import { cn } from '@/lib/utils'; -import { Loader2, CheckCircle2, XCircle, AlertCircle } from 'lucide-react'; - -interface TaskLauncherItemProps { - task: Task; - isSelected: boolean; - onClick: () => void; -} - -function formatRelativeDate(dateString: string): string { - const date = new Date(dateString); - const now = new Date(); - const diffDays = Math.floor((now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24)); - - if (diffDays === 0) return 'Today'; - if (diffDays === 1) return 'Yesterday'; - if (diffDays < 7) { - return date.toLocaleDateString('en-US', { weekday: 'long' }); - } - return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }); -} - -function getStatusIcon(status: Task['status']) { - switch (status) { - case 'running': - return ; - case 'completed': - return ; - case 'failed': - return ; - case 'cancelled': - case 'interrupted': - return ; - default: - return null; - } -} - -export default function TaskLauncherItem({ task, isSelected, onClick }: TaskLauncherItemProps) { - return ( - - ); -} diff --git a/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/index.ts b/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/index.ts deleted file mode 100644 index 17437674c..000000000 --- a/openwork-memos-integration/apps/desktop/src/renderer/components/TaskLauncher/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as TaskLauncher } from './TaskLauncher'; -export { default as TaskLauncherItem } from './TaskLauncherItem'; diff --git a/openwork-memos-integration/apps/desktop/src/renderer/components/history/TaskHistory.tsx b/openwork-memos-integration/apps/desktop/src/renderer/components/history/TaskHistory.tsx deleted file mode 100644 index 520990ca9..000000000 --- a/openwork-memos-integration/apps/desktop/src/renderer/components/history/TaskHistory.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import { useEffect } from 'react'; -import { Link } from 'react-router-dom'; -import { useTaskStore } from '../../stores/taskStore'; -import type { Task } from '@accomplish/shared'; - -interface TaskHistoryProps { - limit?: number; - showTitle?: boolean; -} - -export default function TaskHistory({ limit, showTitle = true }: TaskHistoryProps) { - const { tasks, loadTasks, deleteTask, clearHistory } = useTaskStore(); - - useEffect(() => { - loadTasks(); - }, [loadTasks]); - - const displayedTasks = limit ? tasks.slice(0, limit) : tasks; - - if (displayedTasks.length === 0) { - return ( -
-

No tasks yet. Start by describing what you want to accomplish.

-
- ); - } - - return ( -
- {showTitle && ( -
-

Recent Tasks

- {tasks.length > 0 && !limit && ( - - )} -
- )} - -
- {displayedTasks.map((task) => ( - deleteTask(task.id)} - /> - ))} -
- - {limit && tasks.length > limit && ( - - View all {tasks.length} tasks - - )} -
- ); -} - -function TaskHistoryItem({ - task, - onDelete, -}: { - task: Task; - onDelete: () => void; -}) { - const statusConfig: Record = { - completed: { color: 'bg-success', label: 'Completed' }, - running: { color: 'bg-accent-blue', label: 'Running' }, - failed: { color: 'bg-danger', label: 'Failed' }, - cancelled: { color: 'bg-text-muted', label: 'Cancelled' }, - pending: { color: 'bg-warning', label: 'Pending' }, - waiting_permission: { color: 'bg-warning', label: 'Waiting' }, - }; - - const config = statusConfig[task.status] || statusConfig.pending; - const timeAgo = getTimeAgo(task.createdAt); - - return ( - -
-
-

- {task.summary || task.prompt} -

-

- {config.label} · {timeAgo} · {task.messages.length} messages -

-
- - - ); -} - -function getTimeAgo(dateString: string): string { - const date = new Date(dateString); - const now = new Date(); - const diffMs = now.getTime() - date.getTime(); - const diffMins = Math.floor(diffMs / 60000); - const diffHours = Math.floor(diffMs / 3600000); - const diffDays = Math.floor(diffMs / 86400000); - - if (diffMins < 1) return 'just now'; - if (diffMins < 60) return `${diffMins}m ago`; - if (diffHours < 24) return `${diffHours}h ago`; - return `${diffDays}d ago`; -} diff --git a/openwork-memos-integration/apps/desktop/src/renderer/components/landing/TaskInputBar.tsx b/openwork-memos-integration/apps/desktop/src/renderer/components/landing/TaskInputBar.tsx deleted file mode 100644 index 868ff02d2..000000000 --- a/openwork-memos-integration/apps/desktop/src/renderer/components/landing/TaskInputBar.tsx +++ /dev/null @@ -1,96 +0,0 @@ -'use client'; - -import { useRef, useEffect } from 'react'; -import { getAccomplish } from '../../lib/accomplish'; -import { analytics } from '../../lib/analytics'; -import { CornerDownLeft, Loader2 } from 'lucide-react'; - -interface TaskInputBarProps { - value: string; - onChange: (value: string) => void; - onSubmit: () => void; - placeholder?: string; - isLoading?: boolean; - disabled?: boolean; - large?: boolean; - autoFocus?: boolean; -} - -export default function TaskInputBar({ - value, - onChange, - onSubmit, - placeholder = 'Assign a task or ask anything', - isLoading = false, - disabled = false, - large = false, - autoFocus = false, -}: TaskInputBarProps) { - const isDisabled = disabled || isLoading; - const textareaRef = useRef(null); - const accomplish = getAccomplish(); - - // Auto-focus on mount - useEffect(() => { - if (autoFocus && textareaRef.current) { - textareaRef.current.focus(); - } - }, [autoFocus]); - - // Auto-resize textarea - useEffect(() => { - const textarea = textareaRef.current; - if (textarea) { - textarea.style.height = 'auto'; - textarea.style.height = `${Math.min(textarea.scrollHeight, 200)}px`; - } - }, [value]); - - const handleKeyDown = (e: React.KeyboardEvent) => { - if (e.key === 'Enter' && !e.shiftKey) { - e.preventDefault(); - onSubmit(); - } - }; - - return ( -
- {/* Text input */} -
+
+
+ +
+
+ + +
+ + + + +
+
+
+ Memory Detail + +
+
+
+
+ + +`; diff --git a/apps/memos-local-openclaw/src/viewer/server.ts b/apps/memos-local-openclaw/src/viewer/server.ts new file mode 100644 index 000000000..c96bf5bfe --- /dev/null +++ b/apps/memos-local-openclaw/src/viewer/server.ts @@ -0,0 +1,1746 @@ +import http from "node:http"; +import crypto from "node:crypto"; +import { execSync } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; +import readline from "node:readline"; +import type { SqliteStore } from "../storage/sqlite"; +import type { Embedder } from "../embedding"; +import { Summarizer } from "../ingest/providers"; +import { findTopSimilar } from "../ingest/dedup"; +import { stripInboundMetadata } from "../capture"; +import { vectorSearch } from "../storage/vector"; +import { TaskProcessor } from "../ingest/task-processor"; +import { RecallEngine } from "../recall/engine"; +import { SkillEvolver } from "../skill/evolver"; +import type { Logger, Chunk, PluginContext } from "../types"; +import { viewerHTML } from "./html"; +import { v4 as uuid } from "uuid"; + +export interface ViewerServerOptions { + store: SqliteStore; + embedder: Embedder; + port: number; + log: Logger; + dataDir: string; + ctx?: PluginContext; +} + +interface AuthState { + passwordHash: string | null; + sessions: Map; +} + +export class ViewerServer { + private server: http.Server | null = null; + private readonly store: SqliteStore; + private readonly embedder: Embedder; + private readonly port: number; + private readonly log: Logger; + private readonly dataDir: string; + private readonly authFile: string; + private readonly auth: AuthState; + private readonly ctx?: PluginContext; + + private static readonly SESSION_TTL = 24 * 60 * 60 * 1000; + private resetToken: string; + private migrationRunning = false; + private migrationAbort = false; + private migrationState: { + phase: string; + stored: number; + skipped: number; + merged: number; + errors: number; + processed: number; + total: number; + lastItem: any; + done: boolean; + stopped: boolean; + } = { phase: "", stored: 0, skipped: 0, merged: 0, errors: 0, processed: 0, total: 0, lastItem: null, done: false, stopped: false }; + private migrationSSEClients: http.ServerResponse[] = []; + + private ppRunning = false; + private ppAbort = false; + private ppState: { running: boolean; done: boolean; stopped: boolean; processed: number; total: number; tasksCreated: number; skillsCreated: number; errors: number } = + { running: false, done: false, stopped: false, processed: 0, total: 0, tasksCreated: 0, skillsCreated: 0, errors: 0 }; + private ppSSEClients: http.ServerResponse[] = []; + + constructor(opts: ViewerServerOptions) { + this.store = opts.store; + this.embedder = opts.embedder; + this.port = opts.port; + this.log = opts.log; + this.dataDir = opts.dataDir; + this.ctx = opts.ctx; + this.authFile = path.join(opts.dataDir, "viewer-auth.json"); + this.auth = { passwordHash: null, sessions: new Map() }; + this.resetToken = crypto.randomBytes(16).toString("hex"); + this.loadAuth(); + } + + start(): Promise { + return new Promise((resolve, reject) => { + this.server = http.createServer((req, res) => this.handleRequest(req, res)); + this.server.on("error", (err: NodeJS.ErrnoException) => { + if (err.code === "EADDRINUSE") { + this.log.warn(`Viewer port ${this.port} in use, trying ${this.port + 1}`); + this.server!.listen(this.port + 1, "127.0.0.1"); + } else { + reject(err); + } + }); + this.server.listen(this.port, "127.0.0.1", () => { + const addr = this.server!.address(); + const actualPort = typeof addr === "object" && addr ? addr.port : this.port; + resolve(`http://127.0.0.1:${actualPort}`); + }); + }); + } + + stop(): void { + this.server?.close(); + this.server = null; + } + + getResetToken(): string { + return this.resetToken; + } + + // ─── Auth helpers ─── + + private loadAuth(): void { + try { + if (fs.existsSync(this.authFile)) { + const data = JSON.parse(fs.readFileSync(this.authFile, "utf-8")); + this.auth.passwordHash = data.passwordHash ?? null; + } + } catch { + this.log.warn("Failed to load viewer auth file, starting fresh"); + } + } + + private saveAuth(): void { + try { + fs.mkdirSync(path.dirname(this.authFile), { recursive: true }); + fs.writeFileSync(this.authFile, JSON.stringify({ passwordHash: this.auth.passwordHash })); + } catch (e) { + this.log.warn(`Failed to save viewer auth: ${e}`); + } + } + + private hashPassword(pw: string): string { + return crypto.createHash("sha256").update(pw + "memos-lite-salt-2026").digest("hex"); + } + + private createSession(): string { + const token = crypto.randomBytes(32).toString("hex"); + this.auth.sessions.set(token, Date.now() + ViewerServer.SESSION_TTL); + return token; + } + + private isValidSession(req: http.IncomingMessage): boolean { + const cookie = req.headers.cookie ?? ""; + const match = cookie.match(/memos_token=([a-f0-9]+)/); + if (!match) return false; + const expiry = this.auth.sessions.get(match[1]); + if (!expiry) return false; + if (Date.now() > expiry) { this.auth.sessions.delete(match[1]); return false; } + return true; + } + + private get needsSetup(): boolean { + return this.auth.passwordHash === null; + } + + // ─── Request routing ─── + + private handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void { + const url = new URL(req.url ?? "/", `http://${req.headers.host}`); + const p = url.pathname; + + res.setHeader("Access-Control-Allow-Origin", "*"); + res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + res.setHeader("Access-Control-Allow-Headers", "Content-Type"); + + if (req.method === "OPTIONS") { res.writeHead(204); res.end(); return; } + + try { + if (p === "/api/auth/status") { + return this.jsonResponse(res, { needsSetup: this.needsSetup, loggedIn: this.isValidSession(req) }); + } + if (p === "/api/auth/setup" && req.method === "POST") { + return this.handleSetup(req, res); + } + if (p === "/api/auth/login" && req.method === "POST") { + return this.handleLogin(req, res); + } + if (p === "/api/auth/reset" && req.method === "POST") { + return this.handlePasswordReset(req, res); + } + if (p === "/" || p === "/viewer") { + return this.serveViewer(res); + } + + if (!this.isValidSession(req)) { + res.writeHead(401, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "unauthorized" })); + return; + } + + if (p === "/api/memories" && req.method === "GET") this.serveMemories(res, url); + else if (p === "/api/stats") this.serveStats(res); + else if (p === "/api/metrics") this.serveMetrics(res, url); + else if (p === "/api/tool-metrics") this.serveToolMetrics(res, url); + else if (p === "/api/search") this.serveSearch(req, res, url); + else if (p === "/api/tasks" && req.method === "GET") this.serveTasks(res, url); + else if (p.startsWith("/api/task/") && req.method === "GET") this.serveTaskDetail(res, p); + else if (p === "/api/skills" && req.method === "GET") this.serveSkills(res, url); + else if (p.match(/^\/api\/skill\/[^/]+\/download$/) && req.method === "GET") this.serveSkillDownload(res, p); + else if (p.match(/^\/api\/skill\/[^/]+\/files$/) && req.method === "GET") this.serveSkillFiles(res, p); + else if (p.match(/^\/api\/skill\/[^/]+\/visibility$/) && req.method === "PUT") this.handleSkillVisibility(req, res, p); + else if (p.startsWith("/api/skill/") && req.method === "GET") this.serveSkillDetail(res, p); + else if (p === "/api/memory" && req.method === "POST") this.handleCreate(req, res); + else if (p.startsWith("/api/memory/") && req.method === "GET") this.serveMemoryDetail(res, p); + else if (p.startsWith("/api/memory/") && req.method === "PUT") this.handleUpdate(req, res, p); + else if (p.startsWith("/api/memory/") && req.method === "DELETE") this.handleDelete(res, p); + else if (p === "/api/session" && req.method === "DELETE") this.handleDeleteSession(res, url); + else if (p === "/api/memories" && req.method === "DELETE") this.handleDeleteAll(res); + else if (p === "/api/logs" && req.method === "GET") this.serveLogs(res, url); + else if (p === "/api/log-tools" && req.method === "GET") this.serveLogTools(res); + else if (p === "/api/config" && req.method === "GET") this.serveConfig(res); + else if (p === "/api/config" && req.method === "PUT") this.handleSaveConfig(req, res); + else if (p === "/api/auth/logout" && req.method === "POST") this.handleLogout(req, res); + else if (p === "/api/migrate/scan" && req.method === "GET") this.handleMigrateScan(res); + else if (p === "/api/migrate/start" && req.method === "POST") this.handleMigrateStart(req, res); + else if (p === "/api/migrate/status" && req.method === "GET") this.handleMigrateStatus(res); + else if (p === "/api/migrate/stream" && req.method === "GET") this.handleMigrateStream(res); + else if (p === "/api/migrate/stop" && req.method === "POST") this.handleMigrateStop(res); + else if (p === "/api/migrate/postprocess" && req.method === "POST") this.handlePostprocess(req, res); + else if (p === "/api/migrate/postprocess/stream" && req.method === "GET") this.handlePostprocessStream(res); + else if (p === "/api/migrate/postprocess/stop" && req.method === "POST") this.handlePostprocessStop(res); + else if (p === "/api/migrate/postprocess/status" && req.method === "GET") this.handlePostprocessStatus(res); + else { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "not found" })); + } + } catch (err) { + this.log.error(`Viewer request error: ${err}`); + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } + } + + // ─── Auth endpoints ─── + + private handleSetup(req: http.IncomingMessage, res: http.ServerResponse): void { + if (!this.needsSetup) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Password already set" })); + return; + } + this.readBody(req, (body) => { + try { + const { password } = JSON.parse(body); + if (!password || password.length < 4) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Password must be at least 4 characters" })); + return; + } + this.auth.passwordHash = this.hashPassword(password); + this.saveAuth(); + const token = this.createSession(); + res.writeHead(200, { + "Content-Type": "application/json", + "Set-Cookie": `memos_token=${token}; Path=/; HttpOnly; SameSite=Strict; Max-Age=86400`, + }); + res.end(JSON.stringify({ ok: true, message: "Password set successfully" })); + } catch (err) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } + }); + } + + private handleLogin(req: http.IncomingMessage, res: http.ServerResponse): void { + this.readBody(req, (body) => { + try { + const { password } = JSON.parse(body); + if (this.needsSetup || this.hashPassword(password) !== this.auth.passwordHash) { + res.writeHead(401, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Invalid password" })); + return; + } + const token = this.createSession(); + res.writeHead(200, { + "Content-Type": "application/json", + "Set-Cookie": `memos_token=${token}; Path=/; HttpOnly; SameSite=Strict; Max-Age=86400`, + }); + res.end(JSON.stringify({ ok: true })); + } catch (err) { + res.writeHead(401, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } + }); + } + + private handleLogout(req: http.IncomingMessage, res: http.ServerResponse): void { + const cookie = req.headers.cookie ?? ""; + const match = cookie.match(/memos_token=([a-f0-9]+)/); + if (match) this.auth.sessions.delete(match[1]); + res.writeHead(200, { + "Content-Type": "application/json", + "Set-Cookie": "memos_token=; Path=/; HttpOnly; Max-Age=0", + }); + res.end(JSON.stringify({ ok: true })); + } + + private handlePasswordReset(req: http.IncomingMessage, res: http.ServerResponse): void { + this.readBody(req, (body) => { + try { + const { token, newPassword } = JSON.parse(body); + if (token !== this.resetToken) { + res.writeHead(403, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Invalid reset token" })); + return; + } + if (!newPassword || newPassword.length < 4) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Password must be at least 4 characters" })); + return; + } + this.auth.passwordHash = this.hashPassword(newPassword); + this.auth.sessions.clear(); + this.saveAuth(); + this.resetToken = crypto.randomBytes(16).toString("hex"); + this.log.info(`memos-local: password has been reset. New reset token: ${this.resetToken}`); + const sessionToken = this.createSession(); + res.writeHead(200, { + "Content-Type": "application/json", + "Set-Cookie": `memos_token=${sessionToken}; Path=/; HttpOnly; SameSite=Strict; Max-Age=86400`, + }); + res.end(JSON.stringify({ ok: true, message: "Password reset successfully" })); + } catch (err) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } + }); + } + + // ─── Pages ─── + + private serveViewer(res: http.ServerResponse): void { + res.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Cache-Control": "no-store, no-cache, must-revalidate, max-age=0", "Pragma": "no-cache", "Expires": "0" }); + res.end(viewerHTML); + } + + // ─── Data APIs ─── + + private serveMemories(res: http.ServerResponse, url: URL): void { + const limit = Math.min(Number(url.searchParams.get("limit")) || 40, 200); + const page = Math.max(1, Number(url.searchParams.get("page")) || 1); + const offset = (page - 1) * limit; + const session = url.searchParams.get("session") ?? undefined; + const role = url.searchParams.get("role") ?? undefined; + const kind = url.searchParams.get("kind") ?? undefined; + const dateFrom = url.searchParams.get("dateFrom") ?? undefined; + const dateTo = url.searchParams.get("dateTo") ?? undefined; + const owner = url.searchParams.get("owner") ?? undefined; + const sortBy = url.searchParams.get("sort") === "oldest" ? "ASC" : "DESC"; + + const db = (this.store as any).db; + const conditions: string[] = []; + const params: any[] = []; + if (session) { conditions.push("session_key = ?"); params.push(session); } + if (role) { conditions.push("role = ?"); params.push(role); } + if (kind) { conditions.push("kind = ?"); params.push(kind); } + if (owner) { conditions.push("owner = ?"); params.push(owner); } + if (dateFrom) { conditions.push("created_at >= ?"); params.push(new Date(dateFrom).getTime()); } + if (dateTo) { conditions.push("created_at <= ?"); params.push(new Date(dateTo).getTime()); } + + const where = conditions.length > 0 ? " WHERE " + conditions.join(" AND ") : ""; + const totalRow = db.prepare("SELECT COUNT(*) as count FROM chunks" + where).get(...params) as any; + const rawMemories = db.prepare("SELECT * FROM chunks" + where + ` ORDER BY created_at ${sortBy} LIMIT ? OFFSET ?`).all(...params, limit, offset); + const memories = rawMemories.map((m: any) => { + if (m.role === "user" && m.content) { + return { ...m, content: stripInboundMetadata(m.content) }; + } + return m; + }); + + this.store.recordViewerEvent("list"); + this.jsonResponse(res, { + memories, page, limit, total: totalRow.count, + totalPages: Math.ceil(totalRow.count / limit), + }); + } + + private serveMetrics(res: http.ServerResponse, url: URL): void { + const days = Math.min(90, Math.max(7, Number(url.searchParams.get("days")) || 30)); + const data = this.store.getMetrics(days); + this.jsonResponse(res, data); + } + + private serveToolMetrics(res: http.ServerResponse, url: URL): void { + const minutes = Math.min(1440, Math.max(10, Number(url.searchParams.get("minutes")) || 60)); + const data = this.store.getToolMetrics(minutes); + this.jsonResponse(res, data); + } + + private serveTasks(res: http.ServerResponse, url: URL): void { + this.store.recordViewerEvent("tasks_list"); + const status = url.searchParams.get("status") ?? undefined; + const limit = Math.min(100, Math.max(1, Number(url.searchParams.get("limit")) || 50)); + const offset = Math.max(0, Number(url.searchParams.get("offset")) || 0); + const { tasks, total } = this.store.listTasks({ status, limit, offset }); + + const items = tasks.map((t) => ({ + id: t.id, + sessionKey: t.sessionKey, + title: t.title, + summary: t.summary ? (t.summary.length > 300 ? t.summary.slice(0, 297) + "..." : t.summary) : "", + status: t.status, + startedAt: t.startedAt, + endedAt: t.endedAt, + chunkCount: this.store.countChunksByTask(t.id), + })); + + this.jsonResponse(res, { tasks: items, total, limit, offset }); + } + + private serveTaskDetail(res: http.ServerResponse, urlPath: string): void { + const taskId = urlPath.replace("/api/task/", ""); + const task = this.store.getTask(taskId); + if (!task) { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Task not found" })); + return; + } + + const chunks = this.store.getChunksByTask(taskId); + const chunkItems = chunks.map((c) => { + let text = c.role === "user" ? stripInboundMetadata(c.content) : c.content; + if (text.length > 500) text = text.slice(0, 497) + "..."; + return { id: c.id, role: c.role, content: text, summary: c.summary, createdAt: c.createdAt }; + }); + + const relatedSkills = this.store.getSkillsByTask(taskId); + const skillLinks = relatedSkills.map((rs) => ({ + skillId: rs.skill.id, + skillName: rs.skill.name, + relation: rs.relation, + versionAt: rs.versionAt, + status: rs.skill.status, + qualityScore: rs.skill.qualityScore, + })); + + const db = (this.store as any).db; + const meta = db.prepare("SELECT skill_status, skill_reason FROM tasks WHERE id = ?").get(taskId) as + { skill_status: string | null; skill_reason: string | null } | undefined; + + this.jsonResponse(res, { + id: task.id, + sessionKey: task.sessionKey, + title: task.title, + summary: task.summary, + status: task.status, + startedAt: task.startedAt, + endedAt: task.endedAt, + chunks: chunkItems, + skillStatus: meta?.skill_status ?? null, + skillReason: meta?.skill_reason ?? null, + skillLinks, + }); + } + + private serveStats(res: http.ServerResponse): void { + const emptyStats = { + totalMemories: 0, totalSessions: 0, totalEmbeddings: 0, totalSkills: 0, + embeddingProvider: this.embedder?.provider ?? "none", + roleBreakdown: {}, kindBreakdown: {}, dedupBreakdown: {}, + timeRange: { earliest: null, latest: null }, + sessions: [], + }; + + if (!this.store || !(this.store as any).db) { + this.jsonResponse(res, emptyStats); + return; + } + + try { + const db = (this.store as any).db; + const total = db.prepare("SELECT COUNT(*) as count FROM chunks").get() as any; + const sessions = db.prepare("SELECT COUNT(DISTINCT session_key) as count FROM chunks").get() as any; + const roles = db.prepare("SELECT role, COUNT(*) as count FROM chunks GROUP BY role").all() as any[]; + const timeRange = db.prepare("SELECT MIN(created_at) as earliest, MAX(created_at) as latest FROM chunks").get() as any; + let embCount = 0; + try { embCount = (db.prepare("SELECT COUNT(*) as count FROM embeddings").get() as any).count; } catch { /* table may not exist */ } + const kinds = db.prepare("SELECT kind, COUNT(*) as count FROM chunks GROUP BY kind").all() as any[]; + const sessionList = db.prepare( + "SELECT session_key, COUNT(*) as count, MIN(created_at) as earliest, MAX(created_at) as latest FROM chunks GROUP BY session_key ORDER BY latest DESC", + ).all() as any[]; + + let skillCount = 0; + try { skillCount = (db.prepare("SELECT COUNT(*) as count FROM skills").get() as any).count; } catch { /* table may not exist yet */ } + + let dedupBreakdown: Record = {}; + try { + const dedupRows = db.prepare("SELECT dedup_status, COUNT(*) as count FROM chunks GROUP BY dedup_status").all() as any[]; + dedupBreakdown = Object.fromEntries(dedupRows.map((d: any) => [d.dedup_status ?? "active", d.count])); + } catch { /* column may not exist yet */ } + + let owners: string[] = []; + try { + const ownerRows = db.prepare("SELECT DISTINCT owner FROM chunks WHERE owner IS NOT NULL ORDER BY owner").all() as any[]; + owners = ownerRows.map((o: any) => o.owner); + } catch { /* column may not exist yet */ } + + this.jsonResponse(res, { + totalMemories: total.count, totalSessions: sessions.count, totalEmbeddings: embCount, + totalSkills: skillCount, + embeddingProvider: this.embedder.provider, + roleBreakdown: Object.fromEntries(roles.map((r: any) => [r.role, r.count])), + kindBreakdown: Object.fromEntries(kinds.map((k: any) => [k.kind, k.count])), + dedupBreakdown, + timeRange: { earliest: timeRange.earliest, latest: timeRange.latest }, + sessions: sessionList, + owners, + }); + } catch (e) { + this.log.warn(`stats error: ${e}`); + this.jsonResponse(res, emptyStats); + } + } + + private async serveSearch(_req: http.IncomingMessage, res: http.ServerResponse, url: URL): Promise { + const q = url.searchParams.get("q") ?? ""; + if (!q.trim()) { this.jsonResponse(res, { results: [], query: q }); return; } + + const role = url.searchParams.get("role") ?? undefined; + const kind = url.searchParams.get("kind") ?? undefined; + const dateFrom = url.searchParams.get("dateFrom") ?? undefined; + const dateTo = url.searchParams.get("dateTo") ?? undefined; + + const passesFilter = (r: any): boolean => { + if (role && r.role !== role) return false; + if (kind && r.kind !== kind) return false; + if (dateFrom && r.created_at < new Date(dateFrom).getTime()) return false; + if (dateTo && r.created_at > new Date(dateTo).getTime()) return false; + return true; + }; + + const db = (this.store as any).db; + let ftsResults: any[] = []; + try { + ftsResults = db.prepare( + "SELECT c.* FROM chunks_fts f JOIN chunks c ON f.rowid = c.rowid WHERE chunks_fts MATCH ? ORDER BY rank LIMIT 100", + ).all(q).filter(passesFilter); + } catch { + ftsResults = db.prepare( + "SELECT * FROM chunks WHERE content LIKE ? OR summary LIKE ? ORDER BY created_at DESC LIMIT 100", + ).all(`%${q}%`, `%${q}%`).filter(passesFilter); + } + + let vectorResults: any[] = []; + try { + const queryVec = await this.embedder.embedQuery(q); + const hits = vectorSearch(this.store, queryVec, 40); + const hitIds = new Set(hits.filter(h => h.score > 0.3).map(h => h.chunkId)); + if (hitIds.size > 0) { + const placeholders = [...hitIds].map(() => "?").join(","); + const rows = db.prepare(`SELECT * FROM chunks WHERE id IN (${placeholders})`).all(...hitIds).filter(passesFilter); + const scoreMap = new Map(hits.map(h => [h.chunkId, h.score])); + rows.forEach((r: any) => { r._vscore = scoreMap.get(r.id) ?? 0; }); + rows.sort((a: any, b: any) => (b._vscore ?? 0) - (a._vscore ?? 0)); + vectorResults = rows; + } + } catch (err) { + this.log.warn(`Vector search failed (falling back to FTS only): ${err}`); + } + + const seenIds = new Set(); + const merged: any[] = []; + for (const r of vectorResults) { + if (!seenIds.has(r.id)) { seenIds.add(r.id); merged.push(r); } + } + for (const r of ftsResults) { + if (!seenIds.has(r.id)) { seenIds.add(r.id); merged.push(r); } + } + + this.store.recordViewerEvent("search"); + this.jsonResponse(res, { + results: merged, + query: q, + vectorCount: vectorResults.length, + ftsCount: ftsResults.length, + total: merged.length, + }); + } + + // ─── Skills API ─── + + private serveSkills(res: http.ServerResponse, url: URL): void { + const status = url.searchParams.get("status") ?? undefined; + const visibility = url.searchParams.get("visibility") ?? undefined; + let skills = this.store.listSkills({ status }); + if (visibility) { + skills = skills.filter(s => s.visibility === visibility); + } + this.jsonResponse(res, { skills }); + } + + private serveSkillDetail(res: http.ServerResponse, urlPath: string): void { + const skillId = urlPath.replace("/api/skill/", ""); + const skill = this.store.getSkill(skillId); + if (!skill) { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Skill not found" })); + return; + } + + const versions = this.store.getSkillVersions(skillId); + const relatedTasks = this.store.getTasksBySkill(skillId); + const files = fs.existsSync(skill.dirPath) ? this.walkDir(skill.dirPath, skill.dirPath) : []; + + this.jsonResponse(res, { + skill, + versions: versions.map(v => ({ + id: v.id, + version: v.version, + content: v.content, + changelog: v.changelog, + changeSummary: v.changeSummary, + upgradeType: v.upgradeType, + sourceTaskId: v.sourceTaskId, + metrics: v.metrics, + qualityScore: v.qualityScore, + createdAt: v.createdAt, + })), + relatedTasks: relatedTasks.map(rt => ({ + task: { + id: rt.task.id, + title: rt.task.title, + status: rt.task.status, + startedAt: rt.task.startedAt, + }, + relation: rt.relation, + })), + files, + }); + } + + private serveSkillFiles(res: http.ServerResponse, urlPath: string): void { + const skillId = urlPath.replace("/api/skill/", "").replace("/files", ""); + const skill = this.store.getSkill(skillId); + if (!skill) { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Skill not found" })); + return; + } + + if (!fs.existsSync(skill.dirPath)) { + this.jsonResponse(res, { files: [], error: "Skill directory not found" }); + return; + } + + const files = this.walkDir(skill.dirPath, skill.dirPath); + this.jsonResponse(res, { files }); + } + + private walkDir(dir: string, root: string): Array<{ path: string; type: string; size: number }> { + const results: Array<{ path: string; type: string; size: number }> = []; + try { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + const relPath = path.relative(root, fullPath); + if (entry.isDirectory()) { + results.push(...this.walkDir(fullPath, root)); + } else { + const stat = fs.statSync(fullPath); + const ext = path.extname(entry.name).toLowerCase(); + let type = "file"; + if (entry.name === "SKILL.md") type = "skill"; + else if ([".sh", ".py", ".ts", ".js"].includes(ext)) type = "script"; + else if ([".md", ".txt", ".json"].includes(ext)) type = "reference"; + results.push({ path: relPath, type, size: stat.size }); + } + } + } catch { /* directory may not exist */ } + return results; + } + + private serveSkillDownload(res: http.ServerResponse, urlPath: string): void { + const skillId = urlPath.replace("/api/skill/", "").replace("/download", ""); + const skill = this.store.getSkill(skillId); + if (!skill) { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Skill not found" })); + return; + } + + if (!fs.existsSync(skill.dirPath)) { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Skill directory not found" })); + return; + } + + const zipName = `${skill.name}-v${skill.version}.zip`; + const tmpPath = path.join(require("os").tmpdir(), zipName); + + try { + try { fs.unlinkSync(tmpPath); } catch { /* no-op */ } + execSync( + `cd "${path.dirname(skill.dirPath)}" && zip -r "${tmpPath}" "${path.basename(skill.dirPath)}"`, + { timeout: 15_000 }, + ); + + const data = fs.readFileSync(tmpPath); + res.writeHead(200, { + "Content-Type": "application/zip", + "Content-Disposition": `attachment; filename="${zipName}"`, + "Content-Length": String(data.length), + }); + res.end(data); + + try { fs.unlinkSync(tmpPath); } catch { /* cleanup */ } + } catch (err) { + this.log.error(`Skill download zip failed: ${err}`); + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: `Failed to create zip: ${err}` })); + } + } + + private handleSkillVisibility(req: http.IncomingMessage, res: http.ServerResponse, urlPath: string): void { + const segments = urlPath.split("/"); + const skillId = segments[segments.length - 2]; + this.readBody(req, (body) => { + try { + const parsed = JSON.parse(body); + const visibility = parsed.visibility; + if (visibility !== "public" && visibility !== "private") { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: `visibility must be 'public' or 'private', got: '${visibility}'` })); + return; + } + const skill = this.store.getSkill(skillId); + if (!skill) { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: `Skill not found: ${skillId}` })); + return; + } + this.store.setSkillVisibility(skillId, visibility); + this.jsonResponse(res, { ok: true, skillId, visibility }); + } catch (err) { + this.log.error(`handleSkillVisibility error: skillId=${skillId}, body=${body}, err=${err}`); + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } + }); + } + + // ─── CRUD ─── + + private handleCreate(req: http.IncomingMessage, res: http.ServerResponse): void { + this.readBody(req, (body) => { + try { + const data = JSON.parse(body); + const { v4: uuidv4 } = require("uuid"); + const id = uuidv4(); + const now = Date.now(); + this.store.insertChunk({ + id, sessionKey: data.session_key || "manual", turnId: `manual-${now}`, seq: 0, + role: data.role || "user", content: data.content || "", kind: data.kind || "paragraph", + summary: data.summary || data.content?.slice(0, 100) || "", + taskId: null, skillId: null, owner: data.owner || "agent:main", + dedupStatus: "active", dedupTarget: null, dedupReason: null, + mergeCount: 0, lastHitAt: null, mergeHistory: "[]", + createdAt: now, updatedAt: now, embedding: null, + }); + this.jsonResponse(res, { ok: true, id, message: "Memory created" }); + } catch (err) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } + }); + } + + private serveMemoryDetail(res: http.ServerResponse, urlPath: string): void { + const chunkId = urlPath.replace("/api/memory/", ""); + const chunk = this.store.getChunk(chunkId); + if (!chunk) { + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "Not found" })); + return; + } + const cleaned = chunk.role === "user" && chunk.content + ? { ...chunk, content: stripInboundMetadata(chunk.content) } + : chunk; + this.jsonResponse(res, { memory: cleaned }); + } + + private handleUpdate(req: http.IncomingMessage, res: http.ServerResponse, urlPath: string): void { + const chunkId = urlPath.replace("/api/memory/", ""); + this.readBody(req, (body) => { + try { + const data = JSON.parse(body); + const ok = this.store.updateChunk(chunkId, { summary: data.summary, content: data.content, role: data.role, kind: data.kind, owner: data.owner }); + if (ok) this.jsonResponse(res, { ok: true, message: "Memory updated" }); + else { res.writeHead(404, { "Content-Type": "application/json" }); res.end(JSON.stringify({ error: "Not found" })); } + } catch (err) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } + }); + } + + private handleDelete(res: http.ServerResponse, urlPath: string): void { + const chunkId = urlPath.replace("/api/memory/", ""); + if (this.store.deleteChunk(chunkId)) this.jsonResponse(res, { ok: true }); + else { res.writeHead(404, { "Content-Type": "application/json" }); res.end(JSON.stringify({ error: "Not found" })); } + } + + private handleDeleteSession(res: http.ServerResponse, url: URL): void { + const key = url.searchParams.get("key"); + if (!key) { res.writeHead(400, { "Content-Type": "application/json" }); res.end(JSON.stringify({ error: "Missing key" })); return; } + const count = this.store.deleteSession(key); + this.jsonResponse(res, { ok: true, deleted: count }); + } + + private handleDeleteAll(res: http.ServerResponse): void { + const result = this.store.deleteAll(); + // Clean up skills-store directory + const skillsStoreDir = path.join(this.dataDir, "skills-store"); + try { + if (fs.existsSync(skillsStoreDir)) { + fs.rmSync(skillsStoreDir, { recursive: true }); + fs.mkdirSync(skillsStoreDir, { recursive: true }); + this.log.info("Cleared skills-store directory"); + } + } catch (err) { + this.log.warn(`Failed to clear skills-store: ${err}`); + } + this.jsonResponse(res, { ok: true, deleted: result }); + } + + // ─── Helpers ─── + + // ─── Config API ─── + + private getOpenClawConfigPath(): string { + const home = process.env.HOME || process.env.USERPROFILE || ""; + return path.join(home, ".openclaw", "openclaw.json"); + } + + private serveConfig(res: http.ServerResponse): void { + try { + const cfgPath = this.getOpenClawConfigPath(); + if (!fs.existsSync(cfgPath)) { + this.jsonResponse(res, {}); + return; + } + const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8")); + const entries = raw?.plugins?.entries ?? {}; + const pluginEntry = entries["memos-local-openclaw-plugin"]?.config + ?? entries["memos-lite-openclaw-plugin"]?.config + ?? entries["memos-lite"]?.config + ?? {}; + const result: Record = { ...pluginEntry }; + const topEntry = entries["memos-local-openclaw-plugin"] + ?? entries["memos-lite-openclaw-plugin"] + ?? entries["memos-lite"] + ?? {}; + if (pluginEntry.viewerPort == null && topEntry.viewerPort) { + result.viewerPort = topEntry.viewerPort; + } + this.jsonResponse(res, result); + } catch (e) { + this.log.warn(`serveConfig error: ${e}`); + this.jsonResponse(res, {}); + } + } + + private handleSaveConfig(req: http.IncomingMessage, res: http.ServerResponse): void { + this.readBody(req, (body) => { + try { + const newCfg = JSON.parse(body); + const cfgPath = this.getOpenClawConfigPath(); + let raw: Record = {}; + if (fs.existsSync(cfgPath)) { + raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8")); + } + + if (!raw.plugins) raw.plugins = {}; + const plugins = raw.plugins as Record; + if (!plugins.entries) plugins.entries = {}; + const entries = plugins.entries as Record; + const entryKey = entries["memos-local-openclaw-plugin"] ? "memos-local-openclaw-plugin" + : entries["memos-lite-openclaw-plugin"] ? "memos-lite-openclaw-plugin" + : entries["memos-lite"] ? "memos-lite" + : "memos-local-openclaw-plugin"; + if (!entries[entryKey]) entries[entryKey] = { enabled: true }; + const entry = entries[entryKey] as Record; + if (!entry.config) entry.config = {}; + const config = entry.config as Record; + + if (newCfg.embedding) config.embedding = newCfg.embedding; + if (newCfg.summarizer) config.summarizer = newCfg.summarizer; + if (newCfg.skillEvolution) config.skillEvolution = newCfg.skillEvolution; + if (newCfg.viewerPort) config.viewerPort = newCfg.viewerPort; + if (newCfg.telemetry !== undefined) config.telemetry = newCfg.telemetry; + + fs.mkdirSync(path.dirname(cfgPath), { recursive: true }); + fs.writeFileSync(cfgPath, JSON.stringify(raw, null, 2), "utf-8"); + this.log.info("Plugin config updated via Viewer"); + this.jsonResponse(res, { ok: true }); + } catch (e) { + this.log.warn(`handleSaveConfig error: ${e}`); + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(e) })); + } + }); + } + + private serveLogs(res: http.ServerResponse, url: URL): void { + const limit = Math.min(Number(url.searchParams.get("limit") ?? 20), 200); + const offset = Math.max(0, Number(url.searchParams.get("offset") ?? 0)); + const tool = url.searchParams.get("tool") || undefined; + const { logs, total } = this.store.getApiLogs(limit, offset, tool); + const page = Math.floor(offset / limit) + 1; + const totalPages = Math.ceil(total / limit); + this.jsonResponse(res, { logs, total, page, totalPages, limit, offset }); + } + + private serveLogTools(res: http.ServerResponse): void { + const tools = this.store.getApiLogToolNames(); + this.jsonResponse(res, { tools }); + } + + // ─── Migration: scan OpenClaw built-in memory ─── + + private getOpenClawHome(): string { + const home = process.env.HOME || process.env.USERPROFILE || ""; + return path.join(home, ".openclaw"); + } + + private handleMigrateScan(res: http.ServerResponse): void { + try { + const ocHome = this.getOpenClawHome(); + const memoryDir = path.join(ocHome, "memory"); + const sessionsDir = path.join(ocHome, "agents", "main", "sessions"); + + const sqliteFiles: Array<{ file: string; chunks: number }> = []; + if (fs.existsSync(memoryDir)) { + for (const f of fs.readdirSync(memoryDir)) { + if (f.endsWith(".sqlite")) { + try { + const Database = require("better-sqlite3"); + const db = new Database(path.join(memoryDir, f), { readonly: true }); + const row = db.prepare("SELECT COUNT(*) as cnt FROM chunks").get() as { cnt: number }; + sqliteFiles.push({ file: f, chunks: row.cnt }); + db.close(); + } catch { /* skip unreadable */ } + } + } + } + + let sessionCount = 0; + let messageCount = 0; + if (fs.existsSync(sessionsDir)) { + const jsonlFiles = fs.readdirSync(sessionsDir).filter(f => f.includes(".jsonl")); + sessionCount = jsonlFiles.length; + for (const f of jsonlFiles) { + try { + const content = fs.readFileSync(path.join(sessionsDir, f), "utf-8"); + const lines = content.split("\n").filter(l => l.trim()); + for (const line of lines) { + try { + const obj = JSON.parse(line); + if (obj.type === "message") { + const role = obj.message?.role ?? obj.role; + if (role === "user" || role === "assistant") { + const mc = obj.message?.content ?? obj.content; + let txt = ""; + if (typeof mc === "string") txt = mc; + else if (Array.isArray(mc)) txt = mc.filter((p: any) => p.type === "text" && p.text).map((p: any) => p.text).join("\n"); + else txt = JSON.stringify(mc); + if (role === "user") txt = stripInboundMetadata(txt); + if (txt && txt.length >= 10) messageCount++; + } + } + } catch { /* skip bad lines */ } + } + } catch { /* skip unreadable */ } + } + } + + const cfgPath = this.getOpenClawConfigPath(); + let hasEmbedding = false; + let hasSummarizer = false; + if (fs.existsSync(cfgPath)) { + try { + const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8")); + const pluginCfg = raw?.plugins?.entries?.["memos-local-openclaw-plugin"]?.config ?? + raw?.plugins?.entries?.["memos-lite"]?.config ?? + raw?.plugins?.entries?.["memos-lite-openclaw-plugin"]?.config ?? {}; + const emb = pluginCfg.embedding; + hasEmbedding = !!(emb && emb.provider); + const sum = pluginCfg.summarizer; + hasSummarizer = !!(sum && sum.provider); + } catch { /* ignore */ } + } + + let importedSessions: string[] = []; + try { + if (this.store) { + importedSessions = this.store.getDistinctSessionKeys() + .filter((sk: string) => sk.startsWith("openclaw-import-") || sk.startsWith("openclaw-session-")); + } + } catch (storeErr) { + this.log.warn(`migrate/scan: store query failed: ${storeErr}`); + } + + this.jsonResponse(res, { + sqliteFiles, + sessions: { count: sessionCount, messages: messageCount }, + totalItems: sqliteFiles.reduce((s, f) => s + f.chunks, 0) + messageCount, + configReady: hasEmbedding && hasSummarizer, + hasEmbedding, + hasSummarizer, + hasImportedData: importedSessions.length > 0, + importedSessionCount: importedSessions.length, + }); + } catch (e) { + this.log.warn(`migrate/scan error: ${e}`); + this.jsonResponse(res, { + sqliteFiles: [], + sessions: { count: 0, messages: 0 }, + totalItems: 0, + configReady: false, + hasEmbedding: false, + hasSummarizer: false, + hasImportedData: false, + importedSessionCount: 0, + error: String(e), + }); + } + } + + // ─── Migration: start import with SSE progress ─── + + private broadcastSSE(event: string, data: unknown): void { + const msg = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; + this.migrationSSEClients = this.migrationSSEClients.filter(c => { + try { c.write(msg); return true; } catch { return false; } + }); + } + + private handleMigrateStatus(res: http.ServerResponse): void { + this.jsonResponse(res, { + running: this.migrationRunning, + ...this.migrationState, + }); + } + + private handleMigrateStop(res: http.ServerResponse): void { + if (!this.migrationRunning) { + this.jsonResponse(res, { ok: false, error: "not_running" }); + return; + } + this.migrationAbort = true; + this.jsonResponse(res, { ok: true }); + } + + private handleMigrateStream(res: http.ServerResponse): void { + res.writeHead(200, { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "X-Accel-Buffering": "no", + }); + + if (this.migrationRunning) { + res.write(`event: state\ndata: ${JSON.stringify(this.migrationState)}\n\n`); + this.migrationSSEClients.push(res); + res.on("close", () => { + this.migrationSSEClients = this.migrationSSEClients.filter(c => c !== res); + }); + } else if (this.migrationState.done) { + const evtName = this.migrationState.stopped ? "stopped" : "done"; + res.write(`event: state\ndata: ${JSON.stringify(this.migrationState)}\n\n`); + res.write(`event: ${evtName}\ndata: ${JSON.stringify({ ok: true })}\n\n`); + res.end(); + } else { + res.end(); + } + } + + private handleMigrateStart(req: http.IncomingMessage, res: http.ServerResponse): void { + if (this.migrationRunning) { + res.writeHead(200, { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "X-Accel-Buffering": "no", + }); + res.write(`event: state\ndata: ${JSON.stringify(this.migrationState)}\n\n`); + this.migrationSSEClients.push(res); + res.on("close", () => { + this.migrationSSEClients = this.migrationSSEClients.filter(c => c !== res); + }); + return; + } + + this.readBody(req, (body) => { + let opts: { sources?: string[] } = {}; + try { opts = JSON.parse(body); } catch { /* defaults */ } + + res.writeHead(200, { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "X-Accel-Buffering": "no", + }); + + this.migrationSSEClients.push(res); + res.on("close", () => { + this.migrationSSEClients = this.migrationSSEClients.filter(c => c !== res); + }); + + this.migrationAbort = false; + this.migrationState = { phase: "", stored: 0, skipped: 0, merged: 0, errors: 0, processed: 0, total: 0, lastItem: null, done: false, stopped: false }; + + const send = (event: string, data: unknown) => { + if (event === "item") { + const d = data as any; + if (d.status === "stored") this.migrationState.stored++; + else if (d.status === "skipped" || d.status === "duplicate") this.migrationState.skipped++; + else if (d.status === "merged") this.migrationState.merged++; + else if (d.status === "error") this.migrationState.errors++; + this.migrationState.processed = d.index ?? this.migrationState.processed + 1; + this.migrationState.total = d.total ?? this.migrationState.total; + this.migrationState.lastItem = d; + } else if (event === "phase") { + this.migrationState.phase = (data as any).phase; + } else if (event === "progress") { + this.migrationState.total = (data as any).total ?? this.migrationState.total; + } + this.broadcastSSE(event, data); + }; + + this.migrationRunning = true; + this.runMigration(send, opts.sources).finally(() => { + this.migrationRunning = false; + this.migrationState.done = true; + if (this.migrationAbort) { + this.migrationState.stopped = true; + this.broadcastSSE("stopped", { ok: true, ...this.migrationState }); + } else { + this.broadcastSSE("done", { ok: true }); + } + for (const c of this.migrationSSEClients) { + try { c.end(); } catch { /* ignore */ } + } + this.migrationSSEClients = []; + this.migrationAbort = false; + }); + }); + } + + private async runMigration( + send: (event: string, data: unknown) => void, + sources?: string[], + ): Promise { + const ocHome = this.getOpenClawHome(); + const importSqlite = !sources || sources.includes("sqlite"); + const importSessions = !sources || sources.includes("sessions"); + + let totalProcessed = 0; + let totalStored = 0; + let totalSkipped = 0; + let totalErrors = 0; + + const cfgPath = this.getOpenClawConfigPath(); + let summarizerCfg: any; + try { + const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8")); + const pluginCfg = raw?.plugins?.entries?.["memos-local-openclaw-plugin"]?.config ?? + raw?.plugins?.entries?.["memos-lite"]?.config ?? + raw?.plugins?.entries?.["memos-lite-openclaw-plugin"]?.config ?? {}; + summarizerCfg = pluginCfg.summarizer; + } catch { /* no config */ } + + const summarizer = new Summarizer(summarizerCfg, this.log); + + // Phase 1: Import SQLite memory chunks + if (importSqlite) { + const memoryDir = path.join(ocHome, "memory"); + if (fs.existsSync(memoryDir)) { + const files = fs.readdirSync(memoryDir).filter(f => f.endsWith(".sqlite")); + for (const file of files) { + if (this.migrationAbort) break; + send("phase", { phase: "sqlite", file }); + try { + const Database = require("better-sqlite3"); + const db = new Database(path.join(memoryDir, file), { readonly: true }); + const rows = db.prepare("SELECT id, path, text, updated_at FROM chunks ORDER BY updated_at ASC").all() as Array<{ + id: string; path: string; text: string; updated_at: number; + }>; + db.close(); + + const agentId = file.replace(".sqlite", ""); + send("progress", { total: rows.length, processed: 0, phase: "sqlite", file }); + + for (let i = 0; i < rows.length; i++) { + if (this.migrationAbort) break; + const row = rows[i]; + totalProcessed++; + + const contentHash = crypto.createHash("sha256").update(row.text).digest("hex"); + if (this.store.chunkExistsByContent(`openclaw-import-${agentId}`, "assistant", row.text)) { + totalSkipped++; + send("item", { + index: i + 1, + total: rows.length, + status: "skipped", + preview: row.text.slice(0, 120), + source: file, + reason: "duplicate", + }); + continue; + } + + try { + const summary = await summarizer.summarize(row.text); + let embedding: number[] | null = null; + try { + [embedding] = await this.embedder.embed([summary]); + } catch (err) { + this.log.warn(`Migration embed failed: ${err}`); + } + + let dedupStatus: "active" | "duplicate" | "merged" = "active"; + let dedupTarget: string | null = null; + let dedupReason: string | null = null; + + if (embedding) { + const topSimilar = findTopSimilar(this.store, embedding, 0.85, 3, this.log); + if (topSimilar.length > 0) { + const candidates = topSimilar.map((s, idx) => { + const chunk = this.store.getChunk(s.chunkId); + return { index: idx + 1, summary: chunk?.summary ?? "", chunkId: s.chunkId }; + }).filter(c => c.summary); + + if (candidates.length > 0) { + const dedupResult = await summarizer.judgeDedup(summary, candidates); + if (dedupResult?.action === "DUPLICATE" && dedupResult.targetIndex) { + const targetId = candidates[dedupResult.targetIndex - 1]?.chunkId; + if (targetId) { + dedupStatus = "duplicate"; + dedupTarget = targetId; + dedupReason = dedupResult.reason; + } + } else if (dedupResult?.action === "UPDATE" && dedupResult.targetIndex && dedupResult.mergedSummary) { + const targetId = candidates[dedupResult.targetIndex - 1]?.chunkId; + if (targetId) { + this.store.updateChunkSummaryAndContent(targetId, dedupResult.mergedSummary, row.text); + try { + const [newEmb] = await this.embedder.embed([dedupResult.mergedSummary]); + if (newEmb) this.store.upsertEmbedding(targetId, newEmb); + } catch { /* best-effort */ } + dedupStatus = "merged"; + dedupTarget = targetId; + dedupReason = dedupResult.reason; + } + } + } + } + } + + const chunkId = uuid(); + const chunk: Chunk = { + id: chunkId, + sessionKey: `openclaw-import-${agentId}`, + turnId: `import-${row.id}`, + seq: 0, + role: "assistant", + content: row.text, + kind: "paragraph", + summary, + embedding: null, + taskId: null, + skillId: null, + owner: `agent:${agentId}`, + dedupStatus, + dedupTarget, + dedupReason, + mergeCount: 0, + lastHitAt: null, + mergeHistory: "[]", + createdAt: row.updated_at * 1000, + updatedAt: row.updated_at * 1000, + }; + + this.store.insertChunk(chunk); + if (embedding && dedupStatus === "active") { + this.store.upsertEmbedding(chunkId, embedding); + } + + totalStored++; + send("item", { + index: i + 1, + total: rows.length, + status: dedupStatus === "active" ? "stored" : dedupStatus, + preview: row.text.slice(0, 120), + summary: summary.slice(0, 80), + source: file, + }); + } catch (err) { + totalErrors++; + send("item", { + index: i + 1, + total: rows.length, + status: "error", + preview: row.text.slice(0, 120), + source: file, + error: String(err).slice(0, 200), + }); + } + } + } catch (err) { + send("error", { file, error: String(err) }); + totalErrors++; + } + } + } + } + + // Phase 2: Import session JSONL files + if (importSessions) { + const sessionsDir = path.join(ocHome, "agents", "main", "sessions"); + if (fs.existsSync(sessionsDir)) { + const jsonlFiles = fs.readdirSync(sessionsDir).filter(f => f.includes(".jsonl")).sort(); + send("phase", { phase: "sessions", files: jsonlFiles.length }); + + let globalMsgIdx = 0; + let totalMsgs = 0; + for (const f of jsonlFiles) { + try { + const raw = fs.readFileSync(path.join(sessionsDir, f), "utf-8"); + for (const line of raw.split("\n")) { + if (!line.trim()) continue; + try { + const obj = JSON.parse(line); + if (obj.type === "message") { + const role = obj.message?.role ?? obj.role; + if (role === "user" || role === "assistant") { + const mc = obj.message?.content ?? obj.content; + let txt = ""; + if (typeof mc === "string") txt = mc; + else if (Array.isArray(mc)) txt = mc.filter((p: any) => p.type === "text" && p.text).map((p: any) => p.text).join("\n"); + else txt = JSON.stringify(mc); + if (role === "user") txt = stripInboundMetadata(txt); + if (txt && txt.length >= 10) totalMsgs++; + } + } + } catch { /* skip */ } + } + } catch { /* skip */ } + } + + for (const file of jsonlFiles) { + if (this.migrationAbort) break; + const sessionId = file.replace(/\.jsonl.*$/, ""); + const filePath = path.join(sessionsDir, file); + send("progress", { total: totalMsgs, processed: globalMsgIdx, phase: "sessions", file }); + + try { + const fileStream = fs.createReadStream(filePath, { encoding: "utf-8" }); + const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); + + for await (const line of rl) { + if (this.migrationAbort) break; + if (!line.trim()) continue; + let obj: any; + try { obj = JSON.parse(line); } catch { continue; } + if (obj.type !== "message") continue; + const msgRole = obj.message?.role ?? obj.role; + if (msgRole !== "user" && msgRole !== "assistant") continue; + + const msgContent = obj.message?.content ?? obj.content; + let content: string; + if (typeof msgContent === "string") { + content = msgContent; + } else if (Array.isArray(msgContent)) { + content = msgContent + .filter((p: any) => p.type === "text" && p.text) + .map((p: any) => p.text) + .join("\n"); + } else { + content = JSON.stringify(msgContent); + } + if (msgRole === "user") { + content = stripInboundMetadata(content); + } + if (!content || content.length < 10) continue; + + globalMsgIdx++; + totalProcessed++; + + const sessionKey = `openclaw-session-${sessionId}`; + if (this.store.chunkExistsByContent(sessionKey, msgRole, content)) { + totalSkipped++; + send("item", { + index: globalMsgIdx, + total: totalMsgs, + status: "skipped", + preview: content.slice(0, 120), + source: file, + role: msgRole, + reason: "duplicate", + }); + continue; + } + + try { + const summary = await summarizer.summarize(content); + let embedding: number[] | null = null; + try { + [embedding] = await this.embedder.embed([summary]); + } catch (err) { + this.log.warn(`Migration embed failed: ${err}`); + } + + let dedupStatus: "active" | "duplicate" | "merged" = "active"; + let dedupTarget: string | null = null; + let dedupReason: string | null = null; + + if (embedding) { + const topSimilar = findTopSimilar(this.store, embedding, 0.85, 3, this.log); + if (topSimilar.length > 0) { + const candidates = topSimilar.map((s, idx) => { + const chunk = this.store.getChunk(s.chunkId); + return { index: idx + 1, summary: chunk?.summary ?? "", chunkId: s.chunkId }; + }).filter(c => c.summary); + + if (candidates.length > 0) { + const dedupResult = await summarizer.judgeDedup(summary, candidates); + if (dedupResult?.action === "DUPLICATE" && dedupResult.targetIndex) { + const targetId = candidates[dedupResult.targetIndex - 1]?.chunkId; + if (targetId) { + dedupStatus = "duplicate"; + dedupTarget = targetId; + dedupReason = dedupResult.reason; + } + } else if (dedupResult?.action === "UPDATE" && dedupResult.targetIndex && dedupResult.mergedSummary) { + const targetId = candidates[dedupResult.targetIndex - 1]?.chunkId; + if (targetId) { + this.store.updateChunkSummaryAndContent(targetId, dedupResult.mergedSummary, content); + try { + const [newEmb] = await this.embedder.embed([dedupResult.mergedSummary]); + if (newEmb) this.store.upsertEmbedding(targetId, newEmb); + } catch { /* best-effort */ } + dedupStatus = "merged"; + dedupTarget = targetId; + dedupReason = dedupResult.reason; + } + } + } + } + } + + const chunkId = uuid(); + const msgTs = obj.message?.timestamp ?? obj.timestamp; + const ts = msgTs ? new Date(msgTs).getTime() : Date.now(); + const chunk: Chunk = { + id: chunkId, + sessionKey, + turnId: `import-${sessionId}-${globalMsgIdx}`, + seq: 0, + role: msgRole as any, + content, + kind: "paragraph", + summary, + embedding: null, + taskId: null, + skillId: null, + owner: "agent:main", + dedupStatus, + dedupTarget, + dedupReason, + mergeCount: 0, + lastHitAt: null, + mergeHistory: "[]", + createdAt: ts, + updatedAt: ts, + }; + + this.store.insertChunk(chunk); + if (embedding && dedupStatus === "active") { + this.store.upsertEmbedding(chunkId, embedding); + } + + totalStored++; + send("item", { + index: globalMsgIdx, + total: totalMsgs, + status: dedupStatus === "active" ? "stored" : dedupStatus, + preview: content.slice(0, 120), + summary: summary.slice(0, 80), + source: file, + role: msgRole, + }); + } catch (err) { + totalErrors++; + send("item", { + index: globalMsgIdx, + total: totalMsgs, + status: "error", + preview: content.slice(0, 120), + source: file, + error: String(err).slice(0, 200), + }); + } + } + } catch (err) { + send("error", { file, error: String(err) }); + totalErrors++; + } + } + } + } + + send("progress", { total: totalProcessed, processed: totalProcessed, phase: "done" }); + send("summary", { totalProcessed, totalStored, totalSkipped, totalErrors }); + } + + // ─── Post-processing: independent task/skill generation ─── + + private handlePostprocess(req: http.IncomingMessage, res: http.ServerResponse): void { + if (this.ppRunning) { + res.writeHead(409, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "postprocess already running" })); + return; + } + if (!this.ctx) { + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "plugin context not available — please restart the gateway" })); + return; + } + + this.readBody(req, (body) => { + let opts: { enableTasks?: boolean; enableSkills?: boolean } = {}; + try { opts = JSON.parse(body); } catch { /* defaults */ } + + res.writeHead(200, { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "X-Accel-Buffering": "no", + }); + + this.ppSSEClients.push(res); + res.on("close", () => { this.ppSSEClients = this.ppSSEClients.filter(c => c !== res); }); + + this.ppAbort = false; + this.ppState = { running: true, done: false, stopped: false, processed: 0, total: 0, tasksCreated: 0, skillsCreated: 0, errors: 0 }; + + const send = (event: string, data: unknown) => { + this.broadcastPPSSE(event, data); + }; + + this.ppRunning = true; + this.runPostprocess(send, !!opts.enableTasks, !!opts.enableSkills).finally(() => { + this.ppRunning = false; + this.ppState.running = false; + this.ppState.done = true; + if (this.ppAbort) { + this.ppState.stopped = true; + this.broadcastPPSSE("stopped", { ...this.ppState }); + } else { + this.broadcastPPSSE("done", { ...this.ppState }); + } + for (const c of this.ppSSEClients) { try { c.end(); } catch { /* */ } } + this.ppSSEClients = []; + this.ppAbort = false; + }); + }); + } + + private handlePostprocessStream(res: http.ServerResponse): void { + res.writeHead(200, { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "X-Accel-Buffering": "no", + }); + + if (this.ppRunning) { + res.write(`event: state\ndata: ${JSON.stringify(this.ppState)}\n\n`); + this.ppSSEClients.push(res); + res.on("close", () => { this.ppSSEClients = this.ppSSEClients.filter(c => c !== res); }); + } else if (this.ppState.done) { + const evt = this.ppState.stopped ? "stopped" : "done"; + res.write(`event: ${evt}\ndata: ${JSON.stringify(this.ppState)}\n\n`); + res.end(); + } else { + res.end(); + } + } + + private handlePostprocessStop(res: http.ServerResponse): void { + this.ppAbort = true; + this.jsonResponse(res, { ok: true }); + } + + private handlePostprocessStatus(res: http.ServerResponse): void { + this.jsonResponse(res, this.ppState); + } + + private broadcastPPSSE(event: string, data: unknown): void { + const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; + for (const c of this.ppSSEClients) { + try { c.write(payload); } catch { /* */ } + } + } + + private async runPostprocess( + send: (event: string, data: unknown) => void, + enableTasks: boolean, + enableSkills: boolean, + ): Promise { + const ctx = this.ctx!; + const taskProcessor = new TaskProcessor(this.store, ctx); + let skillEvolver: SkillEvolver | null = null; + + if (enableSkills) { + const recallEngine = new RecallEngine(this.store, this.embedder, ctx); + skillEvolver = new SkillEvolver(this.store, recallEngine, ctx); + taskProcessor.onTaskCompleted(async (task) => { + try { + await skillEvolver!.onTaskCompleted(task); + this.ppState.skillsCreated++; + send("skill", { taskId: task.id, title: task.title }); + } catch (err) { + this.log.warn(`Postprocess skill evolution error: ${err}`); + } + }); + } + + const importSessions = this.store.getDistinctSessionKeys() + .filter((sk: string) => sk.startsWith("openclaw-import-") || sk.startsWith("openclaw-session-")); + + type PendingItem = { sessionKey: string; action: "full" | "skill-only" }; + const pendingItems: PendingItem[] = []; + let skippedCount = 0; + + for (const sk of importSessions) { + const hasTask = this.store.hasTaskForSession(sk); + const hasSkill = this.store.hasSkillForSessionTask(sk); + + if (enableTasks && !hasTask) { + pendingItems.push({ sessionKey: sk, action: "full" }); + } else if (enableSkills && hasTask && !hasSkill) { + pendingItems.push({ sessionKey: sk, action: "skill-only" }); + } else { + skippedCount++; + } + } + + this.ppState.total = pendingItems.length; + send("info", { + totalSessions: importSessions.length, + alreadyProcessed: skippedCount, + pending: pendingItems.length, + }); + send("progress", { processed: 0, total: pendingItems.length }); + + for (let i = 0; i < pendingItems.length; i++) { + if (this.ppAbort) break; + const { sessionKey, action } = pendingItems[i]; + this.ppState.processed = i + 1; + + send("item", { + index: i + 1, + total: pendingItems.length, + session: sessionKey, + step: "processing", + action, + }); + + try { + if (action === "full") { + await taskProcessor.onChunksIngested(sessionKey, Date.now()); + const activeTask = this.store.getActiveTask(sessionKey); + if (activeTask) { + await taskProcessor.finalizeTask(activeTask); + const finalized = this.store.getTask(activeTask.id); + this.ppState.tasksCreated++; + send("item", { + index: i + 1, + total: pendingItems.length, + session: sessionKey, + step: "done", + taskTitle: finalized?.title || "", + taskStatus: finalized?.status || "", + }); + } else { + send("item", { + index: i + 1, + total: pendingItems.length, + session: sessionKey, + step: "done", + taskTitle: "(no chunks)", + }); + } + } else if (action === "skill-only" && skillEvolver) { + const completedTasks = this.store.getCompletedTasksForSession(sessionKey); + let skillGenerated = false; + for (const task of completedTasks) { + if (this.ppAbort) break; + try { + await skillEvolver.onTaskCompleted(task); + this.ppState.skillsCreated++; + skillGenerated = true; + send("skill", { taskId: task.id, title: task.title }); + } catch (err) { + this.log.warn(`Skill evolution error for task=${task.id}: ${err}`); + } + } + send("item", { + index: i + 1, + total: pendingItems.length, + session: sessionKey, + step: "done", + taskTitle: completedTasks[0]?.title || sessionKey, + action: "skill-only", + skillGenerated, + }); + } + } catch (err) { + this.ppState.errors++; + this.log.warn(`Postprocess error for ${sessionKey}: ${err}`); + send("item", { + index: i + 1, + total: pendingItems.length, + session: sessionKey, + step: "error", + error: String(err).slice(0, 200), + }); + } + + send("progress", { processed: i + 1, total: pendingItems.length }); + } + } + + private readBody(req: http.IncomingMessage, cb: (body: string) => void): void { + let body = ""; + req.on("data", (chunk: Buffer) => { body += chunk.toString(); }); + req.on("end", () => cb(body)); + } + + private jsonResponse(res: http.ServerResponse, data: unknown): void { + res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" }); + res.end(JSON.stringify(data)); + } +} diff --git a/apps/memos-local-openclaw/tests/capture.test.ts b/apps/memos-local-openclaw/tests/capture.test.ts new file mode 100644 index 000000000..4a6d598d3 --- /dev/null +++ b/apps/memos-local-openclaw/tests/capture.test.ts @@ -0,0 +1,139 @@ +import { describe, it, expect } from "vitest"; +import { captureMessages } from "../src/capture"; +import type { Logger } from "../src/types"; + +const noopLog: Logger = { + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, +}; + +describe("captureMessages", () => { + it("should keep user and assistant messages as-is", () => { + const msgs = [ + { role: "user", content: "Hello world" }, + { role: "assistant", content: "Hi there" }, + ]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(2); + expect(result[0].role).toBe("user"); + expect(result[0].content).toBe("Hello world"); + expect(result[1].role).toBe("assistant"); + expect(result[1].content).toBe("Hi there"); + }); + + it("should filter system messages and self-tool results", () => { + const msgs = [ + { role: "system", content: "You are a helpful assistant" }, + { role: "tool", content: '{"hits":[]}', toolName: "memory_search" }, + { role: "user", content: "Hello" }, + ]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(1); + expect(result[0].role).toBe("user"); + }); + + it("should keep non-self tool messages with original content", () => { + const msgs = [ + { role: "tool", content: '{"result": "ok"}', toolName: "web_search" }, + { role: "user", content: "Hello" }, + ]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(2); + expect(result[0].role).toBe("tool"); + expect(result[0].content).toBe('{"result": "ok"}'); + expect(result[0].toolName).toBe("web_search"); + }); + + it("should preserve original content without any stripping", () => { + const msgs = [ + { + role: "assistant", + content: "Based on memory: [STORED_MEMORY]some evidence[/STORED_MEMORY] the answer is 42.", + }, + ]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(1); + expect(result[0].content).toBe( + "Based on memory: [STORED_MEMORY]some evidence[/STORED_MEMORY] the answer is 42.", + ); + }); + + it("should skip empty messages", () => { + const msgs = [ + { role: "user", content: "" }, + { role: "assistant", content: " " }, + { role: "user", content: "Real message" }, + ]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(1); + expect(result[0].content).toBe("Real message"); + }); + + it("should skip all memory tool variants", () => { + const msgs = [ + { role: "tool", content: "search results", toolName: "memory_search" }, + { role: "tool", content: "timeline data", toolName: "memory_timeline" }, + { role: "tool", content: "chunk data", toolName: "memory_get" }, + { role: "tool", content: "viewer url", toolName: "memory_viewer" }, + { role: "tool", content: "other tool result", toolName: "bash" }, + ]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(1); + expect(result[0].toolName).toBe("bash"); + }); + + it("should strip OpenClaw inbound metadata from user messages", () => { + const rawContent = [ + "Sender (untrusted metadata):", + "```json", + "{", + ' "label": "openclaw-control-ui",', + ' "id": "openclaw-control-ui"', + "}", + "```", + "", + " [Tue 2026-03-03 21:58 GMT+8] 我的职业是啥", + ].join("\n"); + + const msgs = [{ role: "user", content: rawContent }]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(1); + expect(result[0].content).toBe("我的职业是啥"); + }); + + it("should strip multiple metadata blocks", () => { + const rawContent = [ + "Conversation info (untrusted metadata):", + "```json", + '{ "channel": "webchat" }', + "```", + "Sender (untrusted metadata):", + "```json", + '{ "label": "user1", "id": "u1" }', + "```", + "", + "[Mon 2026-03-03 20:00 GMT+8] 你好", + ].join("\n"); + + const msgs = [{ role: "user", content: rawContent }]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result).toHaveLength(1); + expect(result[0].content).toBe("你好"); + }); + + it("should not strip from assistant or tool messages", () => { + const msgs = [ + { role: "assistant", content: "Sender (untrusted metadata):\nsome text" }, + ]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result[0].content).toBe("Sender (untrusted metadata):\nsome text"); + }); + + it("should handle user message without metadata prefix", () => { + const msgs = [{ role: "user", content: "普通的用户消息" }]; + const result = captureMessages(msgs, "s1", "t1", "STORED_MEMORY", noopLog); + expect(result[0].content).toBe("普通的用户消息"); + }); +}); diff --git a/apps/memos-local-openclaw/tests/chunker.test.ts b/apps/memos-local-openclaw/tests/chunker.test.ts new file mode 100644 index 000000000..a6724c2aa --- /dev/null +++ b/apps/memos-local-openclaw/tests/chunker.test.ts @@ -0,0 +1,68 @@ +import { describe, it, expect } from "vitest"; +import { chunkText } from "../src/ingest/chunker"; + +describe("chunkText", () => { + it("should extract code blocks as standalone chunks", () => { + const text = `Here is some context. + +\`\`\`python +def hello(): + print("world") +\`\`\` + +And more text after the code block that is long enough to be its own chunk.`; + + const chunks = chunkText(text); + const codeChunk = chunks.find((c) => c.kind === "code_block"); + expect(codeChunk).toBeDefined(); + expect(codeChunk!.content).toContain("def hello()"); + }); + + it("should extract error stacks as standalone chunks", () => { + const text = `Something went wrong. + +Error: Connection refused + at Socket.connect (net.js:1141:16) + at TCPConnectWrap.afterConnect (net.js:1152:14) + +Then we continued.`; + + const chunks = chunkText(text); + const errorChunk = chunks.find((c) => c.kind === "error_stack"); + expect(errorChunk).toBeDefined(); + expect(errorChunk!.content).toContain("Connection refused"); + }); + + it("should split long paragraphs by sentence when over MAX_CHUNK_CHARS", () => { + // Total length > 3000 so splitOversized will split at sentence boundaries + const longPara = + "First sentence here. " + + "A".repeat(1500) + + ". " + + "B".repeat(1500) + + ". " + + "Last sentence."; + const chunks = chunkText(longPara); + expect(chunks.length).toBeGreaterThan(1); + }); + + it("should return at least one chunk for non-empty input", () => { + const chunks = chunkText("Short text but still meaningful enough to chunk."); + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + + it("should extract list blocks", () => { + const text = `Here are some items: + +- First item in the list +- Second item in the list +- Third item in the list + +End of text with enough padding to be a real chunk on its own line.`; + + const chunks = chunkText(text); + const listChunk = chunks.find((c) => c.kind === "list"); + expect(listChunk).toBeDefined(); + expect(listChunk!.content).toContain("First item"); + }); +}); diff --git a/apps/memos-local-openclaw/tests/integration.test.ts b/apps/memos-local-openclaw/tests/integration.test.ts new file mode 100644 index 000000000..616966a22 --- /dev/null +++ b/apps/memos-local-openclaw/tests/integration.test.ts @@ -0,0 +1,175 @@ +import { describe, it, expect, beforeAll, afterAll } from "vitest"; +import * as fs from "fs"; +import * as path from "path"; +import * as os from "os"; +import { initPlugin, type MemosLocalPlugin } from "../src/index"; + +let plugin: MemosLocalPlugin; +let tmpDir: string; + +beforeAll(async () => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "memos-integration-")); + plugin = initPlugin({ + stateDir: tmpDir, + config: { + // No summarizer → rule-based fallback + // No embedding → local MiniLM fallback + }, + }); + + // Simulate a conversation: user talks about deploying a service + plugin.onConversationTurn([ + { role: "user", content: "I'm deploying our API service to port 8443 using Docker. The command is: `docker compose -f docker-compose.prod.yml up -d`. The Postgres password is configured via POSTGRES_PASSWORD env var." }, + { role: "assistant", content: "Got it. I'll help you deploy. Make sure the firewall allows port 8443 and that POSTGRES_PASSWORD is set in your .env file. The docker-compose.prod.yml should have health checks configured." }, + ], "session-deploy"); + + // Second turn about a different topic + plugin.onConversationTurn([ + { role: "user", content: "Now let's discuss the React frontend. We're using Next.js 14 with App Router. The main page component is at app/page.tsx and it fetches data from /api/dashboard." }, + { role: "assistant", content: "For the Next.js 14 App Router setup, your app/page.tsx should use server components by default. The /api/dashboard route handler should be in app/api/dashboard/route.ts." }, + ], "session-frontend"); + + // Third turn with an error stack + plugin.onConversationTurn([ + { role: "user", content: `The build is failing with this error: +Error: Module not found: Can't resolve '@/components/Chart' + at ModuleNotFoundError (webpack/lib/ModuleNotFoundError.js:28:12) + at factorize (webpack/lib/Compilation.js:2045:24) + at resolve (webpack/lib/NormalModuleFactory.js:439:20) + +I think the path alias is wrong in the tsconfig configuration.` }, + { role: "assistant", content: "The error shows a missing path alias for @/components/Chart. Check your tsconfig.json paths configuration - it should have: \"@/*\": [\"./src/*\"] or similar mapping." }, + ], "session-frontend"); + + // Wait for all async ingest to complete + await plugin.flush(); +}, 120_000); + +afterAll(() => { + plugin.shutdown(); + fs.rmSync(tmpDir, { recursive: true, force: true }); +}); + +describe("Integration: memory_search", () => { + it("should find docker deployment details", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await searchTool.handler({ query: "docker deploy port 8443" })) as any; + + expect(result.hits.length).toBeGreaterThan(0); + expect(result.meta.usedMinScore).toBe(0.45); + expect(result.meta.usedMaxResults).toBe(6); + + const hit = result.hits[0]; + expect(hit.summary).toBeTruthy(); + expect(hit.original_excerpt).toBeTruthy(); + expect(hit.ref).toBeDefined(); + expect(hit.ref.sessionKey).toBeTruthy(); + expect(hit.ref.chunkId).toBeTruthy(); + expect(hit.score).toBeGreaterThanOrEqual(0); + expect(hit.score).toBeLessThanOrEqual(1); + expect(hit.source.ts).toBeGreaterThan(0); + }); + + it("should find Next.js frontend details", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await searchTool.handler({ query: "Next.js App Router page.tsx" })) as any; + + expect(result.hits.length).toBeGreaterThan(0); + }); + + it("should find error stack information", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await searchTool.handler({ query: "Module not found Chart component" })) as any; + + expect(result.hits.length).toBeGreaterThan(0); + }); + + it("should respect maxResults parameter", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await searchTool.handler({ query: "deploy", maxResults: 2 })) as any; + + expect(result.hits.length).toBeLessThanOrEqual(2); + expect(result.meta.usedMaxResults).toBe(2); + }); + + it("should produce note on repeated identical query", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + + await searchTool.handler({ query: "unique test query xyz", maxResults: 6, minScore: 0.45 }); + const result2 = (await searchTool.handler({ query: "unique test query xyz", maxResults: 6, minScore: 0.45 })) as any; + + expect(result2.meta.note).toBeDefined(); + expect(result2.meta.note).toContain("already"); + }); +}); + +describe("Integration: memory_timeline", () => { + it("should return neighboring context around a hit", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const timelineTool = plugin.tools.find((t) => t.name === "memory_timeline")!; + + const searchResult = (await searchTool.handler({ query: "docker compose" })) as any; + if (searchResult.hits.length === 0) return; // skip if no hits + + const ref = searchResult.hits[0].ref; + const timelineResult = (await timelineTool.handler({ ref, window: 2 })) as any; + + expect(timelineResult.entries).toBeDefined(); + expect(timelineResult.entries.length).toBeGreaterThan(0); + expect(timelineResult.anchorRef).toEqual(ref); + + const entry = timelineResult.entries[0]; + expect(entry.excerpt).toBeTruthy(); + expect(entry.ref).toBeDefined(); + expect(["before", "current", "after"]).toContain(entry.relation); + }); +}); + +describe("Integration: memory_get", () => { + it("should return full original text of a chunk", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const getTool = plugin.tools.find((t) => t.name === "memory_get")!; + + const searchResult = (await searchTool.handler({ query: "docker compose" })) as any; + if (searchResult.hits.length === 0) return; + + const ref = searchResult.hits[0].ref; + const getResult = (await getTool.handler({ ref })) as any; + + expect(getResult.content).toBeTruthy(); + expect(getResult.ref).toBeDefined(); + expect(getResult.source).toBeDefined(); + expect(getResult.source.ts).toBeGreaterThan(0); + }); + + it("should respect maxChars parameter", async () => { + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const getTool = plugin.tools.find((t) => t.name === "memory_get")!; + + const searchResult = (await searchTool.handler({ query: "docker" })) as any; + if (searchResult.hits.length === 0) return; + + const ref = searchResult.hits[0].ref; + const getResult = (await getTool.handler({ ref, maxChars: 50 })) as any; + + expect(getResult.content.length).toBeLessThanOrEqual(52); // 50 + "…" + }); +}); + +describe("Integration: evidence anti-writeback", () => { + it("should not store evidence wrapper blocks in memory", async () => { + plugin.onConversationTurn([ + { role: "assistant", content: "Based on [STORED_MEMORY]old data about port 3000[/STORED_MEMORY] the answer is port 8443." }, + ], "session-test"); + + await new Promise((resolve) => setTimeout(resolve, 3000)); + + const searchTool = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await searchTool.handler({ query: "old data port 3000" })) as any; + + for (const hit of result.hits) { + expect(hit.original_excerpt).not.toContain("[STORED_MEMORY]"); + expect(hit.original_excerpt).not.toContain("old data about port 3000"); + } + }); +}); diff --git a/apps/memos-local-openclaw/tests/multi-agent.test.ts b/apps/memos-local-openclaw/tests/multi-agent.test.ts new file mode 100644 index 000000000..99af3bc19 --- /dev/null +++ b/apps/memos-local-openclaw/tests/multi-agent.test.ts @@ -0,0 +1,348 @@ +import { describe, it, expect, beforeEach, afterEach } from "vitest"; +import * as fs from "fs"; +import * as path from "path"; +import * as os from "os"; +import { SqliteStore } from "../src/storage/sqlite"; +import { cosineSimilarity, vectorSearch } from "../src/storage/vector"; +import type { Chunk, Skill, Logger } from "../src/types"; + +const noopLog: Logger = { + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, +}; + +let store: SqliteStore; +let tmpDir: string; + +beforeEach(() => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "memos-multi-agent-")); + store = new SqliteStore(path.join(tmpDir, "test.db"), noopLog); +}); + +afterEach(() => { + store.close(); + fs.rmSync(tmpDir, { recursive: true, force: true }); +}); + +function makeChunk(overrides: Partial = {}): Chunk { + return { + id: overrides.id ?? "chunk-1", + sessionKey: "session-1", + turnId: "turn-1", + seq: 0, + role: "user", + content: "Hello world", + kind: "paragraph", + summary: "Greeting message", + embedding: null, + taskId: null, + skillId: null, + owner: "agent:main", + dedupStatus: "active", + dedupTarget: null, + dedupReason: null, + mergeCount: 0, + lastHitAt: null, + mergeHistory: "[]", + createdAt: Date.now(), + updatedAt: Date.now(), + ...overrides, + }; +} + +describe("Multi-Agent Memory Isolation", () => { + it("should store and retrieve chunks with owner", () => { + store.insertChunk(makeChunk({ id: "c1", owner: "agent:alpha", content: "Alpha memory" })); + store.insertChunk(makeChunk({ id: "c2", owner: "agent:beta", content: "Beta memory" })); + store.insertChunk(makeChunk({ id: "c3", owner: "public", content: "Public memory" })); + + const c1 = store.getChunk("c1"); + expect(c1!.owner).toBe("agent:alpha"); + const c2 = store.getChunk("c2"); + expect(c2!.owner).toBe("agent:beta"); + const c3 = store.getChunk("c3"); + expect(c3!.owner).toBe("public"); + }); + + it("FTS search should filter by owner", () => { + store.insertChunk(makeChunk({ + id: "c1", owner: "agent:alpha", + content: "TypeScript deployment guide", + summary: "TypeScript deployment guide", + })); + store.insertChunk(makeChunk({ + id: "c2", owner: "agent:beta", + content: "TypeScript testing patterns", + summary: "TypeScript testing patterns", + })); + store.insertChunk(makeChunk({ + id: "c3", owner: "public", + content: "TypeScript best practices shared", + summary: "TypeScript best practices shared", + })); + + // Alpha sees own + public + const alphaResults = store.ftsSearch("TypeScript", 10, ["agent:alpha", "public"]); + const alphaIds = alphaResults.map(r => r.chunkId); + expect(alphaIds).toContain("c1"); + expect(alphaIds).toContain("c3"); + expect(alphaIds).not.toContain("c2"); + + // Beta sees own + public + const betaResults = store.ftsSearch("TypeScript", 10, ["agent:beta", "public"]); + const betaIds = betaResults.map(r => r.chunkId); + expect(betaIds).toContain("c2"); + expect(betaIds).toContain("c3"); + expect(betaIds).not.toContain("c1"); + + // No filter sees all + const allResults = store.ftsSearch("TypeScript", 10); + expect(allResults.length).toBe(3); + }); + + it("vector search should filter by owner", () => { + const vec1 = [0.1, 0.2, 0.3, 0.4, 0.5]; + const vec2 = [0.15, 0.25, 0.35, 0.45, 0.55]; + const vec3 = [0.2, 0.3, 0.4, 0.5, 0.6]; + + store.insertChunk(makeChunk({ id: "c1", owner: "agent:alpha" })); + store.insertChunk(makeChunk({ id: "c2", owner: "agent:beta" })); + store.insertChunk(makeChunk({ id: "c3", owner: "public" })); + + store.upsertEmbedding("c1", vec1); + store.upsertEmbedding("c2", vec2); + store.upsertEmbedding("c3", vec3); + + const queryVec = [0.1, 0.2, 0.3, 0.4, 0.5]; + + // Alpha sees own + public + const alphaResults = vectorSearch(store, queryVec, 10, undefined, ["agent:alpha", "public"]); + const alphaIds = alphaResults.map(r => r.chunkId); + expect(alphaIds).toContain("c1"); + expect(alphaIds).toContain("c3"); + expect(alphaIds).not.toContain("c2"); + + // No filter sees all + const allResults = vectorSearch(store, queryVec, 10); + expect(allResults.length).toBe(3); + }); +}); + +describe("Skill Visibility", () => { + function makeSkill(overrides: Partial = {}): Skill { + return { + id: overrides.id ?? "skill-1", + name: overrides.name ?? "test-skill", + description: "A test skill", + version: 1, + status: "active", + tags: "[]", + sourceType: "task", + dirPath: "/tmp/skills/test", + installed: 0, + owner: "agent:main", + visibility: "private", + qualityScore: 8, + createdAt: Date.now(), + updatedAt: Date.now(), + ...overrides, + }; + } + + it("should store skill with owner and visibility", () => { + store.insertSkill(makeSkill({ id: "s1", owner: "agent:alpha", visibility: "public" })); + const skill = store.getSkill("s1"); + expect(skill!.owner).toBe("agent:alpha"); + expect(skill!.visibility).toBe("public"); + }); + + it("should toggle skill visibility", () => { + store.insertSkill(makeSkill({ id: "s1" })); + expect(store.getSkill("s1")!.visibility).toBe("private"); + + store.setSkillVisibility("s1", "public"); + expect(store.getSkill("s1")!.visibility).toBe("public"); + + store.setSkillVisibility("s1", "private"); + expect(store.getSkill("s1")!.visibility).toBe("private"); + }); + + it("should list public skills", () => { + store.insertSkill(makeSkill({ id: "s1", name: "skill-a", visibility: "private" })); + store.insertSkill(makeSkill({ id: "s2", name: "skill-b", visibility: "public" })); + store.insertSkill(makeSkill({ id: "s3", name: "skill-c", visibility: "public" })); + + const publicSkills = store.listPublicSkills(); + expect(publicSkills.length).toBe(2); + expect(publicSkills.map(s => s.id)).toContain("s2"); + expect(publicSkills.map(s => s.id)).toContain("s3"); + }); + + it("skill FTS should scope by visibility", () => { + store.insertSkill(makeSkill({ + id: "s1", name: "docker-deploy", description: "Docker deployment guide", + owner: "agent:alpha", visibility: "private", + })); + store.insertSkill(makeSkill({ + id: "s2", name: "docker-compose", description: "Docker compose workflow", + owner: "agent:beta", visibility: "public", + })); + store.insertSkill(makeSkill({ + id: "s3", name: "docker-k8s", description: "Docker Kubernetes integration", + owner: "agent:alpha", visibility: "public", + })); + + // Self: alpha sees only own + const selfResults = store.skillFtsSearch("Docker", 10, "self", "agent:alpha"); + expect(selfResults.map(r => r.skillId)).toContain("s1"); + expect(selfResults.map(r => r.skillId)).toContain("s3"); + expect(selfResults.map(r => r.skillId)).not.toContain("s2"); + + // Public: sees only public skills + const publicResults = store.skillFtsSearch("Docker", 10, "public", "agent:alpha"); + expect(publicResults.map(r => r.skillId)).toContain("s2"); + expect(publicResults.map(r => r.skillId)).toContain("s3"); + expect(publicResults.map(r => r.skillId)).not.toContain("s1"); + + // Mix: sees own + public + const mixResults = store.skillFtsSearch("Docker", 10, "mix", "agent:alpha"); + expect(mixResults.length).toBe(3); + }); + + it("should store and retrieve skill embeddings", () => { + store.insertSkill(makeSkill({ id: "s1", name: "embed-test", visibility: "public" })); + const vec = [0.1, 0.2, 0.3, 0.4, 0.5]; + store.upsertSkillEmbedding("s1", vec); + + const retrieved = store.getSkillEmbedding("s1"); + expect(retrieved).not.toBeNull(); + expect(retrieved!.length).toBe(5); + expect(retrieved![0]).toBeCloseTo(0.1, 4); + }); + + it("skill embeddings should scope by visibility", () => { + store.insertSkill(makeSkill({ id: "s1", name: "priv-skill", owner: "agent:alpha", visibility: "private" })); + store.insertSkill(makeSkill({ id: "s2", name: "pub-skill", owner: "agent:beta", visibility: "public" })); + + store.upsertSkillEmbedding("s1", [0.1, 0.2, 0.3]); + store.upsertSkillEmbedding("s2", [0.4, 0.5, 0.6]); + + // Self: alpha sees own + const selfEmb = store.getSkillEmbeddings("self", "agent:alpha"); + expect(selfEmb.length).toBe(1); + expect(selfEmb[0].skillId).toBe("s1"); + + // Public: sees only public + const pubEmb = store.getSkillEmbeddings("public", "agent:alpha"); + expect(pubEmb.length).toBe(1); + expect(pubEmb[0].skillId).toBe("s2"); + + // Mix: alpha sees own + public + const mixEmb = store.getSkillEmbeddings("mix", "agent:alpha"); + expect(mixEmb.length).toBe(2); + }); +}); + +describe("Task Owner", () => { + it("should store task with owner", () => { + store.insertTask({ + id: "t1", + sessionKey: "session-1", + title: "Test Task", + summary: "Test summary", + status: "active", + owner: "agent:alpha", + startedAt: Date.now(), + endedAt: null, + updatedAt: Date.now(), + }); + + const task = store.getTask("t1"); + expect(task!.owner).toBe("agent:alpha"); + }); + + it("getActiveTask should filter by owner", () => { + const now = Date.now(); + store.insertTask({ + id: "t1", sessionKey: "s1", title: "Alpha Task", summary: "", + status: "active", owner: "agent:alpha", startedAt: now, endedAt: null, updatedAt: now, + }); + store.insertTask({ + id: "t2", sessionKey: "s1", title: "Beta Task", summary: "", + status: "active", owner: "agent:beta", startedAt: now + 1, endedAt: null, updatedAt: now + 1, + }); + + const alphaTask = store.getActiveTask("s1", "agent:alpha"); + expect(alphaTask).not.toBeNull(); + expect(alphaTask!.id).toBe("t1"); + + const betaTask = store.getActiveTask("s1", "agent:beta"); + expect(betaTask).not.toBeNull(); + expect(betaTask!.id).toBe("t2"); + + // Without owner filter, returns the most recent + const anyTask = store.getActiveTask("s1"); + expect(anyTask).not.toBeNull(); + expect(anyTask!.id).toBe("t2"); + }); + + it("getAllActiveTasks should filter by owner", () => { + const now = Date.now(); + store.insertTask({ + id: "t1", sessionKey: "s1", title: "Alpha Task", summary: "", + status: "active", owner: "agent:alpha", startedAt: now, endedAt: null, updatedAt: now, + }); + store.insertTask({ + id: "t2", sessionKey: "s2", title: "Beta Task", summary: "", + status: "active", owner: "agent:beta", startedAt: now, endedAt: null, updatedAt: now, + }); + + const alphaTasks = store.getAllActiveTasks("agent:alpha"); + expect(alphaTasks.length).toBe(1); + expect(alphaTasks[0].id).toBe("t1"); + + const betaTasks = store.getAllActiveTasks("agent:beta"); + expect(betaTasks.length).toBe(1); + expect(betaTasks[0].id).toBe("t2"); + + const allTasks = store.getAllActiveTasks(); + expect(allTasks.length).toBe(2); + }); + + it("getUnassignedChunks should filter by owner", () => { + store.insertChunk(makeChunk({ id: "c1", owner: "agent:alpha", content: "Alpha msg" })); + store.insertChunk(makeChunk({ id: "c2", owner: "agent:beta", content: "Beta msg" })); + + const alphaChunks = store.getUnassignedChunks("session-1", "agent:alpha"); + expect(alphaChunks.length).toBe(1); + expect(alphaChunks[0].id).toBe("c1"); + + const betaChunks = store.getUnassignedChunks("session-1", "agent:beta"); + expect(betaChunks.length).toBe(1); + expect(betaChunks[0].id).toBe("c2"); + + const allChunks = store.getUnassignedChunks("session-1"); + expect(allChunks.length).toBe(2); + }); + + it("listTasks should filter by owner", () => { + const now = Date.now(); + store.insertTask({ + id: "t1", sessionKey: "s1", title: "Alpha Task", summary: "", + status: "completed", owner: "agent:alpha", startedAt: now, endedAt: now + 1000, updatedAt: now, + }); + store.insertTask({ + id: "t2", sessionKey: "s1", title: "Beta Task", summary: "", + status: "completed", owner: "agent:beta", startedAt: now, endedAt: now + 1000, updatedAt: now, + }); + + const alphaResult = store.listTasks({ owner: "agent:alpha" }); + expect(alphaResult.total).toBe(1); + expect(alphaResult.tasks[0].id).toBe("t1"); + + const allResult = store.listTasks(); + expect(allResult.total).toBe(2); + }); +}); diff --git a/apps/memos-local-openclaw/tests/policy.test.ts b/apps/memos-local-openclaw/tests/policy.test.ts new file mode 100644 index 000000000..3e135f951 --- /dev/null +++ b/apps/memos-local-openclaw/tests/policy.test.ts @@ -0,0 +1,283 @@ +/** + * Policy test suite — 10 test cases verifying the retrieval strategy: + * + * 1. Simple math → NO search needed + * 2. Creative writing → NO search needed + * 3. General knowledge → NO search needed + * 4. Recall history → search SHOULD return results + * 5. memory_viewer tool → returns URL + * 6. System prompt NOT stored in memory + * 7. Conversation content correctly written (no instruction leakage) + * 8. Reference to past discussion → search returns relevant hits + * 9. Context-sufficient scenario → search still returns (engine validates) + * 10. Search results include evidence (original_excerpt) + */ + +import { describe, it, expect, beforeAll, afterAll } from "vitest"; +import * as fs from "fs"; +import * as path from "path"; +import * as os from "os"; +import { initPlugin, type MemosLocalPlugin } from "../src/index"; +import { captureMessages } from "../src/capture"; + +let plugin: MemosLocalPlugin; +let tmpDir: string; + +const noopLog = { + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, +}; + +beforeAll(async () => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "memos-policy-")); + plugin = initPlugin({ + stateDir: tmpDir, + config: { + embedding: { + provider: "openai_compatible" as any, + endpoint: "https://cloud.infini-ai.com/AIStudio/inference/api/if-dchmmprfd5jlyvsa/v1", + apiKey: "sk-g3k5fclhdufjlzr3", + model: "bge-embedding-m3", + }, + }, + log: noopLog, + }); + + // Seed diverse conversation history + plugin.onConversationTurn([ + { role: "user", content: "帮我把API服务部署到8443端口,用Docker Compose。" }, + { role: "assistant", content: "好的,我用 docker compose -f docker-compose.prod.yml up -d 来部署。确保防火墙开放了8443端口。" }, + ], "session-deploy"); + + plugin.onConversationTurn([ + { role: "user", content: "我们用Next.js 14做前端,App Router架构,主页在app/page.tsx,数据从/api/dashboard获取。" }, + { role: "assistant", content: "Next.js 14的App Router默认使用Server Components。你的/api/dashboard路由应该放在 app/api/dashboard/route.ts。" }, + ], "session-frontend"); + + plugin.onConversationTurn([ + { role: "user", content: "构建报错了:Error: Module not found: Can't resolve '@/components/Chart'。tsconfig的路径别名配错了。" }, + { role: "assistant", content: "tsconfig.json里的paths需要配置 \"@/*\": [\"./src/*\"]。" }, + ], "session-frontend"); + + plugin.onConversationTurn([ + { role: "user", content: "数据库密码配置在.env里的POSTGRES_PASSWORD变量中,Nginx反向代理配在/etc/nginx/conf.d/api.conf。" }, + { role: "assistant", content: "收到。记住不要把.env提交到Git。Nginx配置建议加上rate limiting和SSL。" }, + ], "session-deploy"); + + plugin.onConversationTurn([ + { role: "user", content: "帮我写一首关于春天的诗" }, + { role: "assistant", content: "春风拂柳绿,细雨润花红。燕来衔新泥,蝶舞满园中。" }, + ], "session-misc"); + + await plugin.flush(); +}, 120_000); + +afterAll(() => { + plugin.shutdown(); + fs.rmSync(tmpDir, { recursive: true, force: true }); +}); + +// ─── Test 1: Simple math should NOT need search ─── +describe("用例1: 简单数学题不需要搜索", () => { + it("search for '1+1' returns low-relevance hits (none about deployment or frontend)", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "1+1等于几", maxResults: 6, minScore: 0.45 })) as any; + // Even if engine returns hits, they should be semantically irrelevant to math + for (const hit of result.hits) { + const text = (hit.original_excerpt ?? "").toLowerCase(); + expect(text).not.toContain("1+1"); + } + }); +}); + +// ─── Test 2: Creative writing should NOT need search ─── +describe("用例2: 创意写作不需要搜索", () => { + it("search for '写诗关于大海' returns low-relevance noise, not targeted matches", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "写一首关于大海的五言绝句" })) as any; + // The engine may return noise from a small corpus, but in a real + // scenario the LLM would recognise these as irrelevant and skip search. + // Verify the engine still functions and doesn't crash on unrelated queries. + expect(result.meta.usedMinScore).toBe(0.45); + // Top hit (if any) gets score=1 after normalisation — that's expected. + // The key assertion: totalCandidates should be low for an off-topic query. + if (result.hits.length > 0) { + expect(result.meta.totalCandidates).toBeLessThanOrEqual(30); + } + }); +}); + +// ─── Test 3: General knowledge should NOT need search ─── +describe("用例3: 通用知识不需要搜索", () => { + it("search for '法国首都' returns noise from small corpus but engine works", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "法国的首都是哪里" })) as any; + // With only ~10 chunks in the test DB, every query hits something. + // Verify structure is correct — in production the LLM policy prevents + // unnecessary search calls, not the engine itself. + expect(result.meta).toBeDefined(); + expect(result.meta.usedMinScore).toBe(0.45); + if (result.hits.length > 0) { + expect(result.hits[0].original_excerpt).toBeTruthy(); + expect(result.hits[0].score).toBeLessThanOrEqual(1); + } + }); +}); + +// ─── Test 4: Recall history → SHOULD return search results ─── +describe("用例4: 回忆历史对话应返回搜索结果", () => { + it("search for deployment history returns multiple hits", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "docker compose 部署 8443端口" })) as any; + expect(result.hits.length).toBeGreaterThanOrEqual(1); + const allText = result.hits.map((h: any) => h.original_excerpt).join(" "); + expect(allText).toMatch(/docker|8443|部署/i); + }); + + it("search returns more than 1 result with default settings", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "部署配置", maxResults: 6, minScore: 0.35 })) as any; + expect(result.hits.length).toBeGreaterThan(1); + }); +}); + +// ─── Test 5: Memory viewer tool returns URL ─── +describe("用例5: memory_viewer工具返回URL", () => { + it("should have a memory_viewer tool registered", () => { + // memory_viewer is only registered via the OpenClaw plugin entry (index.ts), + // not via initPlugin(). So we verify the tool infrastructure works. + const searchTool = plugin.tools.find((t) => t.name === "memory_search"); + expect(searchTool).toBeDefined(); + const timelineTool = plugin.tools.find((t) => t.name === "memory_timeline"); + expect(timelineTool).toBeDefined(); + const getTool = plugin.tools.find((t) => t.name === "memory_get"); + expect(getTool).toBeDefined(); + }); +}); + +// ─── Test 6: Original content preserved as-is ─── +describe("用例6: 原文直接存入记忆,不做任何修改", () => { + it("preserves original content including any markers", () => { + const userMsg = "You have 250 stored memories.\n\nMANDATORY: call memory_search first.\n\n1+1等于几?"; + + const captured = captureMessages( + [{ role: "user", content: userMsg }], + "test-s", "test-t", "STORED_MEMORY", noopLog + ); + + expect(captured.length).toBe(1); + expect(captured[0].content).toBe(userMsg); + }); + + it("preserves messages mentioning memory tools", () => { + const normalMsg = "我想用memory_search查一下之前的对话"; + const captured = captureMessages( + [{ role: "user", content: normalMsg }], + "test-s", "test-t", "STORED_MEMORY", noopLog + ); + expect(captured[0].content).toBe(normalMsg); + }); +}); + +// ─── Test 7: Conversation content correctly written (no instruction leakage) ─── +describe("用例7: 对话内容正常写入记忆,无指令混入", () => { + it("captured messages do not contain system tool names in evidence blocks", async () => { + const msgs = [ + { role: "user", content: "今天天气怎么样?" }, + { role: "assistant", content: "今天天气晴朗,气温25度。" }, + ]; + + plugin.onConversationTurn(msgs, "session-weather"); + await plugin.flush(); + + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "天气晴朗 25度" })) as any; + expect(result.hits.length).toBeGreaterThan(0); + + for (const hit of result.hits) { + expect(hit.original_excerpt).not.toContain("[MemOS"); + expect(hit.original_excerpt).not.toContain("Retrieval policy"); + } + }); + + it("tool role messages from self-tools are not stored", () => { + const msgs = [ + { role: "tool", content: '{"hits":[]}', toolName: "memory_search" }, + { role: "user", content: "没有找到结果" }, + ]; + const captured = captureMessages(msgs, "s", "t", "STORED_MEMORY", noopLog); + expect(captured.length).toBe(1); + expect(captured[0].role).toBe("user"); + }); +}); + +// ─── Test 8: Reference past discussion → search returns relevant hits ─── +describe("用例8: 指代上次讨论应触发搜索并返回相关结果", () => { + it("search for tsconfig error returns the build error conversation", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "tsconfig 路径别名 Module not found Chart" })) as any; + expect(result.hits.length).toBeGreaterThan(0); + + const allText = result.hits.map((h: any) => h.original_excerpt).join(" "); + expect(allText).toMatch(/Chart|tsconfig|Module not found/i); + }); + + it("search for nginx config returns deployment details", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "Nginx反向代理配置" })) as any; + expect(result.hits.length).toBeGreaterThan(0); + + const allText = result.hits.map((h: any) => h.original_excerpt).join(" "); + expect(allText).toMatch(/nginx|Nginx|反向代理/i); + }); +}); + +// ─── Test 9: Score filtering returns multiple results, not just 1 ─── +describe("用例9: minScore过滤不会只返回1条结果", () => { + it("broad query returns multiple hits with default minScore", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "部署服务配置" })) as any; + expect(result.hits.length).toBeGreaterThan(1); + }); + + it("very low minScore returns more results", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "部署", minScore: 0.1 })) as any; + expect(result.hits.length).toBeGreaterThanOrEqual(2); + }); +}); + +// ─── Test 10: Search results include evidence (original_excerpt) ─── +describe("用例10: 搜索结果包含可引用的证据原文", () => { + it("each hit has non-empty original_excerpt, summary, score, ref, source", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "docker compose 部署" })) as any; + expect(result.hits.length).toBeGreaterThan(0); + + for (const hit of result.hits) { + expect(hit.original_excerpt).toBeTruthy(); + expect(hit.original_excerpt.length).toBeGreaterThan(10); + expect(hit.summary).toBeTruthy(); + expect(hit.score).toBeGreaterThan(0); + expect(hit.score).toBeLessThanOrEqual(1); + expect(hit.ref).toBeDefined(); + expect(hit.ref.chunkId).toBeTruthy(); + expect(hit.ref.sessionKey).toBeTruthy(); + expect(hit.source).toBeDefined(); + expect(hit.source.ts).toBeGreaterThan(0); + expect(hit.source.role).toMatch(/^(user|assistant|tool)$/); + } + }); + + it("original_excerpt contains actual conversation content, not instructions", async () => { + const search = plugin.tools.find((t) => t.name === "memory_search")!; + const result = (await search.handler({ query: "Next.js App Router" })) as any; + expect(result.hits.length).toBeGreaterThan(0); + + const topHit = result.hits[0]; + expect(topHit.original_excerpt).toMatch(/Next\.js|App Router|page\.tsx|dashboard/i); + expect(topHit.original_excerpt).not.toContain("Retrieval policy"); + }); +}); diff --git a/apps/memos-local-openclaw/tests/recall.test.ts b/apps/memos-local-openclaw/tests/recall.test.ts new file mode 100644 index 000000000..4aff78cde --- /dev/null +++ b/apps/memos-local-openclaw/tests/recall.test.ts @@ -0,0 +1,79 @@ +import { describe, it, expect } from "vitest"; +import { rrfFuse } from "../src/recall/rrf"; +import { applyRecencyDecay } from "../src/recall/recency"; + +describe("rrfFuse", () => { + it("should merge two ranked lists via RRF", () => { + const list1 = [ + { id: "a", score: 0.9 }, + { id: "b", score: 0.8 }, + { id: "c", score: 0.7 }, + ]; + const list2 = [ + { id: "b", score: 0.95 }, + { id: "a", score: 0.85 }, + { id: "d", score: 0.6 }, + ]; + + const scores = rrfFuse([list1, list2], 60); + + expect(scores.has("a")).toBe(true); + expect(scores.has("b")).toBe(true); + expect(scores.has("c")).toBe(true); + expect(scores.has("d")).toBe(true); + + // b appears at rank 1 in list1 and rank 0 in list2 → highest combined + // a appears at rank 0 in list1 and rank 1 in list2 + // Both should have equal RRF scores since rank(a,l1)=0,rank(a,l2)=1 same as rank(b,l1)=1,rank(b,l2)=0 + expect(scores.get("a")).toBeCloseTo(scores.get("b")!, 6); + }); + + it("should handle empty lists", () => { + const scores = rrfFuse([[], []], 60); + expect(scores.size).toBe(0); + }); + + it("should handle single list", () => { + const list = [{ id: "x", score: 1 }]; + const scores = rrfFuse([list], 60); + expect(scores.has("x")).toBe(true); + expect(scores.get("x")).toBeCloseTo(1 / 61, 6); + }); +}); + +describe("applyRecencyDecay", () => { + it("should give higher scores to recent items", () => { + const now = Date.now(); + const candidates = [ + { id: "recent", score: 1.0, createdAt: now - 1 * 24 * 3600_000 }, + { id: "old", score: 1.0, createdAt: now - 30 * 24 * 3600_000 }, + ]; + + const result = applyRecencyDecay(candidates, 14, now); + const recent = result.find((r) => r.id === "recent")!; + const old = result.find((r) => r.id === "old")!; + + expect(recent.score).toBeGreaterThan(old.score); + }); + + it("should not zero out old items (alpha floor)", () => { + const now = Date.now(); + const candidates = [ + { id: "ancient", score: 1.0, createdAt: now - 365 * 24 * 3600_000 }, + ]; + + const result = applyRecencyDecay(candidates, 14, now); + expect(result[0].score).toBeGreaterThan(0.2); + }); + + it("should preserve relative ordering when all same age", () => { + const now = Date.now(); + const candidates = [ + { id: "a", score: 0.9, createdAt: now }, + { id: "b", score: 0.5, createdAt: now }, + ]; + + const result = applyRecencyDecay(candidates, 14, now); + expect(result[0].score).toBeGreaterThan(result[1].score); + }); +}); diff --git a/apps/memos-local-openclaw/tests/storage.test.ts b/apps/memos-local-openclaw/tests/storage.test.ts new file mode 100644 index 000000000..fa919e0d8 --- /dev/null +++ b/apps/memos-local-openclaw/tests/storage.test.ts @@ -0,0 +1,185 @@ +import { describe, it, expect, beforeEach, afterEach } from "vitest"; +import * as fs from "fs"; +import * as path from "path"; +import * as os from "os"; +import { SqliteStore } from "../src/storage/sqlite"; +import { cosineSimilarity, vectorSearch } from "../src/storage/vector"; +import type { Chunk, Logger } from "../src/types"; + +const noopLog: Logger = { + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, +}; + +let store: SqliteStore; +let tmpDir: string; + +beforeEach(() => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "memos-test-")); + store = new SqliteStore(path.join(tmpDir, "test.db"), noopLog); +}); + +afterEach(() => { + store.close(); + fs.rmSync(tmpDir, { recursive: true, force: true }); +}); + +function makeChunk(overrides: Partial = {}): Chunk { + return { + id: overrides.id ?? "chunk-1", + sessionKey: "session-1", + turnId: "turn-1", + seq: 0, + role: "user", + content: "Hello world", + kind: "paragraph", + summary: "Greeting message", + embedding: null, + taskId: null, + skillId: null, + owner: "agent:main", + dedupStatus: "active", + dedupTarget: null, + dedupReason: null, + mergeCount: 0, + lastHitAt: null, + mergeHistory: "[]", + createdAt: Date.now(), + updatedAt: Date.now(), + ...overrides, + }; +} + +describe("SqliteStore", () => { + it("should insert and retrieve a chunk", () => { + const chunk = makeChunk(); + store.insertChunk(chunk); + + const retrieved = store.getChunk("chunk-1"); + expect(retrieved).not.toBeNull(); + expect(retrieved!.content).toBe("Hello world"); + expect(retrieved!.summary).toBe("Greeting message"); + }); + + it("should update summary", () => { + store.insertChunk(makeChunk()); + store.updateSummary("chunk-1", "Updated summary"); + + const retrieved = store.getChunk("chunk-1"); + expect(retrieved!.summary).toBe("Updated summary"); + }); + + it("should store and retrieve embeddings", () => { + store.insertChunk(makeChunk()); + const vec = [0.1, 0.2, 0.3, 0.4, 0.5]; + store.upsertEmbedding("chunk-1", vec); + + const retrieved = store.getEmbedding("chunk-1"); + expect(retrieved).not.toBeNull(); + expect(retrieved!).toHaveLength(5); + expect(retrieved![0]).toBeCloseTo(0.1, 5); + }); + + it("should perform FTS search", () => { + store.insertChunk(makeChunk({ id: "c1", content: "Deploy the application to production", summary: "Deployment instructions" })); + store.insertChunk(makeChunk({ id: "c2", content: "The cat sat on the mat", summary: "Cat story" })); + + const results = store.ftsSearch("deploy production", 10); + expect(results.length).toBeGreaterThanOrEqual(1); + expect(results[0].chunkId).toBe("c1"); + }); + + it("should handle FTS with special characters gracefully", () => { + store.insertChunk(makeChunk({ id: "c1", content: "Hello world", summary: "test" })); + + const results = store.ftsSearch('hello "world" (test) OR NOT', 10); + expect(Array.isArray(results)).toBe(true); + }); + + it("should get neighbor chunks", () => { + const now = Date.now(); + store.insertChunk(makeChunk({ id: "c1", turnId: "t1", seq: 0, createdAt: now })); + store.insertChunk(makeChunk({ id: "c2", turnId: "t1", seq: 1, createdAt: now + 1 })); + store.insertChunk(makeChunk({ id: "c3", turnId: "t2", seq: 0, createdAt: now + 2 })); + store.insertChunk(makeChunk({ id: "c4", turnId: "t2", seq: 1, createdAt: now + 3 })); + + const neighbors = store.getNeighborChunks("session-1", "t1", 1, 2); + expect(neighbors.length).toBeGreaterThanOrEqual(2); + }); + + it("getRecentEmbeddings returns at most limit rows ordered by created_at DESC", () => { + const base = Date.now() - 5000; + for (let i = 0; i < 5; i++) { + store.insertChunk(makeChunk({ id: `chunk-${i}`, createdAt: base + i * 1000 })); + store.upsertEmbedding(`chunk-${i}`, [0.1 * (i + 1), 0.2, 0.3]); + } + const all = store.getAllEmbeddings(); + expect(all.length).toBe(5); + + const recent2 = store.getRecentEmbeddings(2); + expect(recent2.length).toBe(2); + expect(recent2.map((r) => r.chunkId).sort()).toEqual(["chunk-3", "chunk-4"].sort()); + }); + + it("getRecentEmbeddings(0) returns all embeddings", () => { + store.insertChunk(makeChunk({ id: "a", createdAt: Date.now() })); + store.upsertEmbedding("a", [0.1, 0.2, 0.3]); + const recent0 = store.getRecentEmbeddings(0); + expect(recent0.length).toBe(1); + }); +}); + +describe("vectorSearch", () => { + const noopLog: Logger = { + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, + }; + let store: SqliteStore; + let tmpDir: string; + + beforeEach(() => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "memos-vec-")); + store = new SqliteStore(path.join(tmpDir, "test.db"), noopLog); + }); + afterEach(() => { + store.close(); + fs.rmSync(tmpDir, { recursive: true, force: true }); + }); + + it("with maxChunks limits search to recent N chunks", () => { + const base = Date.now() - 5000; + const dims = 4; + for (let i = 0; i < 4; i++) { + store.insertChunk(makeChunk({ id: `c${i}`, createdAt: base + i * 1000 })); + const vec = new Array(dims).fill(0).map((_, j) => (i === 2 && j === 0 ? 1 : 0.1)); + store.upsertEmbedding(`c${i}`, vec); + } + const queryVec = [1, 0, 0, 0]; + const allHits = vectorSearch(store, queryVec, 10); + expect(allHits.length).toBe(4); + + const cappedHits = vectorSearch(store, queryVec, 10, 2); + expect(cappedHits.length).toBeLessThanOrEqual(2); + const cappedIds = new Set(cappedHits.map((h) => h.chunkId)); + expect(cappedIds.size).toBeLessThanOrEqual(2); + }); +}); + +describe("cosineSimilarity", () => { + it("should return 1 for identical vectors", () => { + const v = [0.1, 0.2, 0.3]; + expect(cosineSimilarity(v, v)).toBeCloseTo(1.0, 5); + }); + + it("should return 0 for orthogonal vectors", () => { + expect(cosineSimilarity([1, 0], [0, 1])).toBeCloseTo(0.0, 5); + }); + + it("should handle zero vectors", () => { + expect(cosineSimilarity([0, 0], [1, 1])).toBe(0); + }); +}); diff --git a/apps/memos-local-openclaw/tests/task-processor.test.ts b/apps/memos-local-openclaw/tests/task-processor.test.ts new file mode 100644 index 000000000..b23f32ec4 --- /dev/null +++ b/apps/memos-local-openclaw/tests/task-processor.test.ts @@ -0,0 +1,455 @@ +import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; +import * as fs from "fs"; +import * as path from "path"; +import * as os from "os"; +import { SqliteStore } from "../src/storage/sqlite"; +import { TaskProcessor } from "../src/ingest/task-processor"; +import { Summarizer } from "../src/ingest/providers"; +import type { Chunk, Logger, PluginContext } from "../src/types"; + +const noopLog: Logger = { + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, +}; + +let store: SqliteStore; +let tmpDir: string; +let processor: TaskProcessor; + +function makeCtx(): PluginContext { + return { + stateDir: tmpDir, + workspaceDir: tmpDir, + config: { + storage: { dbPath: path.join(tmpDir, "test.db") }, + recall: { + maxResultsDefault: 6, + maxResultsMax: 20, + minScoreDefault: 0.45, + minScoreFloor: 0.35, + rrfK: 60, + mmrLambda: 0.7, + recencyHalfLifeDays: 14, + }, + }, + log: noopLog, + }; +} + +function insertTestChunk(overrides: Partial & { id: string }): void { + store.insertChunk({ + sessionKey: "session-1", + turnId: "turn-1", + seq: 0, + role: "user", + content: "test content", + kind: "paragraph", + summary: "test summary", + embedding: null, + taskId: null, + skillId: null, + dedupStatus: "active", + dedupTarget: null, + dedupReason: null, + mergeCount: 0, + lastHitAt: null, + mergeHistory: "[]", + createdAt: Date.now(), + updatedAt: Date.now(), + ...overrides, + }); +} + +beforeEach(() => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "memos-task-test-")); + store = new SqliteStore(path.join(tmpDir, "test.db"), noopLog); + processor = new TaskProcessor(store, makeCtx()); +}); + +afterEach(() => { + store.close(); + fs.rmSync(tmpDir, { recursive: true, force: true }); +}); + +describe("TaskProcessor", () => { + it("should create a new task when none exists", async () => { + const now = Date.now(); + insertTestChunk({ id: "c1", sessionKey: "s1", createdAt: now }); + + await processor.onChunksIngested("s1", now); + + const task = store.getActiveTask("s1"); + expect(task).not.toBeNull(); + expect(task!.status).toBe("active"); + expect(task!.sessionKey).toBe("s1"); + + const chunk = store.getChunk("c1"); + expect(chunk!.taskId).toBe(task!.id); + }); + + it("should assign multiple chunks to the same task within timeout", async () => { + const now = Date.now(); + insertTestChunk({ id: "c1", sessionKey: "s1", createdAt: now }); + await processor.onChunksIngested("s1", now); + + insertTestChunk({ id: "c2", sessionKey: "s1", createdAt: now + 1000 }); + await processor.onChunksIngested("s1", now + 1000); + + const task = store.getActiveTask("s1"); + const c1 = store.getChunk("c1"); + const c2 = store.getChunk("c2"); + expect(c1!.taskId).toBe(task!.id); + expect(c2!.taskId).toBe(task!.id); + }); + + it("should detect task boundary when time gap exceeds timeout", async () => { + const now = Date.now(); + const overTwoHours = 121 * 60 * 1000; // 2h 1min > 2h timeout + + insertTestChunk({ id: "c1", sessionKey: "s1", content: "First task content", createdAt: now }); + await processor.onChunksIngested("s1", now); + + const firstTask = store.getActiveTask("s1"); + expect(firstTask).not.toBeNull(); + const firstTaskId = firstTask!.id; + + insertTestChunk({ id: "c2", sessionKey: "s1", content: "Second task content", createdAt: now + overTwoHours }); + await processor.onChunksIngested("s1", now + overTwoHours); + + const oldTask = store.getTask(firstTaskId); + expect(["completed", "skipped"]).toContain(oldTask!.status); + + const newTask = store.getActiveTask("s1"); + expect(newTask).not.toBeNull(); + expect(newTask!.id).not.toBe(firstTaskId); + + const c2 = store.getChunk("c2"); + expect(c2!.taskId).toBe(newTask!.id); + }); + + it("should detect task boundary on session change", async () => { + const now = Date.now(); + + insertTestChunk({ id: "c1", sessionKey: "s1", createdAt: now }); + await processor.onChunksIngested("s1", now); + + const firstTask = store.getActiveTask("s1"); + expect(firstTask).not.toBeNull(); + + insertTestChunk({ id: "c2", sessionKey: "s2", createdAt: now + 1000 }); + await processor.onChunksIngested("s2", now + 1000); + + // Session change finalizes old task (completed) and creates new one + const oldTask = store.getTask(firstTask!.id); + const task2 = store.getActiveTask("s2"); + + expect(oldTask).not.toBeNull(); + expect(["completed", "skipped"]).toContain(oldTask!.status); + expect(task2).not.toBeNull(); + expect(oldTask!.id).not.toBe(task2!.id); + }); + + it("should generate task title from first user message", async () => { + const now = Date.now(); + + insertTestChunk({ id: "c1", sessionKey: "s1", role: "user", content: "Deploy the API to production", createdAt: now }); + await processor.onChunksIngested("s1", now); + + const overTwoHours = 121 * 60 * 1000; + insertTestChunk({ id: "c2", sessionKey: "s1", content: "New task", createdAt: now + overTwoHours }); + await processor.onChunksIngested("s1", now + overTwoHours); + + const chunks = store.getChunksByTask(store.getActiveTask("s1")!.id); + expect(chunks).toBeDefined(); + + const allTasks = store.getChunksByTask(store.getChunk("c1")!.taskId!); + expect(allTasks.length).toBeGreaterThan(0); + }); + + it("should get chunks by task id", async () => { + const now = Date.now(); + insertTestChunk({ id: "c1", sessionKey: "s1", createdAt: now }); + insertTestChunk({ id: "c2", sessionKey: "s1", createdAt: now + 100 }); + await processor.onChunksIngested("s1", now + 100); + + const task = store.getActiveTask("s1"); + const taskChunks = store.getChunksByTask(task!.id); + expect(taskChunks).toHaveLength(2); + }); + + it("deleteAll should also clear tasks", () => { + const now = Date.now(); + store.insertTask({ + id: "t1", + sessionKey: "s1", + title: "Test", + summary: "Test summary", + status: "active", + startedAt: now, + endedAt: null, + updatedAt: now, + }); + store.deleteAll(); + expect(store.getTask("t1")).toBeNull(); + }); + + it("should mark task as skipped when only 1 chunk (too few)", async () => { + const now = Date.now(); + const gap = 121 * 60 * 1000; + + insertTestChunk({ id: "c1", sessionKey: "s1", role: "user", content: "hello", createdAt: now }); + await processor.onChunksIngested("s1", now); + + const firstTaskId = store.getActiveTask("s1")!.id; + + insertTestChunk({ id: "c2", sessionKey: "s1", content: "next task", createdAt: now + gap }); + await processor.onChunksIngested("s1", now + gap); + + const oldTask = store.getTask(firstTaskId); + expect(oldTask!.status).toBe("skipped"); + expect(oldTask!.summary).toContain("过少"); + }); + + it("should mark task as skipped for trivial test data", async () => { + const now = Date.now(); + const gap = 121 * 60 * 1000; + + insertTestChunk({ id: "t1", sessionKey: "s1", role: "user", content: "test", createdAt: now }); + insertTestChunk({ id: "t2", sessionKey: "s1", role: "assistant", content: "ok", createdAt: now + 1 }); + insertTestChunk({ id: "t3", sessionKey: "s1", role: "user", content: "hello", createdAt: now + 2 }); + insertTestChunk({ id: "t4", sessionKey: "s1", role: "assistant", content: "hi", createdAt: now + 3 }); + await processor.onChunksIngested("s1", now + 3); + + const firstTaskId = store.getActiveTask("s1")!.id; + + insertTestChunk({ id: "t5", sessionKey: "s1", content: "new task starts", createdAt: now + gap }); + await processor.onChunksIngested("s1", now + gap); + + const oldTask = store.getTask(firstTaskId); + expect(oldTask!.status).toBe("skipped"); + expect(oldTask!.summary.length).toBeGreaterThan(0); + }); + + it("should mark task as skipped when dominated by tool results", async () => { + const now = Date.now(); + const gap = 121 * 60 * 1000; + + insertTestChunk({ id: "r1", sessionKey: "s1", role: "user", content: "run the tests please and check the results", createdAt: now }); + insertTestChunk({ id: "r2", sessionKey: "s1", role: "assistant", content: "Sure, running the tests now with verbose output enabled", createdAt: now + 1 }); + insertTestChunk({ id: "r3", sessionKey: "s1", role: "tool", content: "Test suite passed: 10 tests, 0 failures, duration 2.3s", createdAt: now + 2 }); + insertTestChunk({ id: "r4", sessionKey: "s1", role: "tool", content: "Coverage report: 85% statements, 72% branches, 90% functions", createdAt: now + 3 }); + insertTestChunk({ id: "r5", sessionKey: "s1", role: "tool", content: "Lint check passed: 0 errors, 3 warnings in 12 files scanned", createdAt: now + 4 }); + insertTestChunk({ id: "r6", sessionKey: "s1", role: "tool", content: "Build output: dist/index.js 45kb, dist/index.css 12kb gzipped", createdAt: now + 5 }); + insertTestChunk({ id: "r7", sessionKey: "s1", role: "tool", content: "Deploy status: staging environment updated successfully at 10:23 AM", createdAt: now + 6 }); + await processor.onChunksIngested("s1", now + 6); + + const firstTaskId = store.getActiveTask("s1")!.id; + + insertTestChunk({ id: "r8", sessionKey: "s1", content: "next", createdAt: now + gap }); + await processor.onChunksIngested("s1", now + gap); + + const oldTask = store.getTask(firstTaskId); + expect(oldTask!.status).toBe("skipped"); + expect(oldTask!.summary.length).toBeGreaterThan(0); + }); + + it("should mark task as skipped when user repeats the same message", async () => { + const now = Date.now(); + const gap = 121 * 60 * 1000; + + insertTestChunk({ id: "d1", sessionKey: "s1", role: "user", content: "what is my name and who am I please tell me", createdAt: now }); + insertTestChunk({ id: "d2", sessionKey: "s1", role: "assistant", content: "I do not have any information about your name or identity in my memory at this time", createdAt: now + 1 }); + insertTestChunk({ id: "d3", sessionKey: "s1", role: "user", content: "what is my name and who am I please tell me", createdAt: now + 2 }); + insertTestChunk({ id: "d4", sessionKey: "s1", role: "assistant", content: "I still do not have records of your name, could you please tell me who you are", createdAt: now + 3 }); + insertTestChunk({ id: "d5", sessionKey: "s1", role: "user", content: "what is my name and who am I please tell me", createdAt: now + 4 }); + insertTestChunk({ id: "d6", sessionKey: "s1", role: "assistant", content: "I apologize but I cannot find your name or identity in my stored conversation memories", createdAt: now + 5 }); + await processor.onChunksIngested("s1", now + 5); + + const firstTaskId = store.getActiveTask("s1")!.id; + + insertTestChunk({ id: "d7", sessionKey: "s1", content: "new topic now", createdAt: now + gap }); + await processor.onChunksIngested("s1", now + gap); + + const oldTask = store.getTask(firstTaskId); + expect(oldTask!.status).toBe("skipped"); + expect(oldTask!.summary).toContain("重复"); + }); + + it("should NOT skip summary for tasks with substantial content", async () => { + const now = Date.now(); + const gap = 121 * 60 * 1000; + + insertTestChunk({ id: "s1", sessionKey: "s1", role: "user", content: "I need to deploy the API to port 8443 using Docker compose", createdAt: now }); + insertTestChunk({ id: "s2", sessionKey: "s1", role: "assistant", content: "Sure, here is how you can deploy your API service to production using Docker Compose on port 8443", createdAt: now + 1 }); + insertTestChunk({ id: "s3", sessionKey: "s1", role: "user", content: "The build failed with error: Module not found. How can I fix the tsconfig paths?", createdAt: now + 2 }); + insertTestChunk({ id: "s4", sessionKey: "s1", role: "assistant", content: "Check your tsconfig.json paths configuration, it should have the correct baseUrl and paths mappings", createdAt: now + 3 }); + insertTestChunk({ id: "s5", sessionKey: "s1", role: "user", content: "That worked! Now the build passes. What about the health checks?", createdAt: now + 4 }); + await processor.onChunksIngested("s1", now + 4); + + const firstTaskId = store.getActiveTask("s1")!.id; + + insertTestChunk({ id: "s6", sessionKey: "s1", content: "new topic", createdAt: now + gap }); + await processor.onChunksIngested("s1", now + gap); + + const oldTask = store.getTask(firstTaskId); + expect(oldTask!.status).toBe("completed"); + expect(oldTask!.summary.length).toBeGreaterThan(0); + }); + + it("should NOT skip summary for Chinese conversation with real content", async () => { + const now = Date.now(); + const gap = 121 * 60 * 1000; + + insertTestChunk({ id: "z1", sessionKey: "s1", role: "user", content: "我需要把这个项目部署到阿里云的ECS服务器上,端口用8443", createdAt: now }); + insertTestChunk({ id: "z2", sessionKey: "s1", role: "assistant", content: "好的,我来帮你配置阿里云ECS的部署流程,首先需要确认你的安全组规则允许8443端口", createdAt: now + 1 }); + insertTestChunk({ id: "z3", sessionKey: "s1", role: "user", content: "安全组已经配好了,但是Docker容器启动失败,报错说找不到配置文件", createdAt: now + 2 }); + insertTestChunk({ id: "z4", sessionKey: "s1", role: "assistant", content: "请检查docker-compose.yml中的volumes挂载路径是否正确,配置文件需要映射到容器内的/app/config目录", createdAt: now + 3 }); + insertTestChunk({ id: "z5", sessionKey: "s1", role: "user", content: "搞定了,现在服务正常运行了,谢谢!", createdAt: now + 4 }); + await processor.onChunksIngested("s1", now + 4); + + const firstTaskId = store.getActiveTask("s1")!.id; + + insertTestChunk({ id: "z6", sessionKey: "s1", content: "下一个话题", createdAt: now + gap }); + await processor.onChunksIngested("s1", now + gap); + + const oldTask = store.getTask(firstTaskId); + expect(oldTask!.status).toBe("completed"); + expect(oldTask!.summary.length).toBeGreaterThan(0); + }); +}); + +describe("TaskProcessor with LLM topic boundary detection", () => { + let store: SqliteStore; + let tmpDir: string; + + beforeEach(() => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "memos-llm-topic-test-")); + store = new SqliteStore(path.join(tmpDir, "test.db"), noopLog); + }); + + afterEach(() => { + store.close(); + fs.rmSync(tmpDir, { recursive: true, force: true }); + }); + + function insertChunk(overrides: Partial & { id: string }): void { + store.insertChunk({ + sessionKey: "s1", + turnId: "turn-1", + seq: 0, + role: "user", + content: "test content", + kind: "paragraph", + summary: "test summary", + embedding: null, + taskId: null, + skillId: null, + dedupStatus: "active", + dedupTarget: null, + dedupReason: null, + mergeCount: 0, + lastHitAt: null, + mergeHistory: "[]", + createdAt: Date.now(), + updatedAt: Date.now(), + ...overrides, + }); + } + + it("should split task when LLM judges new topic", async () => { + const ctx = makeCtx(); + const proc = new TaskProcessor(store, ctx); + + vi.spyOn(Summarizer.prototype, "judgeNewTopic").mockResolvedValue(true); + + const now = Date.now(); + insertChunk({ id: "a1", summary: "deploy app to server", content: "deploy app to server", createdAt: now }); + insertChunk({ id: "a2", role: "assistant", summary: "deployment guide", content: "deployment guide", createdAt: now + 1 }); + await proc.onChunksIngested("s1", now + 1); + + const task1Id = store.getActiveTask("s1")!.id; + + insertChunk({ id: "a3", summary: "best recipe for pasta", content: "best recipe for pasta", createdAt: now + 60000 }); + await proc.onChunksIngested("s1", now + 60000); + + const oldTask = store.getTask(task1Id); + expect(["completed", "skipped"]).toContain(oldTask!.status); + + const newTask = store.getActiveTask("s1"); + expect(newTask).not.toBeNull(); + expect(newTask!.id).not.toBe(task1Id); + + vi.restoreAllMocks(); + }); + + it("should NOT split task when LLM judges same topic", async () => { + const ctx = makeCtx(); + const proc = new TaskProcessor(store, ctx); + + vi.spyOn(Summarizer.prototype, "judgeNewTopic").mockResolvedValue(false); + + const now = Date.now(); + insertChunk({ id: "b1", summary: "deploy step 1", content: "deploy step 1", createdAt: now }); + insertChunk({ id: "b2", role: "assistant", summary: "step 1 done", content: "step 1 done", createdAt: now + 1 }); + await proc.onChunksIngested("s1", now + 1); + + const task1Id = store.getActiveTask("s1")!.id; + + insertChunk({ id: "b3", summary: "deploy step 2", content: "deploy step 2", createdAt: now + 60000 }); + await proc.onChunksIngested("s1", now + 60000); + + const task = store.getActiveTask("s1"); + expect(task).not.toBeNull(); + expect(task!.id).toBe(task1Id); + + vi.restoreAllMocks(); + }); + + it("should keep current task when LLM is not configured (returns null)", async () => { + const ctx = makeCtx(); + const proc = new TaskProcessor(store, ctx); + + vi.spyOn(Summarizer.prototype, "judgeNewTopic").mockResolvedValue(null); + + const now = Date.now(); + insertChunk({ id: "c1", summary: "topic A", content: "topic A", createdAt: now }); + await proc.onChunksIngested("s1", now); + + const task1Id = store.getActiveTask("s1")!.id; + + insertChunk({ id: "c2", summary: "totally different topic", content: "totally different topic", createdAt: now + 60000 }); + await proc.onChunksIngested("s1", now + 60000); + + const task = store.getActiveTask("s1"); + expect(task!.id).toBe(task1Id); + + vi.restoreAllMocks(); + }); + + it("should still split by 2-hour timeout even if LLM says same topic", async () => { + const ctx = makeCtx(); + const proc = new TaskProcessor(store, ctx); + + // LLM would say SAME, but the gap is > 2h so it should split regardless + vi.spyOn(Summarizer.prototype, "judgeNewTopic").mockResolvedValue(false); + + const now = Date.now(); + const gap = 121 * 60 * 1000; // 2h 1min + + insertChunk({ id: "d1", summary: "topic A", content: "topic A", createdAt: now }); + insertChunk({ id: "d2", role: "assistant", summary: "about topic A", content: "about topic A", createdAt: now + 1 }); + await proc.onChunksIngested("s1", now + 1); + + const task1Id = store.getActiveTask("s1")!.id; + + insertChunk({ id: "d3", summary: "still topic A", content: "still topic A", createdAt: now + gap }); + await proc.onChunksIngested("s1", now + gap); + + const oldTask = store.getTask(task1Id); + expect(["completed", "skipped"]).toContain(oldTask!.status); + + vi.restoreAllMocks(); + }); +}); diff --git a/apps/memos-local-openclaw/vitest.config.ts b/apps/memos-local-openclaw/vitest.config.ts new file mode 100644 index 000000000..51e003901 --- /dev/null +++ b/apps/memos-local-openclaw/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + testTimeout: 60_000, + hookTimeout: 120_000, + }, +}); diff --git a/apps/memos-local-openclaw/www/docs b/apps/memos-local-openclaw/www/docs new file mode 120000 index 000000000..a9594bfe4 --- /dev/null +++ b/apps/memos-local-openclaw/www/docs @@ -0,0 +1 @@ +../docs \ No newline at end of file From 318ad4f1860c9e84680138a1db29ea9bff5f00d3 Mon Sep 17 00:00:00 2001 From: tangbo <1502220175@qq.com> Date: Sat, 7 Mar 2026 22:42:30 +0800 Subject: [PATCH 06/18] chore: clean up gitignore and add missing config files - Update root .gitignore to whitelist apps/ directory files (json, html, ts, etc.) that were previously excluded by the global *.json rule - Update memos-local-openclaw .gitignore to exclude package-lock.json, www/, docs/, ppt/, .DS_Store, and database files - Remove unnecessary www/docs symlink from tracking - Add missing package.json, tsconfig.json, openclaw.plugin.json to git - Add previously ignored config files for openwork-memos-integration Made-with: Cursor --- .gitignore | 14 + apps/memos-local-openclaw/.gitignore | 19 + .../memos-local-openclaw/openclaw.plugin.json | 33 + apps/memos-local-openclaw/package.json | 60 + apps/memos-local-openclaw/tsconfig.json | 20 + apps/memos-local-openclaw/www/docs | 1 - .../apps/desktop/.eslintrc.json | 39 + .../apps/desktop/index.html | 21 + .../apps/desktop/package.json | 178 + .../ask-user-question/package-lock.json | 1650 +++++++++ .../skills/ask-user-question/package.json | 17 + .../skills/ask-user-question/tsconfig.json | 14 + .../skills/dev-browser/package-lock.json | 3006 +++++++++++++++++ .../desktop/skills/dev-browser/package.json | 31 + .../desktop/skills/dev-browser/tsconfig.json | 34 + .../skills/file-permission/package-lock.json | 1650 +++++++++ .../skills/file-permission/package.json | 17 + .../skills/file-permission/tsconfig.json | 24 + .../apps/desktop/tsconfig.json | 45 + apps/openwork-memos-integration/package.json | 30 + .../packages/shared/package.json | 18 + .../packages/shared/tsconfig.json | 25 + 22 files changed, 6945 insertions(+), 1 deletion(-) create mode 100644 apps/memos-local-openclaw/openclaw.plugin.json create mode 100644 apps/memos-local-openclaw/package.json create mode 100644 apps/memos-local-openclaw/tsconfig.json delete mode 120000 apps/memos-local-openclaw/www/docs create mode 100644 apps/openwork-memos-integration/apps/desktop/.eslintrc.json create mode 100644 apps/openwork-memos-integration/apps/desktop/index.html create mode 100644 apps/openwork-memos-integration/apps/desktop/package.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/file-permission/package.json create mode 100644 apps/openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json create mode 100644 apps/openwork-memos-integration/apps/desktop/tsconfig.json create mode 100644 apps/openwork-memos-integration/package.json create mode 100644 apps/openwork-memos-integration/packages/shared/package.json create mode 100644 apps/openwork-memos-integration/packages/shared/tsconfig.json diff --git a/.gitignore b/.gitignore index ac31eb41a..1a9c5653f 100644 --- a/.gitignore +++ b/.gitignore @@ -180,6 +180,20 @@ venv.bak/ # but do not ignore docs/openapi.json !docs/openapi.json +# do not ignore apps/ config files +!apps/**/*.json +!apps/**/*.html +!apps/**/*.ts +!apps/**/*.tsx +!apps/**/*.js +!apps/**/*.cjs +!apps/**/*.css +!apps/**/*.md +!apps/**/*.yaml +!apps/**/*.yml +!apps/**/*.svg +!apps/**/*.sh + # mypy .mypy_cache/ diff --git a/apps/memos-local-openclaw/.gitignore b/apps/memos-local-openclaw/.gitignore index d546b9766..3db3e1643 100644 --- a/apps/memos-local-openclaw/.gitignore +++ b/apps/memos-local-openclaw/.gitignore @@ -2,3 +2,22 @@ node_modules/ dist/ *.tsbuildinfo .env + +# OS files +.DS_Store +Thumbs.db + +# IDE +.vscode/ +.idea/ + +# Generated / non-essential +package-lock.json +www/ +docs/ +ppt/ + +# Database files +*.sqlite +*.sqlite-journal +*.db diff --git a/apps/memos-local-openclaw/openclaw.plugin.json b/apps/memos-local-openclaw/openclaw.plugin.json new file mode 100644 index 000000000..df6e05343 --- /dev/null +++ b/apps/memos-local-openclaw/openclaw.plugin.json @@ -0,0 +1,33 @@ +{ + "id": "memos-local-openclaw-plugin", + "name": "MemOS Local Memory", + "description": "Full-write local conversation memory with hybrid search (RRF + MMR + recency). Provides memory_search, memory_get, task_summary, memory_timeline, memory_viewer for layered retrieval.", + "kind": "memory", + "version": "0.1.11", + "homepage": "https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-openclaw", + "configSchema": { + "type": "object", + "additionalProperties": true, + "description": "Configuration for MemOS Local Memory. Use Raw mode to edit embedding/summarizer settings.", + "properties": { + "viewerPort": { + "type": "number", + "description": "Memory Viewer HTTP port (default 18799)" + } + } + }, + "requirements": { + "node": ">=18.0.0", + "openclaw": ">=2026.2.0" + }, + "setup": { + "postInstall": "node scripts/postinstall.cjs", + "notes": [ + "After install, add to ~/.openclaw/openclaw.json: plugins.slots.memory = \"memos-local-openclaw-plugin\"", + "Set agents.defaults.memorySearch.enabled = false to disable OpenClaw's built-in memory", + "Restart the gateway: openclaw gateway stop && openclaw gateway start", + "Memory Viewer will be available at http://127.0.0.1:18799", + "If better-sqlite3 fails to build, ensure you have C++ build tools: xcode-select --install (macOS) or build-essential (Linux)" + ] + } +} diff --git a/apps/memos-local-openclaw/package.json b/apps/memos-local-openclaw/package.json new file mode 100644 index 000000000..b42eb19b1 --- /dev/null +++ b/apps/memos-local-openclaw/package.json @@ -0,0 +1,60 @@ +{ + "name": "@memtensor/memos-local-openclaw-plugin", + "version": "0.3.20", + "description": "MemOS Local memory plugin for OpenClaw — full-write, hybrid-recall, progressive retrieval", + "type": "module", + "main": "index.ts", + "types": "dist/index.d.ts", + "files": [ + "index.ts", + "src", + "dist", + "skill", + "scripts/postinstall.cjs", + "openclaw.plugin.json", + "README.md", + ".env.example" + ], + "openclaw": { + "id": "memos-local-openclaw-plugin", + "extensions": [ + "./index.ts" + ], + "installDependencies": true + }, + "scripts": { + "build": "tsc", + "dev": "tsc --watch", + "lint": "eslint src --ext .ts", + "test": "vitest run", + "test:watch": "vitest", + "postinstall": "node scripts/postinstall.cjs", + "prepublishOnly": "npm run build" + }, + "keywords": [ + "openclaw", + "plugin", + "memory", + "memos", + "rag" + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "dependencies": { + "@huggingface/transformers": "^3.8.0", + "@sinclair/typebox": "^0.34.48", + "better-sqlite3": "^12.6.2", + "posthog-node": "^5.28.0", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.12", + "@types/node": "^22.10.0", + "@types/uuid": "^10.0.0", + "tsx": "^4.21.0", + "typescript": "^5.7.0", + "vitest": "^2.1.0" + } +} diff --git a/apps/memos-local-openclaw/tsconfig.json b/apps/memos-local-openclaw/tsconfig.json new file mode 100644 index 000000000..53c08a1d2 --- /dev/null +++ b/apps/memos-local-openclaw/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "CommonJS", + "lib": ["ES2022"], + "outDir": "dist", + "rootDir": "src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "moduleResolution": "node" + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "**/*.test.ts"] +} diff --git a/apps/memos-local-openclaw/www/docs b/apps/memos-local-openclaw/www/docs deleted file mode 120000 index a9594bfe4..000000000 --- a/apps/memos-local-openclaw/www/docs +++ /dev/null @@ -1 +0,0 @@ -../docs \ No newline at end of file diff --git a/apps/openwork-memos-integration/apps/desktop/.eslintrc.json b/apps/openwork-memos-integration/apps/desktop/.eslintrc.json new file mode 100644 index 000000000..d655265ef --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/.eslintrc.json @@ -0,0 +1,39 @@ +{ + "root": true, + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "settings": { + "react": { + "version": "detect" + } + }, + "plugins": [ + "@typescript-eslint", + "react", + "react-hooks" + ], + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react-hooks/recommended" + ], + "ignorePatterns": [ + "dist", + "dist-electron", + "release", + "node_modules" + ], + "rules": { + "react/react-in-jsx-scope": "off", + "react/prop-types": "off" + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/index.html b/apps/openwork-memos-integration/apps/desktop/index.html new file mode 100644 index 000000000..4a0055ba4 --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/index.html @@ -0,0 +1,21 @@ + + + + + + + Openwork + + + + + +
+ + + diff --git a/apps/openwork-memos-integration/apps/desktop/package.json b/apps/openwork-memos-integration/apps/desktop/package.json new file mode 100644 index 000000000..17680c922 --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/package.json @@ -0,0 +1,178 @@ +{ + "name": "@accomplish/desktop", + "version": "0.2.3", + "private": true, + "type": "module", + "description": "Accomplish Desktop App", + "main": "dist-electron/main/index.js", + "scripts": { + "postinstall": "electron-rebuild && npm --prefix skills/dev-browser install && npm --prefix skills/file-permission install && npm --prefix skills/ask-user-question install", + "dev": "node scripts/patch-electron-name.cjs && rm -rf dist-electron && vite", + "dev:clean": "CLEAN_START=1 vite", + "build": "tsc && vite build && npm --prefix skills/dev-browser install --omit=dev && npm --prefix skills/file-permission install --omit=dev && npm --prefix skills/ask-user-question install --omit=dev", + "build:electron": "tsc && vite build && node scripts/package.cjs", + "build:unpack": "tsc && vite build && node scripts/package.cjs --dir", + "package": "pnpm build && node scripts/package.cjs --mac --publish never", + "package:mac": "pnpm build && node scripts/package.cjs --mac --publish never", + "release": "pnpm build && node scripts/package.cjs --mac --publish always", + "release:mac": "pnpm build && node scripts/package.cjs --mac --publish always", + "preview": "vite preview", + "typecheck": "tsc --noEmit", + "lint": "tsc --noEmit", + "clean": "rm -rf dist dist-electron release", + "download:nodejs": "node scripts/download-nodejs.cjs", + "test": "vitest run", + "test:unit": "vitest run --config vitest.unit.config.ts", + "test:integration": "vitest run --config vitest.integration.config.ts", + "test:coverage": "vitest run --coverage", + "test:watch": "vitest watch", + "test:e2e": "docker compose -f e2e/docker/docker-compose.yml up --build --abort-on-container-exit --exit-code-from e2e-tests", + "test:e2e:build": "docker compose -f e2e/docker/docker-compose.yml build", + "test:e2e:clean": "docker compose -f e2e/docker/docker-compose.yml down --rmi local -v", + "test:e2e:report": "playwright show-report e2e/html-report", + "test:e2e:native": "playwright test --config=e2e/playwright.config.ts", + "test:e2e:native:ui": "playwright test --config=e2e/playwright.config.ts --ui", + "test:e2e:native:debug": "playwright test --config=e2e/playwright.config.ts --debug", + "test:e2e:native:fast": "playwright test --config=e2e/playwright.config.ts --project=electron-fast", + "test:e2e:native:integration": "playwright test --config=e2e/playwright.config.ts --project=electron-integration" + }, + "dependencies": { + "@accomplish/shared": "workspace:*", + "@aws-sdk/client-bedrock": "^3.971.0", + "@aws-sdk/credential-providers": "^3.971.0", + "@radix-ui/react-avatar": "^1.1.2", + "@radix-ui/react-dialog": "^1.1.4", + "@radix-ui/react-dropdown-menu": "^2.1.4", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-popover": "^1.1.4", + "@radix-ui/react-select": "^2.1.4", + "@radix-ui/react-separator": "^1.1.1", + "@radix-ui/react-slot": "^1.1.1", + "@radix-ui/react-tooltip": "^1.1.6", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dotenv": "^17.2.3", + "electron-store": "^8.2.0", + "framer-motion": "^12.26.2", + "lucide-react": "^0.454.0", + "node-pty": "^1.1.0", + "opencode-ai": "1.1.16", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-markdown": "^9.0.1", + "react-router-dom": "^7.1.1", + "tailwind-merge": "^3.3.1", + "zod": "^3.24.1", + "zustand": "^5.0.2" + }, + "devDependencies": { + "@electron/rebuild": "^4.0.2", + "@playwright/test": "^1.57.0", + "@tailwindcss/typography": "^0.5.15", + "@testing-library/dom": "^10.4.1", + "@testing-library/jest-dom": "6.6.3", + "@testing-library/react": "^16.3.1", + "@types/node": "^22.10.2", + "@types/react": "^19.0.2", + "@types/react-dom": "^19.0.2", + "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "^4.0.17", + "autoprefixer": "^10.4.20", + "electron": "^35.2.1", + "electron-builder": "^25.1.8", + "happy-dom": "^20.1.0", + "jsdom": "^27.4.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.7.2", + "vite": "^6.0.6", + "vite-plugin-electron": "^0.28.8", + "vitest": "^4.0.17" + }, + "build": { + "appId": "ai.accomplish.desktop", + "productName": "Openwork", + "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", + "directories": { + "output": "release", + "buildResources": "resources" + }, + "files": [ + "dist/**/*", + "dist-electron/**/*", + "node_modules/opencode-ai/**", + "node_modules/node-pty/**", + "node_modules/electron-store/**", + "node_modules/conf/**", + "node_modules/env-paths/**", + "node_modules/json-schema-typed/**", + "node_modules/atomically/**", + "node_modules/debounce-fn/**", + "!node_modules/@accomplish/**", + "!node_modules/opencode-darwin-*/**", + "!node_modules/opencode-linux-*/**", + "!node_modules/opencode-win32-*/**" + ], + "asar": true, + "asarUnpack": [ + "node_modules/opencode-ai/bin/opencode", + "node_modules/opencode-ai/package.json", + "node_modules/node-pty/build/**/*.node", + "node_modules/node-pty/package.json", + "dist-electron/main/mcp/*.js" + ], + "afterPack": "./scripts/after-pack.cjs", + "extraResources": [ + { + "from": "resources/icon.png", + "to": "icon.png" + }, + { + "from": "skills", + "to": "skills", + "filter": [ + "**/*", + "!**/profiles/**", + "!**/tmp/**", + "!**/.git/**", + "!**/.browser-data/**", + "!**/bun.lock", + "!**/*.test.ts", + "!**/vitest.config.ts" + ] + } + ], + "publish": { + "provider": "github", + "owner": "accomplish-ai", + "repo": "openwork" + }, + "mac": { + "category": "public.app-category.productivity", + "hardenedRuntime": true, + "gatekeeperAssess": false, + "entitlements": "resources/entitlements.mac.plist", + "entitlementsInherit": "resources/entitlements.mac.plist", + "icon": "resources/icon.png", + "target": [ + "dmg", + "zip" + ] + }, + "dmg": { + "contents": [ + { + "x": 130, + "y": 220 + }, + { + "x": 410, + "y": 220, + "type": "link", + "path": "/Applications" + } + ] + } + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json b/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json new file mode 100644 index 000000000..dc7e45281 --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json @@ -0,0 +1,1650 @@ +{ + "name": "ask-user-question", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ask-user-question", + "version": "0.0.1", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.0.0", + "tsx": "^4.21.0", + "typescript": "^5.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", + "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.7", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", + "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + } + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json b/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json new file mode 100644 index 000000000..12cebdc85 --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package.json @@ -0,0 +1,17 @@ +{ + "name": "ask-user-question", + "version": "0.0.1", + "type": "module", + "imports": { + "@/*": "./src/*" + }, + "scripts": { + "start": "npx tsx src/index.ts", + "dev": "npx tsx --watch src/index.ts" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.0.0", + "tsx": "^4.21.0", + "typescript": "^5.0.0" + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json b/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json new file mode 100644 index 000000000..3bcec373a --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "outDir": "dist" + }, + "include": [ + "src/**/*" + ] +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json new file mode 100644 index 000000000..cbb6e75da --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json @@ -0,0 +1,3006 @@ +{ + "name": "dev-browser", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dev-browser", + "version": "0.0.1", + "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.2.0", + "express": "^4.21.0", + "hono": "^4.11.1", + "playwright": "npm:rebrowser-playwright@^1.52.0", + "tsx": "^4.21.0", + "typescript": "^5.0.0" + }, + "devDependencies": { + "@types/express": "^5.0.0", + "vitest": "^2.1.0" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@hono/node-ws": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@hono/node-ws/-/node-ws-1.3.0.tgz", + "integrity": "sha512-ju25YbbvLuXdqBCmLZLqnNYu1nbHIQjoyUqA8ApZOeL1k4skuiTcw5SW77/5SUYo2Xi2NVBJoVlfQurnKEp03Q==", + "license": "MIT", + "dependencies": { + "ws": "^8.17.0" + }, + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "@hono/node-server": "^1.19.2", + "hono": "^4.6.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.8.tgz", + "integrity": "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.9", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", + "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/playwright": { + "name": "rebrowser-playwright", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/rebrowser-playwright/-/rebrowser-playwright-1.52.0.tgz", + "integrity": "sha512-UjpqfwmF9+XtOuCCxGQ2ZlLeuSaSv//4Z6ZQgYPsJovz3d7nWodCd2hSRQigAswAUnsPmVwnQUpSn+TLKaKV+A==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "npm:rebrowser-playwright-core@~1.52.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "name": "rebrowser-playwright-core", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/rebrowser-playwright-core/-/rebrowser-playwright-core-1.52.0.tgz", + "integrity": "sha512-gjrvLNh0RX6B/tg6pWaPNGf+9+z1Jl2EyAh5MXD5xMa2lputGRZ9V2MJ/uofcC5Np3vSOJ3SdVSRqwteC0FjfQ==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsx/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vite-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.9", + "@vitest/mocker": "2.1.9", + "@vitest/pretty-format": "^2.1.9", + "@vitest/runner": "2.1.9", + "@vitest/snapshot": "2.1.9", + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "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.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.9", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.9", + "@vitest/ui": "2.1.9", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package.json b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package.json new file mode 100644 index 000000000..331435004 --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package.json @@ -0,0 +1,31 @@ +{ + "name": "dev-browser", + "version": "0.0.1", + "type": "module", + "imports": { + "@/*": "./src/*" + }, + "scripts": { + "start-server": "npx tsx scripts/start-server.ts", + "start-extension": "npx tsx scripts/start-relay.ts", + "dev": "npx tsx --watch src/index.ts", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "@hono/node-server": "^1.19.7", + "@hono/node-ws": "^1.2.0", + "express": "^4.21.0", + "hono": "^4.11.1", + "playwright": "npm:rebrowser-playwright@^1.52.0", + "tsx": "^4.21.0", + "typescript": "^5.0.0" + }, + "devDependencies": { + "@types/express": "^5.0.0", + "vitest": "^2.1.0" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.0.0" + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json new file mode 100644 index 000000000..3bce709ed --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "lib": [ + "ESNext" + ], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "baseUrl": ".", + "paths": { + "@/*": [ + "./src/*" + ] + }, + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + }, + "include": [ + "src/**/*", + "scripts/**/*" + ] +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json b/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json new file mode 100644 index 000000000..de75c468d --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json @@ -0,0 +1,1650 @@ +{ + "name": "file-permission", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "file-permission", + "version": "0.0.1", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.0.0", + "tsx": "^4.21.0", + "typescript": "^5.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", + "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.7", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", + "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + } + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package.json b/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package.json new file mode 100644 index 000000000..e6c0bc754 --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package.json @@ -0,0 +1,17 @@ +{ + "name": "file-permission", + "version": "0.0.1", + "type": "module", + "imports": { + "@/*": "./src/*" + }, + "scripts": { + "start": "npx tsx src/index.ts", + "dev": "npx tsx --watch src/index.ts" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.0.0", + "tsx": "^4.21.0", + "typescript": "^5.0.0" + } +} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json b/apps/openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json new file mode 100644 index 000000000..341042abe --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/skills/file-permission/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "outDir": "./dist", + "rootDir": "./src", + "paths": { + "@/*": [ + "./src/*" + ] + } + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "dist" + ] +} diff --git a/apps/openwork-memos-integration/apps/desktop/tsconfig.json b/apps/openwork-memos-integration/apps/desktop/tsconfig.json new file mode 100644 index 000000000..9a73cdd11 --- /dev/null +++ b/apps/openwork-memos-integration/apps/desktop/tsconfig.json @@ -0,0 +1,45 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": [ + "ES2022", + "DOM", + "DOM.Iterable" + ], + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "baseUrl": ".", + "paths": { + "@/*": [ + "src/renderer/*" + ], + "@main/*": [ + "src/main/*" + ], + "@shared/*": [ + "../../packages/shared/src/*" + ], + "@accomplish/shared": [ + "../../packages/shared/src/index.ts" + ] + } + }, + "include": [ + "src/**/*", + "../../packages/shared/src/**/*" + ], + "exclude": [ + "node_modules", + "dist", + "dist-electron", + "release" + ] +} diff --git a/apps/openwork-memos-integration/package.json b/apps/openwork-memos-integration/package.json new file mode 100644 index 000000000..2b19f7fe1 --- /dev/null +++ b/apps/openwork-memos-integration/package.json @@ -0,0 +1,30 @@ +{ + "name": "accomplish", + "version": "0.1.0", + "private": true, + "description": "The open source AI coworker that lives on your desktop", + "author": "Accomplish Inc", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/accomplish-ai/openwork.git" + }, + "scripts": { + "dev": "pnpm -F @accomplish/desktop dev", + "build": "pnpm -r build", + "build:desktop": "pnpm -F @accomplish/desktop build", + "lint": "pnpm -r lint", + "typecheck": "pnpm -r typecheck", + "clean": "pnpm -r clean && rm -rf node_modules" + }, + "engines": { + "node": ">=20.0.0", + "pnpm": ">=9.0.0" + }, + "packageManager": "pnpm@9.15.0", + "devDependencies": { + "next": "^15.1.3", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } +} diff --git a/apps/openwork-memos-integration/packages/shared/package.json b/apps/openwork-memos-integration/packages/shared/package.json new file mode 100644 index 000000000..ad78336e7 --- /dev/null +++ b/apps/openwork-memos-integration/packages/shared/package.json @@ -0,0 +1,18 @@ +{ + "name": "@accomplish/shared", + "version": "0.1.0", + "private": true, + "main": "./src/index.ts", + "types": "./src/index.ts", + "exports": { + ".": "./src/index.ts", + "./types": "./src/types/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit", + "clean": "rm -rf dist" + }, + "devDependencies": { + "typescript": "^5.7.2" + } +} diff --git a/apps/openwork-memos-integration/packages/shared/tsconfig.json b/apps/openwork-memos-integration/packages/shared/tsconfig.json new file mode 100644 index 000000000..41a45e877 --- /dev/null +++ b/apps/openwork-memos-integration/packages/shared/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": [ + "ES2022" + ], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "rootDir": "./src" + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "dist" + ] +} From 7d389a70ac941e1099e5018b8ea9be029ee79dba Mon Sep 17 00:00:00 2001 From: tangbo <1502220175@qq.com> Date: Sat, 7 Mar 2026 22:46:17 +0800 Subject: [PATCH 07/18] chore: remove large binary assets and add development guide - Remove video-thumbnail.png (4.6MB), font files (280KB), lock files (258KB), and usecase image assets from git tracking - Add .gitignore for openwork-memos-integration to prevent re-adding binary assets, lock files, and build artifacts - Add comprehensive Development Guide to memos-local-openclaw README covering prerequisites, project structure, build, test, local dev workflow, publishing, and utility scripts Made-with: Cursor --- apps/memos-local-openclaw/README.md | 184 +- apps/openwork-memos-integration/.gitignore | 26 + .../assets/usecases/ai-image-wizard.webp | Bin 2828 -> 0 bytes .../assets/usecases/automated-reminders.webp | Bin 22282 -> 0 bytes .../assets/usecases/batch-file-renaming.webp | Bin 49778 -> 0 bytes .../assets/usecases/bilingual-output.webp | Bin 18690 -> 0 bytes .../assets/usecases/calendar-events.webp | Bin 22008 -> 0 bytes .../assets/usecases/calendar-prep-notes.png | Bin 12480 -> 0 bytes .../assets/usecases/career-document.webp | Bin 23348 -> 0 bytes .../assets/usecases/clean-data-output.webp | Bin 18054 -> 0 bytes .../usecases/competitor-pricing-deck.png | Bin 31960 -> 0 bytes .../assets/usecases/course-announcement.webp | Bin 49226 -> 0 bytes .../assets/usecases/custom-web-tool.webp | Bin 21396 -> 0 bytes .../assets/usecases/document-translation.webp | Bin 19248 -> 0 bytes .../usecases/event-calendar-builder.png | Bin 10030 -> 0 bytes .../assets/usecases/export-to-table.webp | Bin 45222 -> 0 bytes .../assets/usecases/inbox-promo-cleanup.png | Bin 6400 -> 0 bytes .../usecases/job-application-automation.png | Bin 3065 -> 0 bytes .../assets/usecases/landing-page-copy.webp | Bin 20858 -> 0 bytes .../assets/usecases/localize-content.webp | Bin 19108 -> 0 bytes .../assets/usecases/notion-api-audit.png | Bin 5158 -> 0 bytes .../public/assets/usecases/organize-data.webp | Bin 1836 -> 0 bytes .../assets/usecases/personal-website.webp | Bin 1758 -> 0 bytes .../public/assets/usecases/pitch-deck.webp | Bin 1430 -> 0 bytes .../assets/usecases/polish-writing.webp | Bin 2928 -> 0 bytes .../usecases/portfolio-presentation.webp | Bin 19626 -> 0 bytes .../assets/usecases/prod-broken-links.png | Bin 31960 -> 0 bytes .../assets/usecases/professional-emails.webp | Bin 1376 -> 0 bytes .../usecases/professional-headshot.webp | Bin 27364 -> 0 bytes .../usecases/staging-vs-prod-visual.png | Bin 33944 -> 0 bytes .../usecases/stock-portfolio-alerts.png | Bin 6425 -> 0 bytes .../desktop/public/fonts/DMSans-Black.ttf | Bin 56344 -> 0 bytes .../apps/desktop/public/fonts/DMSans-Bold.ttf | Bin 56268 -> 0 bytes .../desktop/public/fonts/DMSans-Light.ttf | Bin 56328 -> 0 bytes .../desktop/public/fonts/DMSans-Medium.ttf | Bin 56376 -> 0 bytes .../desktop/public/fonts/DMSans-Regular.ttf | Bin 56344 -> 0 bytes .../ask-user-question/package-lock.json | 1650 --- .../apps/desktop/skills/dev-browser/bun.lock | 443 - .../skills/dev-browser/package-lock.json | 3006 ------ .../skills/file-permission/package-lock.json | 1650 --- .../docs/video-thumbnail.png | Bin 4605469 -> 0 bytes .../openwork-memos-integration/pnpm-lock.yaml | 9315 ----------------- 42 files changed, 202 insertions(+), 16072 deletions(-) create mode 100644 apps/openwork-memos-integration/.gitignore delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/ai-image-wizard.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/automated-reminders.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/batch-file-renaming.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/bilingual-output.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/calendar-events.webp delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/calendar-prep-notes.png delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/career-document.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/clean-data-output.webp delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/competitor-pricing-deck.png delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/course-announcement.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/custom-web-tool.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/document-translation.webp delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/event-calendar-builder.png delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/export-to-table.webp delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/inbox-promo-cleanup.png delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/job-application-automation.png delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/landing-page-copy.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/localize-content.webp delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/notion-api-audit.png delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/organize-data.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/personal-website.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/pitch-deck.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/polish-writing.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/portfolio-presentation.webp delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/prod-broken-links.png delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/professional-emails.webp delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/professional-headshot.webp delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/staging-vs-prod-visual.png delete mode 100755 apps/openwork-memos-integration/apps/desktop/public/assets/usecases/stock-portfolio-alerts.png delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Black.ttf delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Bold.ttf delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Light.ttf delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Medium.ttf delete mode 100644 apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Regular.ttf delete mode 100644 apps/openwork-memos-integration/apps/desktop/skills/ask-user-question/package-lock.json delete mode 100644 apps/openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock delete mode 100644 apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json delete mode 100644 apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json delete mode 100644 apps/openwork-memos-integration/docs/video-thumbnail.png delete mode 100644 apps/openwork-memos-integration/pnpm-lock.yaml diff --git a/apps/memos-local-openclaw/README.md b/apps/memos-local-openclaw/README.md index eebf1cef9..886b8cdf3 100644 --- a/apps/memos-local-openclaw/README.md +++ b/apps/memos-local-openclaw/README.md @@ -558,21 +558,189 @@ openclaw plugins install @memtensor/memos-local-openclaw-plugin | Generated skills | `~/.openclaw/memos-local/skills-store//` | | Installed skills | `~/.openclaw/workspace/skills//` | -## Testing +## Development Guide -Run the test suite: +This section is for contributors who want to develop, test, or modify the plugin from source. + +### Prerequisites + +- **Node.js >= 18** (`node -v`) +- **npm >= 9** (`npm -v`) +- **C++ build tools** (for `better-sqlite3` native module): + - macOS: `xcode-select --install` + - Linux: `sudo apt install build-essential python3` + - Windows: [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) +- **OpenClaw CLI** installed and available in PATH (`openclaw --version`) + +### Clone & Setup ```bash +git clone https://github.com/tangbotony/MemOS.git cd MemOS/apps/memos-local-openclaw -npm test +npm install +``` + +> `npm install` triggers the `postinstall` script which automatically rebuilds `better-sqlite3` for your Node.js version. + +### Project Structure + +``` +apps/memos-local-openclaw/ +├── index.ts # Plugin entry — hooks, tool registration, lifecycle +├── plugin-impl.ts # OpenClaw plugin SDK implementation +├── src/ +│ ├── index.ts # Module re-exports +│ ├── config.ts # Configuration schema & defaults +│ ├── types.ts # TypeScript type definitions +│ ├── capture/index.ts # Message capture & filtering logic +│ ├── embedding/ # Embedding providers (OpenAI, Gemini, Cohere, etc.) +│ ├── ingest/ +│ │ ├── chunker.ts # Semantic chunking (code blocks, paragraphs) +│ │ ├── dedup.ts # Content-hash + vector deduplication +│ │ ├── worker.ts # Async ingestion pipeline +│ │ ├── task-processor.ts # Task boundary detection & summarization +│ │ └── providers/ # LLM providers for summarization +│ ├── recall/ +│ │ ├── engine.ts # Hybrid retrieval engine (FTS5 + Vector) +│ │ ├── rrf.ts # Reciprocal Rank Fusion +│ │ ├── mmr.ts # Maximal Marginal Relevance +│ │ └── recency.ts # Time-decay scoring +│ ├── skill/ # Skill evolution pipeline (evaluator, generator, upgrader) +│ ├── storage/ +│ │ ├── sqlite.ts # SQLite database layer (chunks, tasks, skills, FTS5) +│ │ └── vector.ts # Vector similarity search +│ ├── tools/ # Tool implementations (memory-search, memory-get, etc.) +│ ├── viewer/ # Memory Viewer web server & HTML templates +│ └── telemetry.ts # Anonymous usage analytics +├── tests/ # Test suite (vitest) +├── scripts/ # Utility scripts (seed data, smoke test, viewer) +├── skill/ # Bundled skill definitions (SKILL.md files) +├── openclaw.plugin.json # Plugin metadata for OpenClaw registry +├── package.json # Dependencies & scripts +├── tsconfig.json # TypeScript configuration +└── vitest.config.ts # Test runner configuration +``` + +**Files NOT in the repository** (generated locally, excluded via `.gitignore`): + +| Directory / File | Purpose | How to generate | +|---|---|---| +| `node_modules/` | npm dependencies | `npm install` | +| `dist/` | Compiled JavaScript output | `npm run build` | +| `package-lock.json` | Dependency lock file | `npm install` (auto-generated) | +| `www/` | Memory Viewer static site (local preview) | Started automatically by the plugin | +| `docs/` | Documentation HTML pages | Built from source or viewed at the hosted URL | +| `ppt/` | Presentation files (internal use) | Not needed for development | +| `.env` | Local environment variables | Copy from `.env.example` | + +### Build + +```bash +npm run build # Compile TypeScript → dist/ +npm run dev # Watch mode — auto-recompile on save +``` + +The build output goes to `dist/` (CommonJS modules with declarations and source maps). + +### Configure for Local Development + +1. **Copy the environment template:** + +```bash +cp .env.example .env +``` + +2. **Edit `.env`** with your API keys (or leave blank for local-only mode): + +```bash +# Embedding — leave blank to use local offline model +EMBEDDING_PROVIDER=openai_compatible +EMBEDDING_API_KEY=your-key +EMBEDDING_ENDPOINT=https://your-api.com/v1 +EMBEDDING_MODEL=bge-m3 + +# Summarizer — leave blank for rule-based fallback +SUMMARIZER_PROVIDER=openai_compatible +SUMMARIZER_API_KEY=your-key +SUMMARIZER_ENDPOINT=https://api.openai.com/v1 +SUMMARIZER_MODEL=gpt-4o-mini +``` + +3. **Install the plugin locally into OpenClaw:** + +```bash +npm run build +openclaw plugins install . +``` + +4. **Configure OpenClaw** — Add the plugin to `~/.openclaw/openclaw.json` (see [Configure](#2-configure) section above). + +5. **Start the gateway:** + +```bash +openclaw gateway stop # stop existing +openclaw gateway start # start with new plugin +``` + +### Testing + +Run the full test suite: + +```bash +npm test # Run all tests once +npm run test:watch # Watch mode — re-run on file changes ``` Test coverage includes: -- **Policy tests** — Verifies retrieval strategy, search filtering, evidence extraction, instruction stripping -- **Recall tests** — RRF fusion, recency decay correctness -- **Capture tests** — Message filtering, evidence block stripping, self-tool exclusion -- **Storage tests** — SQLite CRUD, FTS5, vector storage, content hash dedup -- **Task processor tests** — Task boundary detection, skip logic, summary generation + +| Test File | Coverage | +|---|---| +| `tests/policy.test.ts` | Retrieval strategy, search filtering, evidence extraction, instruction stripping | +| `tests/recall.test.ts` | RRF fusion, recency decay correctness | +| `tests/capture.test.ts` | Message filtering, evidence block stripping, self-tool exclusion | +| `tests/storage.test.ts` | SQLite CRUD, FTS5, vector storage, content hash dedup | +| `tests/chunker.test.ts` | Semantic chunking for code blocks, paragraphs, function bodies | +| `tests/task-processor.test.ts` | Task boundary detection, skip logic, summary generation | +| `tests/multi-agent.test.ts` | Multi-agent memory isolation, owner filtering, public sharing | +| `tests/integration.test.ts` | End-to-end ingestion and retrieval pipeline | + +> Tests use an **in-memory SQLite database** — no external services or API keys required. + +### Development Workflow + +1. **Make changes** to files in `src/` or `index.ts` +2. **Run tests** to verify: `npm test` +3. **Build** to check TypeScript compilation: `npm run build` +4. **Test with OpenClaw** locally: + ```bash + openclaw plugins install . # re-install from local source + openclaw gateway stop && openclaw gateway start + tail -f ~/.openclaw/logs/gateway.log # watch logs + ``` +5. **Open Memory Viewer** at `http://127.0.0.1:18799` to verify UI changes + +### Publishing to npm + +```bash +npm run build # Compile TypeScript +npm publish --access public # Publish to npm registry +``` + +After publishing, users can install with: +```bash +openclaw plugins install @memtensor/memos-local-openclaw-plugin +``` + +### Utility Scripts + +| Script | Command | Purpose | +|---|---|---| +| Seed test data | `npx tsx scripts/seed-test-data.ts` | Populate local DB with sample memories, tasks, and skills | +| Smoke test | `npx tsx scripts/smoke-test.ts` | Quick end-to-end verification of plugin functionality | +| Start viewer | `npx tsx scripts/start-viewer.ts` | Start Memory Viewer standalone (without gateway) | +| Refresh skills | `npx tsx scripts/refresh-skill.ts` | Re-evaluate and regenerate skills from existing tasks | +| Refresh summaries | `npx tsx scripts/refresh-summaries.ts` | Re-generate task summaries for completed tasks | +| Mock skills | `npx tsx scripts/mock-skills.ts` | Generate mock skill data for testing | ## License diff --git a/apps/openwork-memos-integration/.gitignore b/apps/openwork-memos-integration/.gitignore new file mode 100644 index 000000000..1a6ae432f --- /dev/null +++ b/apps/openwork-memos-integration/.gitignore @@ -0,0 +1,26 @@ +node_modules/ +dist/ +out/ +.env +.env.local + +# OS files +.DS_Store +Thumbs.db + +# Lock files +pnpm-lock.yaml +package-lock.json +bun.lock + +# Binary assets (fonts, large images, videos) +*.ttf +*.woff +*.woff2 +*.mp4 +*.webm +public/assets/usecases/ +docs/video-thumbnail.png + +# Build artifacts +*.tsbuildinfo diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/ai-image-wizard.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/ai-image-wizard.webp deleted file mode 100644 index ce7e762613b297a60a304cec937c4858d9c9db73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2828 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/automated-reminders.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/automated-reminders.webp deleted file mode 100644 index 31e16c0933616b6490ce423f365cf38332fca558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22282 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%0D4x} zVgya!Hjcl|xYZl9ZdW08=foW?O=i_8`&3_!exui&o%w|C=wHG4XL=t^ZLHc9aEPOW zQaFoGRr@~dWchoVTs!-6vhmB!o{t@%={>FJd=gKd_@=PQim`_Qv?5!fQO!AJ%w9O4C)` zw?-=L#xhB7ExgOcU%cGgX!bfnk**(BGkDj#cVJ;2_N zCwi@TgG$?#+e`;c9(UfIZMsz=&x3mW=&E@fGA~fj>C4u5!%_aLZzoQj`3&Om&iel3 zJEbfpzk@?G`Tnu$(V|4p3%oy7tuVjKpN8e<=!#0|Nqmai3yOIS)VWy=YP-XmU(mMs zVa%}Tw}Aa+2f(k`#so^nnT|R-$G3|fX3AGz9_ipK=i8}hN)!3V(p%KHqU`p&O?%P2 z_L!J=)V#c}v{R}H*W19v`*qqc-`SR2R3B@Mb3M)KEwlYpoBGU1PxnAAhkLkMNQT*>u> zU$@sY)bwmO9^=88K^mm^nBzAh(Gqvw@kZpTJB~!RwJBn%fs&Z{gVZat$CU#+ zvtVicjuvVj&l9+))u9<Q7sb2(e-uI|OdJbnz#|&GZ#$_j!as9P-y|Zzm zRZQr`_OtF>ulJq$(6Rx8ClI9j_w-fjTl&BIO$Rc*vAczVW0I;h&@+$R)*t$#zW+#e z52&A>7m)1syhhl(9yiFkc(bpH!@1%wNnRG*P5F#=A-j)(DnyJ{HoVLV>gGm=KIuY4Tub@RpZ>NGz&AXY73x5k zbPrOaPs9e@h`bJ#T3wNFHMD*lP~A0e9q>^)-BvGN#cIapNBww07l!DnjUUax;mUniY;Bu)OUbX0LKap1EL*W}uX^zoWN&3{=R4&Cdge~xT^z31t9 zd_t&9qr@TgvfhFv<2^;QaO8-+eeHb3v1L;GcKmnScypRr6D5q_?1CR4E0LV7%Oft z$HKl{G@xNv=X9ttYT{~^cDQAp_gA5sv*Uh{6U#lewW4_7*^|z!DE@>XZ2`XFYh2>5 zF6LA&zmz2Y?4CN~$py{(^n1d?F7O!Pmmuz#(53dLZQ+H6TEFejzR{54^>@B^>*9hz z%pz8<#7B)OT9)!7mUnEicBt+HBrmi1O}N^LJB`O4>i-G(V(Df$A2Y-DHS=`iR~XF| z12BTk{{lEQJA&Hn&clah$q>|Fzc8!>3=V zTk_UOev%L(Mfjpz?0GX;>-vSSoi~@=hFplEt2ZolF85VSN&aOiFC|S+44EoQq>tMs z7Ds=Pb0qIsy-a;0cJ*=a(q58-mnjolccc7-!?U|hKQ|plgSlm<#x>;Z-BJ@1C%-=Y zDc9a1Pi7ZLvo408#rXe9dDgi||Mg{j_Z;(w^_`)9q=fD&uqoH@U+#;?DNi2ly@c+-=Dn~+nL*4kq{zmY(p4?8C+ zY&?W+nI>R4q5frMc<<-pQ30i0>F?H}skyKhulY0}A5S`_$V(;+6OMk&iwyBSu^9vS zbK;StJFJ!{F;VeJ$35}GKL-W7$euP}S8=>ugo^B{joD2{yUd+GEwIM4$B#cteCtT# z>AOBDmGe1TalY`_Gm7Tk%-RRzf$jb(*!;IJljB_H#?FzRaz~hY9GzDZ-nzLIu&{DA ziRJ2VnKH@kZsaI{SJ#bZH1=B9+Sr6MY*Kkm6OUYKekuM>@$1UX;o>-vcki3LU|Kd_ zgHN|L-CP9PIG*L7C~{gNd~_V1=0_NTZkTIl40ByK9NXu=`Tlf;*s-Qpmv{B=EJKTL zB;dOQ=F^-C#tM&De05Evz4=tL1dVrN8|`o>-l?ttfm8mX8ClmGcJ1@BhFv)oVU*QA!E^}?c|+qZ8A|u`s@pLosh=jXNKm1rUPwS z4{uq9#YazUGnj;sWUOdDq%&{m1i`Z=GnUbA@dpZW{UiuRgDJYWs-b0~Z! zG8dW?y)+2}IL=MY6HS(!)L}Q_+7^ENM4akldMLLfKQN|a#DkvHnxaM&3JHq8^(ZZv zTzl)bkUeiKwvM#ZtNn7+q8<#qD@$t1EbPL>IIfwUM%e$@#-nGR#4~9-3ggG4 zj%s-i<7sI6_D3<=5weGaN4CXnq_Ta<^y)>}^ca_DI9E{iEZN2et*N-`QF^f&KR?$X zq#nR<{E1;STZ_FP7UE0flF9xx$4eicU7+}bIxL1KU-QLIgafaKll6vJo2^bzP+YcE z#)WD{nr>(ENTj7eG@~`J)0VNpcIbCwjfa;*vy!oCyfF0+eSB|+bn}Y8I4)y3@%yed z{fXffBrKL@=-9qmnxpYdH0qm?-rf)s6LQ{XepQ=-H&GEVUFH;1;rfKoR|+5 z0xs%J(L@IX3SpZd(hLrl1zp|>4#0+*AF*%l1#Y6P*MDhIdV`0gK}Hg>tfZnM!= z>_^t>?m}sU(J$!qUubnns_vh&2|9YaY@8dVvZ&mhIi|UO4V72e&up2_QI<9yP zjP3MSbDG?7!G*uR1drcZ4q|zGxp6(UlKd|Q-Glf=8_Jr%6lqEV4x&C7NeDOw!@y}u z0dP^>zeD1L=1KvVJG{5!?Ra`oa&f}5ePRV~FFR1aqSYQX`T%CaIN(D!&F&H4)}HzN z8FK^E4^!8$Pq(a5|Der6=9yNmE&zYdeBK12v>YfZ2x0aMxVYc!J%LY z0U@uK!DbrhHU)r+b{$YZ>-LJ}Omk1Y>g2j#n&&36WAVTjTzADCA6&3)$=PT4IG#QK zr4>|dVA(fDXrA_-4*MNUqU;>T`|^63EhcBw45WJRKuW8ga|E${7f~5&go|iLF1Qr> z%zcm#LhSoX2!cwTY!^{VLK?nMdZz)>vBAtV-rCvg~VdHA&JC&Cio{0@eoQ|dz z1aa%8G^^Rn6>terNwNqflL2o%=tSgjc~=~>+)`hfJ{sZ@SWjS3PY7YotRlJk=|hf@ zE6Tq^;Il`ZjS%8RWxKbzX=mQP;q#S??!I*F9W}T-Xvh}&Hpc@I)PE+ z>5u&N2A+iBH0Le%VP7D;fw?wLmG`Xc5?^4vdp#E)GJF*n456CcR0;@z-qrH40s_5J z>pA42B3U!caJ76|24<~+pe7*}iACp0!p0;4zT|qG4-AHo|1r=HY2b7Dp`puxJdR>tzYqEg}JQsG0BevAe)8hMcmbxRXk0yg{tBcSdx21I9Y-*I)OK{J%XYNQxL;h2YTM454{&e5`#aKX z^?mTz`ed5!+?!wM4*&mBn%quKVSS2pSv2hO`3wp-YwQIBcN;IQ!qdL1@1I55x1j>k z$-MoBn+pHL;6}?cc`BXf@tR^jWJ}L1wNsS1Ui8^_Q`IN~l!q51L9%^PdtK1Q!%$np z{%WcHFkj#{9OLi3xG`4Ppzkf+Vk}$CJ=8z@s68qmU>SAYPA{EAlvu&G&VTTx;~)`2 zW>Eijz!9{k_9@f$0$KOf+;sONZ+B#)*RJsT_ zMlBWqBKturS2!Nu9BVv;<{bwpC$>?J@x2$Sc5nR0?ze>g`r55ILg_pC!D&u%&Xu_; zGc!4>3V3Ul?K{f}N*zj4S-Hgb7)h0mc!DKqPH?|n56%T0do65z@B_vXlhEAbIsV+H zGjU5XBGUo_DEaf~yJiH1{ebCUL^awxR8Ml*sf27GDca7&(|7^H>k5_1^|*Tq!y@H}UM1 zZ0M_|L2&`Wxx*?A&hVaqA?L&oYuDybm{=T@c(G1@Bm27ndSBxnc!4=h5iXjE!()@~ zu|}TCv**n|(5Jf+XgOkjvg?O>>7yJ~pD-d%NzWQ8^_HTW5V7g7ejq=vIt#dP`CdAq~a- z$+=DQHa4qI;DQfog<$+>%&6|9bb-%QmGu1w6~%CvUVS73EKp7jWG7CCYUUB<^q=6s zXTHcq0oJ6GUi@cMJljHjZoPn`sIM1YUbrZ9NW2RX)WLA)V!R$8JW+H{EhmKnDH1oIMxFGB-#Ji{f!^rPe|3$Dd3^k z37nLA+?!3X-LznkpT*G$fZs7wN#f{G|0rqLo4xVWcaL}uN02)7V{X6L#{!B`IxhSl z&5RQx0#7uZt38bC)9i&n0(M|!9Tt{NyxhEPmtS@|$oeNPhQzOLZ!y+i^_e0!2D^W? z=)P4Z{!@FN0=gxlI4LVN$RSnmG9{Xa%3@j!y%ghy_~1u1TgnUt$v#QIUvnT*bw38V zdao$hJLQYo%|*F>nJ=TvCz@l+X^Y~l33(_bl%m0>T{L{Om;pk!MM%0J!sX6+e6K95 z#)THg9`U2I`ihftAG9c{0%uieUY{wQgAv%>7>pbCK(tj zXbZ7Ks*u?PRRGzQdo~7`H^jwVS$eHgf7wb=SC4kW|4+=*431!k7e*A+{DLE1jqow{ z7lvBtT`Z>~roHQDn}m*qrQ8rfI6!ai&foWh(M8==(O6Rgr%`-zJUp@pA)eJZ-{}E7U0-ttMvem!4y*Zc z5ccK(0dX=1oE*X#jRNVuLBo1SMzdM&`wN4WK2SP;9gky)RbCf@n6BAzb3u-3JWy}J zXqnm~Wri)tywTNZsEPvS;TTpHZ2cv8)Of|3{Y*IMnKZk{aYClJ2f(1@+oS`NyB!yVT7Zk%MXv)1;K!Tst-Z?gjj1>fP$PP zgHg;%A;lL_V;S=i+($s;66eJ(O^xn&t_rhZ0a7D2SB&sd=6^Y7-ROREOk8D$g8X#y zXw=uO84v;kS1tBm@ z^zJFB!c8Aqo0OXLWLl$=S3t(x|Fr>TkN#BjO{&?jexkLt3IEE$8xYT5*Od+CXhqX5 zUlCo;#sSl1;Z3KgJ+mhA3Jan43nIVoG$0!Q@JXkJCXSc6E7Q5w1(%2$UyRmZLO({V z*v(bc;&6J`jv^g&ZIKq$4QV3APM+?+mrUl)n!o<>u?NYV4sJTJ3bzDZrZf6)0Q<6^ z$1@CjfBPnlbt0Bzkt^hkkI&;O)fX;={N4mK2xS5uAm3-Cg+6lL%)1X2XisVTAm@qZ zmhHTVzn2eGXmoq0o)nvpSv}J)Ru=Xh%nF-&*d)Nb>_sml9JBDYP$MRQ0dR+eKW9VI z(_|hTZdj1JjS*VMRyD})^k&jE(uukxXR7ruTnc( z+{4iPV`+o_*HmRrwf*T;W5m*AIoO%Dy&Rd7D z1=12EZ29pn&2UKP>GfOpIBUdI_L?+QDFR7#{wy|{CJSDan(bHPFLixfg)))Qoqn+c z`J=RW5x2X@SC{d$!6fD5ygckFMDc+0eh+Lfd6#j#ZMu`7 zvM+XqoWcf7BtZRC`wOZ-hgM1EaZvn0`OMP^`(B{H%@LAd&`;v3To)CHP^mVat;V22 z{zlh~0SIFB+hYdIG9nuT?TnyMUBk+9)Tw2~z%zFNT(P=!3stgH8Cs4zirSS`SiD;e z?W#Xda0-9Y$g#KcG)V79WaXmaf;wrYOorr!>%38Ft-${W9K05vuNP`at>xqxu7m@e zb$GI{@41H@4f_Cb+E0Rpra#zelXhpg<5n`wcqS7!$~pnRv>Ri)sIdbLlJ?K1wK}KE z9&eHVRE()w&~hY!*A0{hjc@Y-Z}`_ukGC=o)qYMw+*mS>VUucBM?O!R@>;f#yzXVK z##;8oexR`id}x3vZEkarDd4kYW}UZBvI7GMBiA++Q7AmU6p=w0G+tK00-jZB3dHBZ z-%|tFznyF|N?DFXT8VwM5TpzD>a%O0%qiSDM;+Ku2Y&mhv{%~pHE|46 zk&IjRDFloA9g3KUf`f_V)XX(0^y6|giUS3kOuS7gw7v7&Dvqr5NUx;uk7cIiM}s0` zP^Ic8o%THtgxm(57*x3diF%c|XCVRJiVV~1g%)$3+2&zI`b2ZY z;@+awy3EgA4!PxRN;^^>bj!m2x|-_v64$rJf)an*k!r~zUq;~1i)^)2bR59$1J$(? zFqr5#HoU1J(YuC-!D`1w85OR%i&`61c~2@dx~JZwlh7e;mlN(TyN7N_X?@@T$izFc zU-rs`S9&vbBsdr+kJtt0JpShOfndPG2vrVYrH9mKdfiOB<=F^`XDNjadoI_hzB*qJ zFH5VcMGVP#?xwZ9X%7hDGC=%YRh)khJ={aphVOzgx01bLkh@^*Qv;l6RDT(9&Gf5U zYhUqctI!g703vx|CWopFJ^~}k@ILqMmy9GZJ$`EYI^N6QvJS?Qw~xiAlO~Du(Z{%i z;lzY$Kx}-3ToqakBhF4pc&z;~***)T;?|BG2E!a4c3%){E~6Bjr_-1HYR5dGJ=DR^ z=CX}*e<1xxfKT(^RRu5?E7?rCy;Fp=yZLtS8F_o;^ec?62~^eorJa)qiPNCYu}Rn( zbShP~ZT>)HxWt2C{L;4=gO&&84MhA;EG%W>-L{l@G~@v$*g}P)2-yW6OegI9C)E}G zI_WTa&Lo;iGwQ5&4xQw!H-K1gwXm@Isk{{X;1PD3D@-r)tWZC^NKz?J8`iDk^{PzK zGxH5Y{vD5`1d7RxhOl(#U~4#1EO^+L=5XN}ibi1(KC3>841SZYz^6hQbF6vL)ZaCj Qyz;k~+3yYXH5lkP=>Py=(9(Qr2mln3 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 CXaLLr diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/career-document.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/career-document.webp deleted file mode 100644 index b202719bda521f9a0572c237530a5233e1d9bde5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23348 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/clean-data-output.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/clean-data-output.webp deleted file mode 100644 index a3a900e674c7fbe8146c2bdd0608912acf5f8413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18054 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

q@{xvh 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/competitor-pricing-deck.png b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/competitor-pricing-deck.png deleted file mode 100755 index 7722812995d917000603ef77996b072442f7ff34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31960 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 E0Bm(O^Z)<= diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/custom-web-tool.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/custom-web-tool.webp deleted file mode 100644 index 35b0c4b8592de47b37f8fcbfca2142548304d744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21396 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/document-translation.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/document-translation.webp deleted file mode 100644 index 494cae10e667a9e1163238b1d3f153fd39052d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19248 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%0A99Z(gd_;oo2n7=$}&sISfcUJ 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/event-calendar-builder.png b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/event-calendar-builder.png deleted file mode 100755 index ec4d1382f55079b2e7d379670da948fe59a64bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10030 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/export-to-table.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/export-to-table.webp deleted file mode 100644 index 39144e29ef55ce97a8ce60280f3e708c0872ef02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45222 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/inbox-promo-cleanup.png b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/inbox-promo-cleanup.png deleted file mode 100755 index 0ca9512b6cd39d3ddae75635851ef67b5c52f637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6400 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 O{>;u<7|{$IWBv^=y-&#i diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/landing-page-copy.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/landing-page-copy.webp deleted file mode 100644 index 3cb74bb339ef07532c0976db9ee722976eca067f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20858 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/notion-api-audit.png b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/notion-api-audit.png deleted file mode 100755 index 2ee301a6188d5bf06e797c215cc4bb87f5f1c722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5158 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 KS;cAZgns}t!zJzj diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/organize-data.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/organize-data.webp deleted file mode 100644 index 7ce1e8e6797ce295cdb7f07d7370453fc6abc5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcmV+{2h;dcNk&E_2LJ$9MM6+kP&il$0000G000300093006|PpNS*)y00DPkkZt7L zAHmh&R6Zi&JWaCaVU$;`N#YAUB`<0-4fB(KO$R_j0 z^{>MHd4DR&?vlU4dqV67cz^N#@%zCUfBi>uccY)#YXZjy{LfZA>U~H5EBt4`PwM~s ze!oMML_|bHL_|bHL_|bHL_|bHL_|bHL_|an)&pJ2`-)6-^*0CNjQ}O_daGtbIgLQu zn^p%^RaD~q_Q-l9`loz$kfRrD(=}oHgsl#p*))#Bp~4a^Y1ibJqeV3>yx zb~GOnsZ-+a?12QM@7Q0{CJLc0mgZp*=>qgV!0m$wENB zM8C#a=|g?YnyP~?el^S-D%WBO`$uetAsQEl=WFpRh0Ev zEn=Ix7`8R`%Ia8uOpJf!v5lZN2EZWDfCjb$lQ*q5V>$k3!WUu{q|ElX0hV-T{U_m@j76p->+Sy3^GHLi^Ji#HoJNp3H z$Kw`oCgfb?wxaMNVs&QfUgjgw$J{OaS(guuXXG;PxYR^?zn9!U{FNP;C8?GN&=NZuH1 zo&A<4?9=iGb>*f9IL@gPfJr5)o524%!zA;2Mo%N8oG+F_S(_hDIsT@LD)JKP&poCZNckwPx%Li7)a1@>Me2cy!P zQva&{rMhyDZzrbllp=V#x&&)~tph6s=e86a;AiMJ6GOtY@Q?83F^X0;Lv_aWkQT1n zB`g?3TShPQwAjlu#CmO!w`e^v_PG_;xfgF*ktH9e*8|8(o5Uq>T2lMrUf`H#ZHIKO zReiO;V?qEPCI6XdEJyNyqc%U^H{_6~*efK=*tSB-{CJ=V0>PzU(S)tn)%%(4lDhxO z-+&KR9@{01u-S5rFR2V_%ge>az&q?CjTKEv7?IAB1~r#;8GaI3+s`qv^q%oog>lY9 zkMV8g6H{99Xybsz+w-5N_`-j}Mu;jgc|y19Wu0~QPXdx33Twse=yj`$-|1~f{TOIh zL&u2Y*;%v@7R-EG5axs6T>;o%?_W5wgvpy%Wu8L1 zoe+Y$_0`1t8l=5QDxX$t3r|Q+C&7R~L!14&rnGzMP3++{=tiU-OR_mMl`+vDzw=@| z$heHF$q@HVlpq!#G@tAMUo&R%tO@jEDe0}lK;$o-^z*!1y=JIDAd$gKQ?In&e5>W3 zY0VEn07C94ZO4vG8zX2pfH)8EPF=Z>-F)SsshRQ17e*=7xO-Z;{+nmEm065&%(caG z(e}`?-9QDI(PrXU+n>v5=`>vNhP1jWji|lV1KMke&HKM5U>?!1DeWOxMv4z=+nu) zy%Cf;8JaV=q47W=KbHyO=cSo(d1R_{l#B@uHT8Dariol1E*=|y*xAG1K7;}B(SXn? zsz|gEhcvi&#G4#}jA=R&2TNuKxitR!01b_c a)KZWR(_A9$(xDsT&o|@B>A`>i0001LHIY65 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/personal-website.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/personal-website.webp deleted file mode 100644 index 8d5a4cb2995760955a3ee16f3c8a9b70ee4aa17f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1758 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/polish-writing.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/polish-writing.webp deleted file mode 100644 index 389483b495320612d6c6b452de54a15ffad619db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2928 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 a-Punt1S1sCZckxEz$4MX`R6o%0002Th`l2K diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/portfolio-presentation.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/portfolio-presentation.webp deleted file mode 100644 index 31cac7a6af21a6fe0360bb2d78fd058fa08a1bd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19626 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/prod-broken-links.png b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/prod-broken-links.png deleted file mode 100755 index 7722812995d917000603ef77996b072442f7ff34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31960 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/professional-headshot.webp b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/professional-headshot.webp deleted file mode 100644 index 27447e7df709220944b0656a3fc459b0d291730c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27364 zcmcG!cUV(F_dl2h1_%%WVhAV!LQ|Abr3s-3p$G~}kzNJqO+Z>GQiMPVNRy^g6jZ99 zfD}QxAVokBkS@}DCmY}QdG`Bzc7MD7?6Y%oC+E(bJ9p0KoHJ);?$y^+SO4`805H0# za@+8>j4?d`0KigD3h>`gQ&shL2atLR0CxP#A=D~YHy-vA)>_)oI7 z_4fEL^}o%jTzkX+;Eh5pet|D_fF z(SAN2K2)CD|7fqf`l?jgj!FwX_+Mz7|An^o@cPFePvuc?b@Bc8tbggBbTE6jdj`~h zDD~t5cmwnS8UU4l@>8#=$^9h&AhQbqfJy&TW|IK`)I0$IkYoQ-hRFi}m?Hsz>c0Oe z`yWg^ti7!N(;S4FgB%0GgQ%R0m~fZpy}8E^Vq)kVRr?d|PYY_ssvnRsiw%t? z4b7;(ckS#>F?&V0qy*u zH0qM)>Zcm-dka#^<4+UKo{IvcV>3FFnVQ6xK=-vpGITEFfxiPU^O`Q}s#WRySa(%R zH9n$@7009l8V)FNl*a#C=6*`4Iir|TC?AGYtbS9n8nO`xG9WT?Qf#GBqryD`;>8b! zwXw}qswi-(-~my=^0p1h1|)U|fcPzp1YM9|EUnbc&ocL0D;HbJo)Do}f|NeG2iAmT z3<#Fpbbl>~ZTKMxR>kx2fW3fW7$`P>lbcvPDW=ndU>|Ai)~2QOPO z@aW({_)Y*!72%P909~bR;wlv_Epkjfb2mvVYf`z5t@yP7* z<}=G#%e5)mDB^u*^13}C3>c*;Fs%j3;2}g_N+=o`JoKqG^Pj)IQ$vxUi?#FBjsnsS z1nP#R$mT(kVXiE+y#5QjyZ-(+8ZISnJ*O~GcrZDxH#0~igJcMqOdG}n)FslAcrpMB z%hSg#^FH-i2^T`@azqgfW3Uz&tPO&lyq?`5uAT}MNZ*-Qnm<1D+T7Zjh@Bc6&sOUw zd&0+&euX6Y^sAR#SC5|;y*e0bfA~1)#wF2qYTwV}LdJ8~00o0~8{lP(y zSPK-BP!wm}#f8z7;|xQ1$%cd~pub1>~0S|Uc% zA(N7-%ik9o=NoYJzLy1UrvZ9yn+mmk3cZ-qM0|ahYxQCsSk?up_|LrRI)JTasj65d#pjEZ49THm})*rqAcWo=>tqBH2s_dk?R0LgyY zTwfs)zZ>2WPsIgLq*fkDzE0WzQ?BugSsj(|C~&&$I1{&--tRPqa83vEZ1IoCXE z@3e8$kA|7p4`7Vy zLpXca#abh|A~0b-56$+!ZpO@2{sbPhkx0u8lD*tgcewq#s@~%2$<;`#FlPG&o(OnUEQsVmf$7 z9cA{#N7svx#_a%Sh;G>X#Si6;HzNQ=k04$Tf#C*J70FCUXx@L)TM6?Mu%S5Wj7!W4+3d$#L6-uI+tfdQy2$)+D73HutwlB5-Nw3Q+ zTmB{}7rzP?d~~xgdjz37z%|PaTEKHL+$BXFKUwp^vw;@P+N}zhOQ(yh5B?zC@EA;j z{DC7Q;h+gU=aw8YEKxb!0F}&QMzu>z$Qu@2rWeW}M)8mCRD1hYA;z)<#dN4a^V`R$ zu;RR6jQXG~uZgs_kPoeIOddgOF#LVQ?lBolfTnmn*ikovg%qi68z^}hN48B@5G43a zjI@1o!Rg9IZB9LJn)w~%nMvZhdAv^2>zetsMubJm%0V=3FpLZ14bpoh9HgY^-`j|c zk*}V${AeB@HW8TEM|Wr2Ks$25psH0=0b=ioT;GBQM3-hQ>((X5kL;02FW}*fmS(GElcgbwlBN z8R@uMy4qb)m_vnb2ZC>VPOM>G}2)5V}Y05BFPXoVOZrb8;n3x8hKwrxz172rc_Se_TpsE{lo;i5=z zmFhbwu?q6-_MRt8V5&QI)G(I==te z{KP-NY|Wi}osQl5yGjuWA~0wt{Id;D%E{TT6(v%7w=+gY(nhEQcWr1;;IV&W@XoA; z@>3)W-XVs@0qy$KZ@Uv<*crON{CzKQwCqnm@80q+6a44Q6{Y0uT z$ii@K$w&60W#Ydmc;p{icSbp0eZ{R5Zf}*IQN@F@!$Hk@uPlyRCKh%3wWk?bi0)@A(xh*oUs4#f2X1 zhq4n@oUTM7*9G=n?KhJ{H{6?HBX-I`;{+Y9f(W3+M0!l6vQz#vQo~TW zaIy|zxuIIu-OBFOE$a*f)%LZaB$R6uDH2e>=DfVR4;JpMR_2>++;4dIPA?P?rZy(v zF(%}s^P+vGmI91_n)KDs=V5wSTCi{DU3|s6?@%=B`?%$!Xge#(3L*}QWH>p~;DD#Q ze36{I<34LAqiSU+z@^8h}({=1Wm#JN3D$1!>&92(yrQBu|dyIg^9 zh1foxNE^~5$~T(#-3n-~oz1BanhPwG~2 z;lB6%IT)DvHNjk z6(sJRBRoE@-`CP;#M5y}p33`ymmuBA`&yg);80U?o{XX7M_+DO}7Qtx%s+2|7Un@RlLc^@=#(8wI za*!Q<>1zM2byuS$yXY|lP-;ts7oid!3DQp>2-1?P>78y2YY|a8 zQi?aMwR61T<@;k=eiF{51Iq)n@sWS`S}#yA9=qshTK}9x7(A|ixpu4$=p3k4iwR4j zPCxYJ2Zg)iU7b4XhW|9Yd%diP=y{`Q`lZYdF;kwuCja7&Ej`>+{O~Q%V(+}~L_Zpj zuYLdx`)+G`XaAylg_|kg6ImlhGU{;*JmQa4hnxhNCwz%8Qp-xCbdlXK)VX!O zKIeU$ec^mHei2%R`LwpYRDB(fZvJ!?t%@&-e7lH4Gy%rhWBCaNAE|YtTTq9WIHtlo9ad9iP1#5BqM2^MuMfx_rncRc}yi3 zi{OaKnjbz>f^?b{H^Dt~pK5|{$nx|2EYk&MQ7d+wa&a;IuJBk{eABf>DjzsKBhoby z9uZmZUb0ln>IeyI9i~RB)StGp6Z`g{7uKdN!ue9rk89mdMc!;SodQzYg3z?>heuUl zum^pW>=zd`KJsyO=A}A7LF;H9ZBH0*^B}SDpix^dk-E~!J?kv+oN%@xxfoUgfM-X! zyP?YK3Ty6`Q;mn;#@#0yr{}9EUq5(GMX-q5)ZRe>k>4AS_d|y%VUq!Mp}~}+=f}IA zq2m@IJM9)0AuGorHpjjDU%5mQ)ky~Ge6PM4vSb_YD1vXk4^z3;9Bh4&$>>gA)iTLcw#vRvLKsFRS- zKZx;%wauAOL!(#@r%tC}gwK|Bm)^C66I~T3{2D`zozD!?h0w#SVfP`tJCbsZ5o4E7$bh+})3OPJJl_;%E#yO~y=}1EzSPZAmsU$4S z)zxgDWK3>-bW1#o5B&{|jnqL5G%ZA@a|^uM9{ad1hA+ZYYa%+ZFkHi#V^;-B$x_OX zxx|RYa9|fQq!Uia?|{ z&I;qC?nw9BNJCPDZlrBI0Ybi-<%H|K6CrFYfW+$}51nM}b$*#VPrT?rG<2!6BlBnu zq^D!7+v*&)0~Hx!#RjhI7qjlAmMB|OwMZKO;)7b$}zN#8Cw!QLL6%dc+ZGG>=y zhX&%U96%f(2$tG|eZ1T)TRwRfv>6T*rbEM^DZDspqydWMcg@CS$z7Nd(xjDR{FWs! zS}pB}o#%8N2PE~}3Fkm^M6n=$c3}TWe~dtzwX*9rKEyI=8uCF9b`N`#vPasAF1~`m zNY!vyrFh+^lOFfR5A`#^bFcInLhh`v3=W>I2Hq&{?yE-r=8~P) z^m&?uFZ$qlgD{=an)5_mx4g&I_1AusSOxqsZGM|1tCi(NA_g4qPd_Le)lXgF6n&QE zXKl&>b*K}2sOUUEV+hHD{cVDpRu5b)_QR}cTPsJ?d9RX=nSe!_ip;Ym_qOgF*vX%8ol(`5=Qiv1gu&TbAu&j$Rz?LmG5!BIx z!JhT21G3?mASSAjuO73v+iIY?)kj&aL>AA9pY+ZgRP_m?vGc+@uq?T6!BmVgFq#7f z0IHYThNM$nYa)4$4YDE&1=@A}tzU0$0>l=57YP_yYM?p+ayg?9h=z!TQyu0ay|?lf z8!F>FTBcljY7e!prKgOrq5apJ-d4koA^=vK@GDIN-L3PO9UpG@1VtiP_bHPJ&8z=x z#^a^6rb1YoIL}T6bq)Uj1{$akMDwKhH&9xXD#h21lTtdpg63t}=##dthpg61s(8?+ zCJTzOGBk~I9}y?)JttJrxbPh=5{dTr{7C4g(Oz(1`;U!kJ+vlSP>cxC2c3;j&Vque zJ6xjer_mRB7te>nKduK@f*#YqWzj_@-^=z0{8gIRu2=d?ab1sFH=280G`gkRdV2fO zM8vyR=n99i17F#*&N4D&c~R+jX?%9OPf77o&2jfR3q>DAZ^hCBvx$9~Bz2jjqH-48 zTWut|T+$;UetgmGx{~E*^Tfs3X?x1->}HUHNKp9uzy`5)qdrF_2eeqVHvIY()QSu}b!;H%(#gM_*ajYN(z9ViPNjse>KC{xeSwNLO! zaDsl%qdsFKSIKSvc(J8>dZR)vzmzx)q*Kt}~FwLQcZ*B~z6L zSWH`<^*r^e^E~c}PP0&4v1E!)Yk6wAUJX_mUKMT{+{LR^Ju3isJ+%Bz+SjfJ2th#v0%U&?fgmbG%}9^y(ey##)S^ zMKsoZzkT=YVCmWTs)s@@6ZhVKfpw_8bU+h`z-N)IQfOb;BLzxcTotiW1F1vXxLy>L z|5agpgI ztw9*vHF4_dzDd{$$Ezb&*2d=X5<<4t4Guc-Y7G7~!CljS8nkyZd%8LAp-}pf@qHko z2bo^wNqIz7?ujU7%av~2Lo}|!C*91ikz*X2&g?@ldM)l|M+Q0 zpn{_1rwM9POB>b{FPVBS_A_>{hnAd19|W8EmYxG|rOQa2;x#P*;>{#X+#w`D=R*X@ zAlo*RWF^^U7S@V3kwQ&Zu|WHws7Q$7T1`#+YWMEu{9~nDrbXr;nSTyu`XtilA<_S` z1Q78hpREuX6=#eR17W?w*zowM`dlDB3hrS0v`4I2vgi}mYnly#*B6grLFPwtSRpzW zsSUPKz1yvQd(%TPNajDbFjc?IByN5A@GgKZRWl#^waFNz-69fZ1<7YkQW4igx3xkT z!mM;m+Vs(j9qM*ajGY4%Z6FTGfa-!xYFY^?u(jOv#PQSZ*|Wn{Pet#uGNo+h_U)&Q z9Jyy~Rc%~JJ9jZSL@!V?%1)SA%GZ>YX;(iEZHh%|+kUuXYhz>l3g&D_-4EeIV_C(4 zD$wM3F&c43aj_ztG!zC#+2O6c>UIzJ=0oa~-cx<MQHQSJGZ$u=0v0QUG#)w< z9fvm64l5-QO&$qvGQyO@Gx#yz(a>aHFwBDrd<6{tB?aNanS`5vAJpqwSOC?da1(e}CDx2UnJIS0dlYNNsfz(5hvCFg%>xgLRA?qz$v@ z%gEFvK)~8r6*;Lg9IfKzxDFkX|8-k6Y&ZnU!)ZXEzG*U*tZ3t!9x{aGHH%}L+;ZzC z8h%knwX|(dir25u|0t4SHaCzAExA6Igu_E+G>~n@2C0lsS)zbmp=MNd_bE*@nyoLk zYzF<>J?u*eWOY=7j(UIL6~|*yKnN`()NZ15h7HrC4yTPBR43so;#u<5(5Y0V;5~RD zui#DMm`F3bEjN%Rl%#7?XpkNOV})VGd1#fz&mrk(9ctRgS68)*W}8XaIbkNWPI?rw z#6S|1ug*itz`8=(ymY{hI2>P(h=DjNGV&|5QVoQ_r>et1AboK-8cTvhB?hUmim?;F zNJ`KlkgS3rNt-1$td2^>`Q^@l>#52r0y1I}+4y*n5y0*;kwAiFNJEojdzEo~-t?GQ z`>h74FVI&&b^)tY9y+Q%qDXcK0TOlcSkH}*hhf?zJ)TZ;L97rq*o%X6Kbc~TX+fP8 zERuzvV(z30%%>v+x*gTRd02^l->}+cl34@k;T)}Ku(&!>*XJo~)4$<^fW>+6;%vh) zV(9|bw)7;TQ^jQli<$J5qia-0oZktJmvHp$+Ns#x61!1@OF!*62 zgpBp>PgjxirN=C*3($p;X!BW#FwHV`0fP>8B*99u@P^+M*Lu_yQm1&>u;K9?62uDm z%1RB#N5VGr1LENxwW;;bjX?`s2B~6N9Xj}7un8k80uLxsj~7>k^%zFNi#Ap5s=_k} z{8NtDo6w%aSA;S+IN1@tJPdWRrW-|BUHQTV)MZ7e*y!+ZzOz?}lLerjXyU~+283*N zl4-poy)l@Q%@zl>Duu_PVp zq(~Tvm$AQRHP-PZMOLc`hVD@(VU{(K=%pd69(4kSu-W2{d&`MHVc>Wb2ZA+{pbPU( z@DML+BFT0Lchdsn$-+bcqD-9-2C?QN7bF>jUg#KMH?AmQ&jHKL#3rShgf#^s?Y={; zbg;rE+}>Y}Zw+9;V7eAO)ud!@fqEiaaTQ`fo~7slODq8(p^4UnSv?KYBLRYz zI6i!Zn1(|ve?BB;6C8vC=mG>msUn=f=^@O8iXMPIs1w#BEUqEK%0qpRBm#V^jP8aU zy;$Y6<$yq{0RetmQMV&t;7B`;WfccxI$L~Gldv{eM-ZU`?abwDdr0CyVoI#3DwbkF zFtiyp3*&5FiSW46h^vwdfIExlrnrFRJtPcIHXowf>n>jw)plboeVGiwFf8`Pd9#yG z42*?ve+OQV`3f|#ZTM8rAe#%?WRNM*(O7q_!j_~q$7fX5hK+h2#0h6zk~Y8 zCs$lhph|~0XTjhbj3xosl%Br1*nSnKfUFb_lwY1hk~!R7 zHKqkxTNBFTmE4)3=(Ax;=rTq0j570o$sDNPdZ6d<)NehIz--`U00;n5bd^lS=kvZ4 z;7cinH!;ROaHEXY6&%Wk<#=(y2QCMRobL-2E8e7a{~Ea_eb5HDn|7(c#qDg%fw05Sh>y`xmzu4!O52 zHz?^8uzB~|!->ZE(B@s}p2Q#SzoE^P6iV~y@_gE2=)`00lk5A5`)9woyBgCeg=g!> z?WZFY$_QmkY1qH!wDMH1jCr&15BGvnBPE z5IRQ@rBEo1e+0Kg7b)|UT1qmd{Y>ItQQf*FrMjV|@%2=oWg~^sAyuZiT%__y&P^rb z|G#u6{Ms*(&21vqEB^JV?BT7W$>AryZ{P_W3->N5e@%|!9;Okqwz3KE8LN6Ke z1UqEQX+M7?AmPB9)A6aO(4+D@;?%iDAhV38QZ{vcqhH~>n-Ow}%BlcgF98!(M3Aw({K)OGv7_5QiPHHVMH&Ny!P{LvM)Z8Zr=ZeYteFBC5< z)uv!&evJm&WzLZj~+!+1vm|+v!mx z`U{%g_EcOYBjw4*XCI0)MD922mASq(R}x;|x{#J~&1_G<2~ zP^#rR8`*L@`V*9tKX2Ew4!nT% zO#??W++~KM<@Psj-|!!d4x>wTq>%v1#I>|rh7En^tW9@r;T_)Koc!$h3Wpqa?$} zKe!(6&m?d6d#Kc3$&N}*cw57FeU}5Z)aS$@^|-r1IqgkP|6kz}C2{TTd!wHfd)4C0 znQeqjM=I+=b^n;o<$kgK{c9pmLuY3!4ev_TcWw`|44`=(1(+$m4Fd5tZ0yTYy#<)6WkBuU&m&lkXNjZA~l7 z*_pQ+I?J1?zb!nrGxmOYUgX#(rIp>{y&~7wyNmZ|nSXQy$CP$p0JI>1uv5OvSMS>7 z^?uY|pV>+{P{`;z`(#Ecba1#QcH6w_Bds*^GhSD`>g(>LY6_d@`tEz3bNI_x4M}=l zLF94x!{Ym1zg^Evfa}-dQzD%o?mCb2ygvt!uYWaL{>wgdNq_ zNNhhbwPKsxEnoY4r54iV;NW0yIfsHR;HOU4BZo0B z6utNBd1T*(TO9@xmuEBq53*isaHl5s*rl@BD?I3F(_Xm(E;EH2*XHYI`UY!j6zez{ z69s<#3jb&=SO^aG7mr}=@dVXCe&2mMlleN!7~`-q;~&89=*F4v8*bL-`_aJ_X6pF9 z^^b1*t;S~-_fCZWHl8s#3Ww8g@g&i#drE6fv1-E-baV42<+9#QlzOkY2;MA8R2+TW zx&3;)F|A|h8z-wxgQk0B7|8ILQyWs?+IEdA^Z*iCz5bPzC6D3HPkSYmrUhesTzvaE@>w!vj|7-L{X%*kQyklM_2JE#)#>4jT+Z*Y>>-)Ls@BL$VMd!dA$Knh zzPukg%Bj_0F#Fm@?A^Dt7mqttPcHNojHb%SO}PbbFOF>forVONqRxfxU%T1!xkaCV zzdOu7x1Oh`p~Rqa`Z&y_Jy9bO-@z3Xr27(*SS}fGQvgIOr3Y-Jslx|yq+6}C-?k8 zo)YGjgdjP8zqG+duS&;8(iTj&FZ<+Gijh0KPi5XAkn5U2Cq4#rvp^c>-@Z&f8QM;Z z5Y17=wRyDI^Y&!U#QU-86nJyQN|B)a(_-BGr9{0OCQVPoZgkbWqv`|eTCsQjkx z<(pO$aUUnM1glSSCEkeq_~m3=`Ly-st=h(*?t|#NJNbXxvDQCBX#1N3Kh(z*G=x+= zT5gZDJt%>vB;IR~8V$X^;(5emSH$-WDEhGIUi7o6&&S_aZC>h_OFwjrH-YJ7eNP|Q zWjS5*@Ym;GXi0@B*?Tc+bI30I zsIIj)2;q|VlhR%`Tti(yG_ugtKi$alh`uxN_2*yaron#S%&Ctpnnt%z=D!Vfe=!{r z9_J8AYQ9mK!-)4`@!y=}8f!f>i~T^3R|Y(N6`!?U)-!Ij+EwKBBbfN2m>cXJ*V%0) zEgEl6`GJql$|~H9Y^S(VUxlA_-a}06g=S3 zEGaa}RTCv#t(eM+=P`W!=l-r>>{FQE(p{is@D|079z{mAT%^&OftXx~7xn61s8-?YEX z9ib5AL&ZGRDm~WYE zUIp>k*$)@Za359)24v=Ftz#!UJ( z^5(+Ys@mY*!d)J0zS2W2`jDvZ`|E2>V8&xQ8C7`s~i zcl(?F$R8cYrk7)B49LXi7<^MjP(S_hH}?08ZhZgA242Si0 z@ny3op3}U;Sazfgjl>o#z$E-=;9II%9!8-vhY+l(2{YE=;qxDZ%3FhB21%#sL%M&p zphDfu-RCQq%{Kfd65oH(7mq|WGE5iD0Sw=L&*8 zGLLU??yq4DP^v-Me-#9WFiFzSh=ugrjdd^X53vh8o9Z4n&p#;c6UE*CAjWe+sj1~< z$fVgEDS}|1VQR)@_<(umcCpuLkIB8#+bGfjF;uoA7;l97W;OI3^8`1aY;zabpH8#3 z$Gf)Lq6boXG&sj3Ip>uvrB`G%@(p9CG!?aOT{k>BS#7JrVW^lwWhM1H;D z^nJ}Yt`|_swtw*8_5FRm1r!qvs(^Or=XiLhSI7qm&u=f^1nWFsfMMkxU*nUt`O=IG zKkdu6auCy3KEIOy9#UTHcpB}%-<@&}lqj>ii<*=YKD39yhihIFwtonws(r40^3;L$ zpiSSDwcV~LBIAkc)JT%~$rXotDaW_Qua9Uc6jw~k2P8;58c#jed_nmGyZ8ruTxYow z75eK^C|%fb*9$E#m;OsE_)BP5PfY-q$xWt@yfMn9Vp4FXF|D7k-RV+R<1#L&negfE zsR9zRem@D`@b0c(Vrbn8K@mGIib#6#i90_1`ofx$rGI{clzJ=FXSebb`_GEUu_=k9 z2`2S2nc&%rHN+uKJ+b`PLBV2Dejy{}9%%R1Z7#F?4or7(ZMIWCI^KIGSyK#=eJ_{0 z_0;cOOC6qYH-?5ZactFWHY|`eRk%YKoa55d^b)V`UcTIt%P8qfu6SAhh6NYZnH|k3?tviXpqP<3|;5Ke~@S6lMx-Erq~mp zsW@zaZf90Dg4xidZtEGhQ-oz6$SX+=w+wzJQnv2B$sy&xf$C>^B^nK0V8hhXF<&?; z!ubpByRvsSv<3zyov#_x`7&RV_lP|co7@6YGS_|9xOr}HKyG5%g>0bVEjT$aFkMXN zBqD44S{b2$`N&!trWB{L<9pAk134>e^h!ZgKf%}GM)wRv(aZ1iLi&!7G(YxJ<=>i< znF@kM8=IGQ3U`47lDR@_M?~lCox{ec-rlp0Z_-A2BJ3BPQl}@^vyVhP8|E37tjTeW z8)9p7vd{s)t?@$54!z!Cu+Bmtj-CL-lzz7i5XS&fXmI^^p2sO1&>%? zxjc**HdSo_IWYo2^GNPlmbB~n$qpWzw|usBDVR4%J65c`_Vi1-Z8A6{=rfXTf$yDwsidi7 z`1xN#^z>fVi=c~YDJ=23KDW0}J2XLQ^P5^$bx_mp0x8;p$&FjnNCq9}dbJN3WWkOy zBashyJ>mY?r0PXRZQck9?MDWeJj$0=H>V#ONpek}mlPkwC7dU2M6EuS+BZy?G{Ej@ zdJ{@}*5%B`At98IS0YG)*5)B(v%kOU_v;td^4?160%09m05y?xi4Wv;@~Z`I_vh!g zPmN}7-dnH8*_H^5a&FhE;@;}ZHJ^8-lq{eG=5(5tm$#kY`OQqbs*7p9XPTiD?)VEa z({Kz$DKlNZ*Zbe`oUqX#aYtUEQ6=6m(x<5JeaZ~5k%@@{^gvc&e111EFXTmwc}qJ*~u`+_hjRa*(c zL-lX%U#s*M^`+~y@_JEn!@klz-l&VU)G4-}$asD|eN$0V zD&}q#V8D)#sQKJYYSc`&=wb%lZ9%}r{@1)|T~CH8?+KQHieTnPAMuu-MPoGaN))+i zWxa=X$6JFpKY1LIMb3H-nL${cj3ZveDtYA7!g2WRKI_QytC|WwZSSh7NXxo)p32kU zq+|9yFMT|jTdZLy#hp8%{i&1J#W1SrxpBA4QvKYcb8w}HKich1?+(y!SgA9qRhdS2 z0tQs2$2!#+@7k~NX7qFq{1CkG^HZQ!2gBoWDcVeDk3p$BO&c~{e3L5DF?%0~`qe%B zN&MO&&wT!fvFgf*#L|sBu8a3V8i!?QfUp-SN_mdkI8%e367J1Gcd@sx^+8zgx)7<; zia9J>!0V-xFUt?Vkpo&R%vHKlH^Zv9J~7x6r|;S-H_-*O4ZK)NQ|5s%>aVai3-@vI zR@eLThR+D%xxEh0+0oxWmVW7a{@B&R@&{Z}`oT--qSm7rTc6P?W+gXAE)K@HH`eC} zqkjYH`f1vCUTe$XhJLh!HpOUtC^2;WuCT-vmuU(H78QM*fJ;C_6hW)s`)y2nJ# zU&DDqv39@w-1V{krxBBHlZ7G#F9xev-z~UZ$F!O|26A(Qb#-x( zTw&4Kz~3)t(+8v9x6XMc!M@0UsMVJUSI`$@&o}t$_XcO#wVRx%w;dBDAv=I1xnvIa z|BZ$?6$FheKD%hZ;0=#O1k6Jm8^3Va1TzViyOfso{f&WO3%f#0EYq{4xwG<4!`kjV zKW;I9(kZcgApLEq?+0nG?fkEUua)|jkFzTo$x-3f-2RBZWOZ4fXFrYFVb#06?N_;h zw@0lX6<>8<*48>F{PsM@NkhbC(R@1m_7fBf_DCxtuqygZf6Ybq;LmFGS1&6?29ZCW zGClfQ^%1iH0qT5fzTh0|7C>|MNwIijsn%l7WkOmo{?srC@bPwy;gdv`jpNd!naQt- z;j-WFK74@5>=xgYc@zHxBe0S(di?>ps-B|C6085RtDV6%mPu~!QqeDYgmk+FMf|5B z@y^xRM{dBA%>a8uv+^@u=O#9HlzH*OZNGkbIoArf;(k^x@M2;LeF~`ed01gyS%ZAB zLCEiO8KPO+^t>L6iPqcIyL>-Fo>_qHjK>5vhAt(C(cX)Y_H)tYu#H~t-DG*&dK>2( zkSUO}#?9Xl^&%m(EKjBVN4TQmzJBcHedOOqp^ou!lR_6BXB0;)|LxbCO0m}`YyJGd z7(Bk=Fc{VFil}px;FrRbCf6IE?{lr`Vc%eD^I655RUFEh=4yCE4vFT`$?F(X*445S zi84zEXMB(MZJ|O=&K1QhW7QixHq{yZw3cZDe|=2(*$&ES=G{uS#3|gL z47#uNRr2k#8p0)k-6Af!9%Ig3+l_n~w?H?B4@bQ0<0asM57Bfi!+Pt|7zxrcd1BH;fDiW2;j#?XL3Av6@!T3j;=4?wa)n z!{=bm6>OBah}D2*rT2Y4$ZPJEA4;1HNu9 zx~SbMl?+<%viKn0lPOh$TLACq+O)CC_#ZRs+>w7SD3L33!=u>EAot1G{S)(thORYZ zsSCa|TfcGNgaYj!{9M&WNN{ui&3(0Ja?kMjmi{|%9a=)<9VAQk1)CaX2(+Qpb>BYJ z+oVIkgv@UH;Znt*Jom-RN%4OsSxX1{>iQO!Z(%;?a&)n)YTPaST$-k2G@$m8U0*Q9 z&0aXwqls)TEu~(3=`sUr9UJ#0%l&DyxCF7FtaDcK@fofPoig?kycY~Q82FwxMK?Q{ z3%G+e;fG(D)hch>93euDouu8AG{HM!hB_cQsKfa93u`A7T$SJ!*v|_jB2EKFYU>)y9 zywTVQle?~i&M-WB-uGf3FF`mzYI>VxGmbPRMDO)AQa{sWsH~1%ZsHGEL{2y9EAInY zncEV0&%DPCbwb3QH_sh<4Q?Z`idM$ijl-tDJgY#Rj?Zu}_VA$_23Pc>uSiD7?;0KC{|POQt=K-7 zMq$01s9{#OVTpM%)_7*)!0teaDEwiWS?ci%MX3LVp;awx3xb%8%8zsv3hP~`C1m|`khUkI~|2H62S}|?9co; z9=?)#P>WePcxBi$$TB^w#Bu0#dDr2Hu|r>dQW7&`;&gBe_j>dbR)}29)1L52canGh zn&wR0%P6t{syqX1JSL&Qt}A z^7@5iTo_9#JJvMcj2+B*e*u(L!zbAhKwJNI|GKjr*^QBBQ0b9LnWn$>v5@l?S?JoH zqJ2TObobpXLj1>*yIv-0nJxTby#-b`E>CC9Ot+gT2la`iPJ{>bhKdpERkUvNe*_jN>DSV!{EMq-($uMdh)5s4 zI19OV**A}p=MTapzV?K7&^@oas_CZoqIbG?(lz*31G9M$G%Rl{MbiXe z2EnBl#PF5-UfJ`9plQheS6S=TowLhT9l@??qi3*GWdq}(*q*%qQ0`?ueE8YKSgxwy zD&+~5{A;}C_0Fmmihb|&U$HioR9_Fup5KMJDn!*pX6*>`>Wk6V3JdSQ>i`Gx-y4gvVdWDdyU)5GI&hVCgJIJ32pA0JIx~_r1mM2a8mCe%5<)Bfw8O`tNn~cW*hR zZ(H?J;j%Knv!n!Yw^e_d zVR~#F4C@*07qCS9TnB00f20l8$yYl<%05YWXK1+x)VjhFV zbV;RG7Sh02<-{l&-Bfd9aWh!seP6=Yap3-?f+~XM>-iMDc12_y3yt#>ca3nKTxvGN z-ctBeuh`x6xq1yWsPr00Vr+pnIbg@(WV8NKgwppz#`+@)Yd=cW1C1@R{g-PWr}MMH z^-pI_tLY|^l$?TnXh6@_E6aR^zA$yg4aj}1Ojwi;Vkiqm>dgVRNaNuwtuUOYb*(Dl z?4+j^Y-lr87oTW_S0*nfiBZ#ruTh6o05|ya50iM=n|06t*s9njs^37_K*@H^ zY@7#1_+)~y2L%tLegf>gj8>2CGo=b4TyX`qeu`bC6l_H~(!3|Q(I1WFP*I>m(;lc? z+x^VJV`joOy)LyX+3~~r6@12^3fcwx7U;2p%c$$~#=h{LyDZFF*Z2gzQU?)IgGM}{ zw`-&H5CTMRgkGujJX6Am%2nRyhRrwxM1f`N&TT`sc73kw(U2(yS$U5NA+NjFG@XJ@ zHg&?NZo$0fVM{e?QeDM+h6$#mSM&A*aDg86kj^ca>zFXf)2hdWydqKpv+t2BdL)&d zWyHye&QM-_pM1C7Ken&e)J=_ZYFoP+(#@)RmLGkmAV7pR$nzH`d%f6L060A4Uh3R# zXuKGOvixotLo&l0f`-A&lH>k*t?Ws`cNgUcNY23qaQHr$t#NR9bzoQn^mbfsZA1=ESbU{(Ve2lKqmvGceMyno?Sm@bMT@DZb!<2i zUqihN;aZ;@J^!y`P%R>n6`-I-T*vHfty zR61D~;#}}$Fzu9iV8K>2zuF-lY;8px)eQD>_T2wtC1=Mq*AAd&YzgZ%30w6`plide zyBU*V-%Iez&EuwOj1PGAy5icu56&S7rn-3$)}9RLBE?&oW8XzIQ)_VT)d6$ERM zYtE6r{1IZ6QE5c?=nVRmbm$2!s1QOawu2zzK>Gq$&96A{vzP06LV|6IvXg~AUrn2) z4iLN2e%bINzNAFrgZdrY0XG(x;WFV9S*2q`e24D&LEtU638_W{lI0O!k)WE~(ql!@ zj5ze(>0)h@s2$!1n}@T=kZYy(NV0HrZszfF2>`jEz{t`*-gFXF2OVl%7L4w*ft~IG zMKTV;>5@0G>|XD=a{(n-nbqF;{?`oxeVtC4?XicAVdZbrrRNIWkzN~KPNH1mBnEyRH0+g&M)42|9;2<7=7pU!QuQ+5)vZqb7UWv`h zNcQYZs6iP;u<<&O)MgC?BQdq@C+1$jShG3(ck;!`5-d#a+*mJI|$SA+U=Y7q#J^B zjxa_S|DL5MgtU_-+vKt%Nt?n>qY$C?l{g+O(l8qEWW#dd%neGZ!@gE7py+eqLD-Cc zQmsC0Ix>Q!6VEuL-ybIrp4hfffI!&(%@hry1co;@i*67OXC)7kL`vcRl(15m+5`gP zI67BtWd&!wUdF^fg=T$(ww4|!am&==XspXJ`^pJbi$3@&YPPm!{_D@&ulzgwTnb&n zx@lIpehvc_jR%%pT)U;e;|s#5Z7!ja?neNhk_j;nY2)+wun4As+m{hvd*>0$Pd8fO zmwNyapcaq+U`ZW?jp8lkK@vhOrZWSH}^MZ~%kFGdi0gN%Br?au# zPhD0KnoeSqUreq70k+%c?vEow0&i_IqshbnSJ+E}B6EkrjcU_?d~!`%g-_swW-jJYvYA)s9hW#4Ds>|kyXxlSwQ*&;{t$7QmTjFcy+48{G zKtIIwH$+SZ|q9NY&bC5N-r*nqz3eoJ|(XAjCGXmDq#4!b(1^XCK;Dz={=|Z+kf>E?HsEz0@IjW-ptVtWp>X&A?GC1Iy z!UAH0l$OPFtDV(K7T~-AgU4joOmW?7Z|pX5Rq9DY>8@AmH~KHWjkKO~LWwpS0IWNZ z_FUbwHY;+lf72_M9)#*SLz$x6=E0#UpC(KsM!KgbA!f5l3<4obQ)IJ+$WlC$t0^|s z_u=>OQT~uC)A3R506xsU5XY?pIFy1NAgnzP7|jam?`6@0_iK6joDSKi5U+q6farq5 z%PeOKFwU`jsyP-)JL$X6I3%8n6=WbvdLn4eH^wz}JGlJko(^`!h(po98-+5Lez%oU zR0#V{w4%X8h>ta>X0qDNCp&7o+WIxJkLBp-^Flpm7>Y)Oe2lds;B=l!aiFy9)Kc&G zozwr$KhFMFVSKDGZp=W)9Esf+U>W29EDs)zQc1mn@R@{ovR~biVwW!0A!w?#lOE87 z-s?AIJGTnxK%^!kxHLBk7ACqzHL(wD382GVdgjLf;c zqCNhDL@+9rlQ8FOMTYisw&3j&+L*4dyYeY(g5IJmQut&yYzI0E(t}C7dvai{uFn*JQwAOT zTrI>VqHWjGThlB;+ON8<4evh2K`fHFywqkC*Y1U(9+=j4S z*1{W*5fb0P%2)`~M4@MONd0fgMmVD;^vRRq2jp)T*HH?C^aCF|iIRoqFf@5<=UnE& zRIxfN2g-ccKFj)NAC+yz__w@s7su$50?x4IEkZcC%05#}^;FQ}_G=CqkI96ocFMQh zFqZ+Z^SX0KCyb-SGV9(ruyk`T#3;2!k0@DE-c~`1hYMl9izbor@~JpX))zIO4IKzx zq4iFj8^^8zv{$_y!n<8(BwhjR(5Kx@sx~u``hN;3H|&O@x8^4pJP~z*5%g#g+;xn_ z<8aMCvS+wbX6*6Ujm|Uk={9Waib)Mfm1g`9*dXkNu< z4r|qoL=J)!tsrD_(Drk8If;i8f#?!Fi-W2M1=~Uvv-AjgT#&H)u9*N6@J^(l9N?la z{iNUhx4hteQJ@)1>MOzZ@-L4Wc0GUedTu3sEp$lSlNCD(P2-GPefpz2J*%y{)>d5X zAXHEw3*?gO(>LiJFfe@+5a^o zX)fFj4z~(sa4jASi_j`%=TA(CHP3Aonm&Atc_D>7KRVWd4^qx~B~$;Mt`p95$qQ8K ztjuLrc{_%EI{yu#j*jd4QYBD)oS`iJL^=meeham8vsLIgADo;0#YrZ*j3A^>Hy335 zs5|h}nXw%9^c87L`HRm~Id?~>?gJ_b$%%q0OQ1cybzc`pRB76i8Tm(Phk}I1u>nZr zKs;P;8-~vW{g3j7MF>c1s)jaEQ+ToZ^8m)RG>%_NSXp5BN4>t2qGLWn=dTE$tkJod z8)@J|6e3CY#$N?hPEpQG;Q3ctGlvp`w5hX(v{;Q)lZ7i7QTRnCC|XHpLJ;l+K!wT(nc*WGy1~w=d5*uRnpKd%`Y@6K;L+V>j?l z19fhrjArCb`UC@Lob#?PU_N@eKUo;Hfa+v#8~d%)LFFegRima_7;f}J8DQr-jF0BSdq+r~ zZA!K?C}!GeM3+dnm%EyNS-5^syz#rhR5(l=CTK++z$m$nzFx@objQ~Qdd0St|v+bsgRGo%62JbGk2ue zyEBba1BWdY*_yv9Dslp>Ez5$8GUrK=)_e~m|8M+fR>QK!3;t&`*Kg*iQDpyEkesS* zc|xS{@F;Zv7jcdT2$J5``TFvFsKvCw?Y(f$jCwU^C;rMQ?C^q=Lh4^^_j9@o5i>P#;Ng5Q1{C$1jZQnA8rP7Yks#OH z+v)?~lKU>I&>U0k$?6hq$z$b1++{Fxj;hTvIzjyrvNy{YkTe;WYG<&?2Ik*j(RA1Z zW>r&`UuJUb5W#hm(RhMiIy>913#0(xGuPr7_Q7uI zX&ig641g&|=hW4eiBa*~Qx3C$#*Ew0(nUv>A45WUleU`+At3%xS@Bp0Dz2_a2Gx%) zRbne+Svklk^csx|+_g>0+Wtszr}c)H+YDgI#!zuSi(v&GLLIPsY*JX~f@?I5$7yaQ zr#gK;0(k`XdIdd$%w6-HK}OCAsVY-$z<3im&FyX3KR%C_o5K`LN1Oc z8@_x2YD8o^okY(kRFeExDx$b9m&F)`{2tkMe_8{*1#ywQ8gq^mqel#gZNEG_Gv?x+ z)oWKyk!iVl+o%=wSZ<>GMV74wM8FV2VcCE%NAqc|OZ)J6xMq0!YS&YX6=2`U^KAQe zc*PZ2PM8}j`kbtEIA_?YC6Ri9^p}%!O5JG#?Y-Seyuix9QC_&$88Z z&VcVx$KOROnc-5nL8lhpZ{}GhOvCGo2|W#@zjhq${g2ZCy~APEN2~U?l8K{WP*l{c zM9~GbO&iDNL|jhq&ygGIl+IkJS?URD^F0zeiqPa7Gv)rLR#-W(F+9Blmic|^Itw8+ zqp#<4>8G>MS_ru5~SC5YA%7` zUm}OgvBwg&AZ=%+U=1B_8S;R~^L#cIi@2Qq5S^^ zGdU;=ZlDf7hMMdBWD#mE!a3`U%D2i%_M)Wp#@Jx1Yyq^Ux`Z94Fgd{-aYi3H}`Do<}>NL(&lI)FoeKaCF-Op4n`rnR`j_speH#?&A zLoOzx9jIMcbc(108(OX%UXiexv&I_8%WV4igH&`eposAeaVYC~#8ccJ1Phjn3)A4c z&4k$1m8_mEk8A&&%?#z$C`s}Mq$Q|Dk&)I8*>RVhD`ygJQU5 z{deCEYhw72mRYFoEaz1jD5iM)t?9Juq{>2-nfkGmK4wGnf~ovec1eacpeg?ThMe`F zbl}9!4~MlN2;_2$v<*_FwbP7Ac@6Gw=K)uS^2>LJ{%@`x>yn?4Q*ZgsM{T@#eeC}* z9zBQ4E^;AuAVem3=LOo6Mg`YEq~2BA?BV4;GhZ3M_iX<7W+rZ;G_j zK*5~ig^NK8^g_k;k`99rd2i#>s>LB|Pjw*P%NUq7mw6Qb@z12>@Z{?ZK0YU<3+I5j zphlw!&fFvill#@C_EVx>gvRaZ&6lLpIp`CEsf!O%O5R( ze|4_B`ubJTs}WO#wse;xMWk`r*9fHAtK%I=Ae|VeJMsN`W_mP*dG^l$_ynqSQV9v` z0zVRugxp`po-&;nt*LE_>7H=w2c=rONJCJ{8(oNPt|?pbgb~gR8Q}fv^L3`LCrB-D z;1->QAx}PXK6#)9ASL?R!86|rnTD>14Qu_aUMdcJY!JdDhE*$v=>$&Ksh|u@yu+P9 ziuqlZL~D9b0fWavS0cHa{1(oN{_MrvBEReM^&`O%cHXx})KugSW@)F&0qGv;3nHg! zP+KM(EqNfAz%-4WxomOLXDoRq#-@TJp6c>i(5tYk^~1GR>Amw*$OP7d*MU-Zmvmst zk`j^CX-qdn2N|Ow#vCkrEI0~s=Z8OMKL9H4#%rWImHcI$U(>KfLzqw7;<_-$IPjG; zM?YeGrCU(lWR6W3u=XTS#n!1Zweiy~ti0^M5EswPAccZJpAWbQ!t)96IL4s)T)&ozo92135pHfN&(ES6Ax-EN_Ok3lq))U z4$UtXUCjW=|7PGa3P|a{tLhoVp23<r9ARdz)xbOfsDEHARRhkS0XLxiGUYk+ z9_j9q!itr);5lHH$SjeP5*419`-g0~5AR~Kyx935hAKzXj4d861~QSrrd{+ZY&@tI zjdMExfg_KGVo;zyCB#%ezqp7_R;)Selv1KggSeonHOU3)-@!eztRkiIL)c13554hp zDR@5$#6D)FtIt_yCP?T#QVUu)|0rjT~e9=hsvJw4i5Zwux+0>RMOy zpj75Bp6@<~xBGNOGk@jWGnVMf?-z}qdJckxc#Br9BcN#zFqhBEh4DSwQY*km?X*8C z8ZSpK&Ne0z2d#}zxMD&-x?P>LyjTbLL|kP4k=N(|n$^@zrx=SD4}KbYgcfWYdmd0F zg$M$lN1023TSUG}#Y}z30%rsw$6Rz#;25~xXO?`CIg_;3AIAfniaxnL4sroVo2!9GK99nyZwbkQZ^?wbGCKO3nB#jTHppvglEx(7Q;k9d8dqc^$&C0U7=-m3pu z)UsGr$fxESd!677)4f#iz~n!{gpW8 zYu?@!1bc#46GTY}Zmu&S6;ai@f#0WTpU*fCAofTKOk$tCFpaHOjkl|kEa zAt2~ABOE#+-+D1ZdK^F-BBe=1LK7iizpaaV?D`2K7E!ADbO16C20{B-L3B{1w6ltR zAeI((YGJCss1SaUtk^J2&vv$J!>HyL44yz=Z~p7Gn3dBVmBxv%U`ZPk2u(5B%V{PGN0*)6LXQlAqd1Wbvx8 z0$)h!u2%fEEcJ+&vwYnl-eM0g6qsEVw`ka3r*HpEn3dPVEG~YPSdCImWfULRbsv?z zJ)v&4W9^iS)n#<3dyACq zo3MWlr>l*qSobxqJ~0-Zt&{I(V^!W)&56R?D6OVx7-qko!tJzhRKt~UU;+Bd8()a+ zYUd`j3O$MvLOJ1E>KMV${-~NyBxS_~_6Sc?XiZwGcw_YO#daQ89kZTH?ZK3e9sjD@ z3~djZOwam4^4@$En14x#`d<9LhR;yqf}-Vnd=Rfchqb+M?Trz&6Ka}>(l~Vu2klxS z`p-d=z~8@)iW}_A7WoN?|A+KCDC4s*Fb&23yQbWjP|tNyqx&!n#DBL^rsrVxuGCE( zR;bARl|3eaiZ&jcSQ2_v)w^^cPs0~=Me^?Lmt?{J$_H%u;Q5&u* zzJp=x)O>UG=k{YF7D<@m5ND3_`@+=_Sl1uwc3>4FwYdOqM+A#sK22_3H@?@TD@G>=o117-lVYW2-zR z57N69d}qt!Pk$do5GBY051%t)_i|~u2$;27xA(z3PXamRp?236T=l&E--~1`WJ;%< zxLyv)u~8oOxWVW<#c+(6e)LZGXTTj}HBOWss>J z=m`9T?yT}he0`Phd!`MQ@mcO7Djr3N)^R_;5~%n*zX51;efSJIx>v6 zh#2O2O9TBy8%ZfyOc6Pn4^hbV%*7-{Cu=}6Vq2krEQT-Go$!-#cF66-5Z3&OIwL-= zf4uYso6J}0oFKUgPy0B*{f@X&YS=qCrDSkk70{svktR33b@*n|(fW|&_aoOv2|T;% zZqP3qp$4^;F_TNM_)khmTbrOisj?24t1=fZ+cIQBMLfX$Mo%G@XlF%wo8IG_)%=7? zUS`ar=jZlDQUJ00RDFGF3OKvk<@-dyH+lpDw*t&NpjtcmX`iEeF!0ap;k$TmW-lS^lsLhIX&xTSok89-K_)mY< z(-sz zEjKkV1i=2D7qV3zof^rbIgeY2fKzixL0yQ>Jhpj3;^N-q1 z4c?{uJI+F>WqwT_B?oh$Bl7uGRws(ZqqazmeUrurW3 zE?;Uqz922293ONk{^PB1Rs9iLJ(F0%L9&!Ji+D+r12^jg8vpOY9cY&JO8MSs{ z7O|I3ns-$tNOBa&;WRBZ*la#?uvgZB$}sB|^ycCV_im!hzbQA6;~Bss+#6KKhox5 z0I}C}c;tMt0w08+;9IethZ+bMp=%RH2;!zFbc1rsLZ9%Ke2GZ-yh56e*GkTg478yC z3j`#Xpj5Zfmwr|ST4BsJ$j zX!GxKEcdF5t3|`>(s3FZ(87ODmD%Yd;<%JNnr<<- zwVju{$#w|e6TDElm;S@qEHhAJ&Dax|=@is9e=Vs~k96EM(c_PzFQ&3@LQ&(iy8?h4 zT?X_h&)>dF=Ed?{Vh9P67~s~ph)Qqr!oj4`Mj_l|Ho^vklZ(u|wK9zq^&fp>^%+LsTZcCMk36>NnZc&=UZ18&|P9NHr%g{=L*@o$$SNF$(ajpeurIqGOIJ)6M4I&1@gQbUA9!Vb` zSIg3HKuUi6x6b<2r&_ZbDNVKJmz<8Q!`&`uc3(3+!shXAg_PQ&wU7qH0quQD^|-A+ zQkx&q$--_Bsu++gl{yj7FD8u18n_k6{X~tjx4@6*J1lNDwE{QJaXXa1@(U#JzYU7@ zuU)!u^v+lU>n)vsx2pvXDrHkWg(El$!GTJDa@hr?hnYFy)eT?z;F>3+ny)6KbCg_f zx3C8;Zl_Tn<-mEqOvs@EJ-tp}C_0EGDWAtNDN`Pf(6 zPWU4C)wK)&03OAEACUGdX$QhZP{1P{4WQyX`(MHz5EperbpWVNqr7w^27p*`JuP*U z5YToj$NCO?d0wFOQG$$J=YaNMQxW!VDB~8vlQNIZZpl#;xZ9 zMpbo&zD5|Dn%dh-a+X7d%4=Oxq+OB=6|G0}OV_41juqidX}41Dd63>qA zOU!sr)liSNHo@&Dje_2S?0fMgMGR(x`qTp@?%bHU^E+qneAR z&Y{sYEfrH^j-jEyGT;&btr+C@=d8MsTOP-xaecq^qKR^TZWs#(F^d3Uh}_GJEps!o zT;Mh7@7Rtz1>+gm{-TYFN5ZRQjDRX^`y|vzHB|Mxq_{Y7d3)MSQtkMs=AlM?yxh_{uOBJ}{@=u%Aj8sO8M(v~Xi{sFWEsK?Qq?MIWuhUvgGa3HE$6)Pq zq=G~jHGGkbJ>pu;LdgQ1U0K#;4h_38)h-|1=2SD)+d|y;Y{H)~dx6NO##^lJ2Y9J!WyB6M?r^+WMRoi#EjB(Tw6N(*!newC@3P z5xdX#RuV=#A9F?BI47(7EYD{2CZ{>+Jh0(Lq}OyQoMzzq^j)#I)@{W}+fOqOi-8&K zNy#16(*x%^BR0KxzjYvYrd{Soqn*+{pk;Bk@?Dr11rm38650^*$=y@=#4v$vMbdA` z9!g;vIVVe#8>6kx9L;AB{nH|*m>HBpuO_BQ=8;Z*gS%Aohd-kT5Oni6nR!BO);Hv( z=~%qHIx-4xojMYf>eF_?eK{rc7QE7J-|o0kE#%I#x78;J`^5`8p{o;7qzwo(e?L5{ zu){8_C@(MXU+SD9zihJ1PDw%tjM(O#rcM6Qv>_b);J4CnQc;E1ovD%g*WMVmw-T1Xr6a#mInKSS)vPn)=ytPYh2og-ARiYJ(eQpy6*n-+sgHGK;FgC z(~yoxDf$YPsoiTx(tGtBzZ-YoM`!)Ib2rE=m~pGaZiVnxnv}9sztimB6fkC*AhPCw zV{UdU5p2mZb-lNh5!U{qmGXN#UZMSu@8${gdP43L+WQevXqKjdJ5*tI)#vFEou&9vRfO|gw5y$IYc$WePxuv@9seL4tUF8rRDgf{4bWE7=$5>lK zcGqjPQDBE0<9C_68_hV1ZFnZd8`c~R%ab2_OJ zuQ5J;*c?$&beoF2cw6*Ll)=ye&dJ_KWZP8uZD`>9FvDuGnKX<5OwFXs5YD#%0aLR& zh?EkSQco-J*6gR`VgJG|Vd08}fuiR-Pw8H`zq9l5_LwYT{|FdUytM)-dcZ`)2;t*{ zsekihw|#=<8|9|5#0ez$L zz0XAD_VMy!_Lnk*EZy_00E}|(cU-J<2iY|KnZ^2Fsn7iBa#Xb)4X_@%^8tw{Fa^}=`f->P`g+|#S+ zrpWK}$2bSfuhE9c%7vrBu#~uzu3&UQpPEJUOSRP#by094C$1y%7W0F)8z<94r1=pd zjouIK`zEJ<>9K#w?+~wLJ^1uB-}Vn<(tCgsasD2DBMedtDD@s39O&g?z5otR_9eE^ zgz2cCHT&AC(RN5{!fTb}o8~i%HC%uol0f>3EE} ztelshJbH+F>0W?Tgs-v92g)VO&78A*Q}JzLjJQxk?9R8BXkt?Zh%j}MkwFP}KAA}a zle?FEV|>NLQVuBEbc?q0z^}thU^=MBmF|}ARF3xrXTwhNZcv9a1KqSc5Axyz@&1wM zwPeF}a{G!CB{6w+cCyQcbKA5fkidEIy#7X7cpVd6gOO=-;c0}h@nx-%VnJYJYgFzZ z-{RHnU|zc4#h}thg^VRUUdVUoGngmC5bDy&_Qy5%&(Con0Vdmastt zw_nVojE5<|(p#ujx}m~veWhCu8e9E<;WlKiFEI0Fm*(<+^0HW0Um-QuhuoX1j-Q3a z9Ci>~A*jTZ$dN;-zOuFx<`Fq}fn80zBAeU$1!rF(GPjB7R0^iAi&2P(UvbXWB?mUTMsb;8dXcS~#)@ZII2 z_i{Mi$R;kU&@1kwv8qx~8VG4Kr>g{C$k7Oa0cQ$NOO#YbA4dr>Me}>X#)S0O`4we+ zfs@}cbsPBuqUJ5Wu$I7EwZTw021JDawt)B@anU&OTv*Y#7=>-%r;1T%+fUg`4Q?T7 z>Q1&h;tg3i%p*-wrDg>FH+5!+CrKUFlP3bVmM{0M=%Lru3Jre^^DoEWuCzl+Yn$(# zZ$EU_VUJvQc^`C52rT)HL!O7SW*f_S%@;+sF9GDV1_-&se~CQ~g>pHN)N_bK>I^K_ zzgddV70=^~sC`#nf&o2tIrwFj$9ltSyiShD>GtpAfWkjH;fh)0#ryaWapShg{QQHv zcGm|v&3}v3j!T~4!*^SmciQn$AwS+N{6~A7!KcF>x*W)a-S@h<-l)75xx~_3b8p?* z%bf|*#*Zs7r}qL)eRX00)s9`6ToC`(RrI&6yNMxp)v9>U$*@W%nB~jrAJCs+Deu(I zoRKRxg#)(^zBCI`#5@#-7&o_H7r<8`Jv~{K0T+vBABV`1Lkbl(@i$*41Rite@rvh> zvn5`Y7}SjBEJr;Y(Gf-3YATNI2=E^!a78KJWg@@W_JKFoP^269U61%g)y(3U;rq;s zi9&h47X?G>NK#H;@KPWAvTxo`Sl3szLUS=142y*mf3PhQmk5PLol6;IK$eXubz}vY`OQ7V4XSJ zn#|)r!`l6zclhCxW80J>%=Bd5%CXVJ=57vAA~p)dLppzso`VHvD!rX&2nSsyi{KJG7?mo>~=M|&eN^aG$6R1?HXF8ofxm~0GkqT9gWR})ZG z4l)~dp`Os(vA? zl%C4^D#C)qBv($F66R>t~=^iL97B34uluh(SFIT11kO3-^6p~DeNjrOE znl$Bv#6aK#s86WJQv0&T&iFS&hI07hwdJTSne!Qv>sqo}MPNn2l6UG0 z>RxIkcMtwnZ1R~Ah=B~Ss$`0}uM`*Xr6YdTr&WVgILU9-214lMNK-QY3vlGlIrL&z zeAO1AMoLLCdEmz>o>C6%o;{Tef75KQtw0NQpbjH3)l}|Hw!d7GJzn8|6=Pv(3F_Ga z5@`qin-~3o`2Bn*t*;GIy#IkV{W@@R;~{{(CdBwHy`0Fa^-7&&@V^l+Dltg4AL+NR zr0O6$y#?kHewa4CkFfpwtn)%${kR-+UQWM@w6&CBDtIk9H9akT#pYrJJ;lag0M%$K zV1AiD5K`mMGThc>Y#T<$a63Kl;k$fBuZ|f%wZNdw{-^x*N39=Tje2vps9CWS0^)k> zS>_v!7U)ilMs&=0sC>ptaf2pO{wONl`uCdB!32Ww(wGvZ=^!wcl0t1xC)c{t8E^yy1T4Bgu448*m&GYtf=C8wyw1{p?wVEd^x9ie8 zrYr6$7+;+ok4EkUR3bUm#Su5E>9b)9F$Y`Bimm>3<#09@d=*s$0kyc$Dk zJ-Wc>?CuPF4cC0O*|tnn6|t$%?3I8YY|j-TOV=F}sGg@IPbw#p3wO*KYvKb zx?UNp?cES5~{aUME%%-7f?VCvM3{wluWYSXv!>*sK1XG+7`?(p}4FaXj8H*#X+V6%V zJn(0#zJDI$`Nvl)BM$P>gCq7d3GILKf2w2YtM*TK6TH?>)C;Q52k}pr8Z-Fcm{c#* zd5mNVzcC4IOVPUf{-&~y9;oxepOruOi$=sKE+Xy1VDL%DVWF|QMt)pN5u=@^Bj0Ej zQ=*16d1M77Y3$C}jSeQ5`A)uHC|>t~8NORyJ}YrK1z$d=F(As6cAr_VP+#hPV5pmZ z+Hp+AuPb3WX2uJO1LruSZ|5b{h6!5#a&(hb*H_^zPqw_8lfgty+`Z*#ilQ`7Ho5&w z9V3F|B`n{Ix2Kg{8Un^!P$_ENu;RG2?!;)s06XDvom{7fa-0dw#AKYwQ$#yyT4|l& zw61M2iv!MznkJ{c5C*B-?P#xo@b&vxwdEHo)7LlW%m|8%zaMvnMiPktCyI4)Ofaqt zdcMphMf3X)(7H`CeA)Aw2A>;JNyR$o$RpHp3#Cq1grIk`#}2I&ev~EXnW{*?m=DUg z7VrN&^G-4H{2K*A^+q}5zJrE0Jxha1g)@C0Nd8@yTJj$$Z!XLBgpS(CNwBejM!qPL z_YT<{Pn|OBOrfJPG=gO%{vf&&G*D;6kzxF< z58<6BF}P3e29nx$&IiRg-8*^&6jQn~qnKcLM2E*#0JqMN#?smWW9F9M8;_&ir|i%u z6$2U$r4_Xo`Z*Gfqb|@3%bCsf@QDPOhdK?L70tf1EbLUDvmT96^pvG*eLpl<_u`iv zh+;J+yCmf1ii<66-`ne~yODbxqy*56`D(0FJOG~_gb6co-MwqX>)q(J&~UNSJikU7 zg(bxn!Ox2p{}$!Pw?gWGjlXx-c?fF;5rYT~c1CNA$Ln>szSC;6bzmD$IYH7ypd(LM zlM2UJ(01_*KvGX%8SAOpoQNig75GIfH{{%o1WeFX%7pPbypC%K4b}a9>P-{}kR^llsAQqy~1G3xArINItoXXFa0*r%K&Hp41y=mh4#E zfiv{PSwgC%m?e71oEWBKOo?`W+gq;H7L53%Ui9F7w5-c_bfNPd)^c?kLd$%<0%O|a z*B5VtidmT2{=RE-b0mgg2rEYzQ-a+T=uv%=lL8X#Ao&DxT>U?=j7F6!6g8PLME3Do z$3;p)5(w*e^VuzGgL#ppR+4LRNhf&%IH)EG<%KNqKiEW%>WP3Nk5qR;CP8z>t zP1^>)r)$)x4z40mC2)IkSH6Qn;VPZoajUF$j{1ye@c+Wjn<6)^y6##m<1@I`52{2uM|QTJR6cP&&%BNK6BIc4QZT{hsC6Y z2}XxVlj;G$T~Jw8mRt5^gHv#~oc8Xh%drx{cn(a~W(Fb&tdJ!Z;GTd-UU9eA+qL8z z{(bt~P{2RV>9xg?=eM>gkj9Z6pmM(c!KXwBcNo${(DBt(FTf6D*|3|fj6m_Rq@-kf zQC=jqFhf#Y5AQQHbpf4lVGbD4kLNqyQXSJ&X}o4U-TOt;^!Mim1-tN#PFqrYFedEE zKIX$v-#-JK7%7ti|~&JLIt zm&$$0;yS#_`|>zcXSw0z43OQ>^ZYJM_yW||45?8q4C`FI9mQWVo*rN& zno&Kv4@_3%XC2e5muGzq8E#y2z_*8TF&L@doc@^~2@m@$h-bt8#$iZ*?ps@@iMxY+ z(&1mPJbYI~p`>g0VT?~LM9qH(AL9n&*&}6EvuciMBVtHub7bPx0gu*?)QBfb{Erw* zQEqT8wEoyw-GyV?%WALJtm^MB?zO=|=I|9AYjI?DGF;}>W!K$))xfjQyB?mJ%%fr< z>w_+)fbeR(o;PF3^W}5P+WmQe@|Cs`QRI3-!W61#JsT*7)B3#m#xbw9+z-uN-Y~T| z>xRc3`&?A?)@AGG$6HqUS1(j*1E?S<<+FLC>iUcc#Q9>M&S{K zjK<;^GV`=Z^G$h!?QRvg!LcVjSogZYwmP!d`sscLn5Ej4ur1=Sv|V(7WawR!{L`2c zB-R6SbydFUWr$_=4yR-f-CDDXLx`LGi>|jbx2W{4+uQ#LVGD-xkbM zXGEg*Na3_<=i_Oe%W2RX&B*ijA&{__3uK6M^^q0P8X@mE58PF7)d5!&a}rc_83Ljp z3BNS6z`tsjnY!X5K=DTPZeV_EZ0OOdiEv$#8xy*KLk5DmKB@0|hq+vRa}qh8YzL_% zP($otK3=5-f3=%X?x6c;J)94?_hJ0^!GY&U2WR^x<|?wvyx`iehZlA&*uK5aa~j`8 ze0kCohbe(p{_@EMPJ2WRWmF%sG+0!&-60z1O>F;b=o6jOe)(sw#3<5z<9at@P5FJ# zUN^lF+Kh)77MbQT=DhwI-3)nND$H=LkaCP@Yr)fAmcHG}FH;FsGYyY4Cd(BTyBvPn zE=h-ns(QL|#u1@OD=kBQs1w;sfUcL4n5lM~-8Yx{$nmQ_*Mf5dS3#B>u||OMy`A88 zHVK;sKp8RueoIV9D^}r0<2sJ6uA3tz-i&ch0ac|5SpBE`+XU&k_gue(ZM}`Cw_K+b zAVx!>OXBg$uMDpCI|1C;!WFQ~^nRZ!>eMmhXX!KjF|$kfCKJW1GAM2sF*YP@(4$Ujj z|L&t+wEYBIy)&co9^C)^?r{MN?diPo^CiX0Q}>4+I8(zV61%1?TeTc_iJnmYVE)Kq ziq6ov_-_1@)*E{HwrUC8D$7&WKJPbv=rE77VNUNc%g(6dj4BDqG0Y8A47VwmVMF7B z@31z82JT9wW}T$*r&R;|SHaVri}_Q?B_GTh=6N7-0RlGBuA49zNYz|M{q!N#Nzb+;JZ+7g?4Bg>xO5YWLVT7Ud6Qdu1W14iY-~Ann zW9llkzuG8KU)H0&{ON&*7W$|=;Ls+3Fhe+vvN$ldEnB)tii`%^!d%H!_RvICLV zFP1dEf}46vgy4FIS^?G|l9>G(4%gc+#KAG>x0xj@N^K`{_HHM?T=L^Y%`0L@{|x2K zH$}`=JNIGFM&WJx+AaINY>twS8KTjhfD_QVO=i|dMBtKJBK#S$enZbyvLR_d%5Byt z?N7lG=Rfj;8rSRRgV?qh`=vol#G1D#f$`>42bD@cpyvTX?+rAw|Ic~EtT#}JKZN2B z_p+d8S>fO5U}A5H5tb=q0Y?&KVjqQs8D8pnXSdxv3qox70V}vj%tCQcv#Z&4I)ROc z2>^tO)^~qBS1Pb56V1EhG@qa4GEX8dm$@*qV4#Chotc1qZ~gDiGRxuypkIhX_yy zl#@d4Ux$;ImX`YB=7YQJuZQ5jj>#50uqI>Lw1B1vBw_snv9EV!P7Ex+Efc?oeyjXI zIz5?-Kltt+n%!n*M1$!S$rKxfv*lBSNeA_Ut&)Wym_#dp-7~rnEYE zN=<@TXhP5m8{!J(&~KCpVp*^8MrW=2TxOMDtNZd*$Cx;xpdgr#9o_zlks@$k0Anp( zUYByV|3QCOycn6nks><%9+BqJ1K{Po4>bno;m-{a+EkD)*4olHl7)eIV{(S^aON?) zZc)2^iqmx+=9=2bMUHOQ54Wu zFSgc3@^`JIJdV-{v5Z=&D+kirgSOw+Fs+rp3D8^D?x6h_ZbHB}URQeE6Um50O7&{R zbgeuOtg_+CY|qb9b6XS>aYsuvVi}BMjXbVJG5VSiBMNtCURrBso{u5oNXI$uRDScU z1DFIzq+`}817>xAs+^X+u#ySQX9aee zN&om#tHL{b(b;Z?ODm5;sXGit&?7AFdAn+ad<)|~8?6x=iq4L(j6tF*)vn|^3bBi~tjgS~@qvu5xduZCMFBiRZ(PwoM)r4VL0F$@_b}C5gcd!OG z=;SB#wZ~lK&PWN1JiqjEg4{E`ofq?h2jv=V%bLNUpQD#IS;)dR!AocJyu$=X3-^$q zc!Z=A`vuI&rmsFp!wmhnYQudq@+y)Dw39gUK&EsV%+&7Lv|-Jr)W|& zsULp-Qt+a-WLO3pblG+{jCqStrc2ioi`3cOlnB=A4k#YC3^SFCMSMo?NHy@fn$s{<#t~Oa(az}*wnO!Ldi!+1+Gq2}Xhjf7^aarI*h7l@ zNR9fN{y>uRuG3m&Xb%xnt3r{JOZCr8p3{qts5__OujGQxQ(F}FKI!KO?u?${Rl6K6 z@h{X!k<-4vKLN19R>EhMpaHHT1TWT*~NZUR;GDW0; zfl?sV99|H#AEB&Jw!NChRGIS0moYi6)hv;5Hg!s@Dds#i!lcSlO59>jF5ZNkL7I#b zHOi>Y*i2O3t)x80cn1QK(lTe%{4bi*K)_gQ*BKxyZ)t2819`8e@i58f{sbF)(nRi( zZ>=83?J5X1njYNtdCa?eLvy@LfsJULGTw@Sch(@|cjYdP{NI>dH%Y=rpl#-eE9-dh z&da+dAmAIC*oLbs6)0i4lY8ef1J@?53o8)7-J3&~cW`JY;HmyQr( zq{5Xb6MsByPooKT0aMR_Ss23J6USbEJ73I;B?g^{V%vx}%pMLC&E2~B__g$*i|dtH zL#rk=c-b{xiks>)-%NTn0aBW3MXN=hb=d8=rQ&42O>9ko6@9UYCPWa$%&oG#Ty_~h zC!t(7IYWkI^78Jc=Ttwz|K}ue#D>4tJgzR#*BOAHj@>VtcYFah-ur>-=Nb>D#Mbw7clvMmxow}CN=kn_Jq1-r%|DIo_JsoWc;fCF#4@3=V;9^63ta>_C)FDasU%$XWIm{uMt^tkkdmU}rDhoa^BPc& zBiIv$>=vITjq8&NCDWfL$MXX5N=!f@j-w+a>cumr;NHLPxr>%_B4s7|BevBF)ep~) zHjcl>4w@M!1#V`aEBF_iIRw#b)&Lv9dNF8aa?6{6#gQQ2C(_-|ViD(kj5URwoGaOt zIFqSEw#j$wMW?HtW8pDFQSY8#EJ}lB=vD8Q+Kc$Un7q1JJk8*Hz#WJzFok3%{Ttb7f_}BRZ zxP$t>XL*B4_}N!_u+WB44vU7%|D~tUSW=~Kb#eamIcdQvpPUi*o`??b>=dlozE)DV zMD6~UgC{$+e!K_b;di&6+=4Z)6rz*7{C-jJ-0WKpIll}Irl}7ywn^33prJNtbTD48 z1=1PSYX?6Sikft4f913hqW%2Aj2Bb(ZbJUszL(?UwTu->FF@@6dXc~CsA|A|bO7c1 zh8-mWu8YiEN<;7zRv;aMGMA?mJowrJwaYjefpFIA(dCz!`G{|HS{apkik+vp2RzvD(DTi)0@cr(`)O}Bl8wk#=Wpu8eqR=H zu)|u+j6u+2|FW_qp!l@{>~NZn97&46NbC(D4SyFI)Qz0Cjt=L_Zr6qS=aalM=&c;8 z6Oj5Vn6=ydhN*^f@SY*px+;OONRx2KkgZkP#2=57Y+2hOLmghkbaKa=5x{|gc?=ta zPL56@sc_7+bD7rD{%H5eAXg zP^;u;!HM(mpBNFMUsi@2Z~-|Ior#-1h)@SzutPsVg=y@sYR(! zVUejF*$fkpgSr+KmhQwi|FK4T1m?nyMwehMj*Wl&ok15$6|xlgfnoN`;L}PIZ>40p zrxSOhZdVIt&1qb_zT;rV>5=P^@TGX!c|6m49!QyR5%ZZ#snlY2tCr_y_pd(AplWBy zcq7bS^^)@bMT$_QX7eXjXjNak`t@0hC;bkTb!3#6%N71wj)gm(7Gk%2#={i*j#zi{ zX&h0zwa)i-d%4dD54pzWtEHgHYTNs~6dEzz_75VNIud3JK@ZYOx?SG;GIo-k)V{g) zIekli2OkpHVpiuRvi16m<0ABBy}LZe>4@awp}oGqqfxd`IU%`b-NjSYO(WA z@`HDcA!l?i$66nmwVAs_a&5{r5)Mx)L+_ph*@?WGlZnzGCsVME?qo=b_WJSlvA?10 z`rGnu4F8(^9mWStw4L>N>95@qt$$B#TKEk=TLuYY8oV&y%Y@RO_22o3Nx1O%Kucyc zUYBpgs{bSqNqs0r{qoemlS@}DNvvP=>XMOoWxnYPg$8QGua*(w$>ypPk9*4TBk#9R4 z!LomU4T{UtsZy?2d9sDS^GspXnDA0KOBH0iLtE)cKLTwE`;ugA73UPJgxWPTyx`oMJEr_wVU91M6Gdxu^>D8$qI2jvpM)KVJDBO+ z?$;H_`evY`XIA_fy%{jto|shS7EJj`{8qi!quE&|e*?uLX<3``;i`Dn@h|&7f@wcz zoOaotFHrUG-l1UCx4uj-v1H49jm&kNz~v_uZ5{Z%jk*m1C_%sP^(`Mu+P%S8Olyjg zB^0+O=r|x)Vkuv&1&h*Nk{03VFW+I#r;pRFoerFon5kQ}^jp5($J(7u>yyhn#(JulXAqLlmFoq&z z6J~o)W$S4|>eFzz9Q9e31If*XEC#ac`NImHHhDqrvf%=YWn(c!!9O>{4sgJ2%$Jd! zH*;O!7x8C%7gzcYvLG#qlFrQDNB6dW(T=kn{Nc+zvB$IBYTt@l_YPJU(MYNJOR*Xy zW$F&Hm_@N!VR*>^EAiW+!b7l~#}3VCNN|neoJNTp`k8S{_8tBH7XiJizkE}Jh9$^W zc_4L55=mCUfvph7;pn%QyVAOBveAXf)K|_T4R$+}5qmsV9dYabaL0A?`eBff zjiilsgYiUo+pw9IxHEUFi=@79CD_S$PSA!!Zuq}F&9n!uNtD566FW$<9*=CNG7yhT zXIT}=BRb|4=TFu>@yixld$)qEXkR8A6&6W3%ecihL=Q-a+I{^c&n9?n#Mp1LIv3-W z{8Oudb(X0XE}5c7+b{o2G1q4&d;Osf!= z%QY`8|6lAY4E@!@`rX%i?7>7q@N^3F|nH z<$&Wf49`D2vI1DRuppK%C?A z^ktd9KlMm(`Y;+_BWVcmTmhLIGo&DPc)!k^RR}4-vB>sQU{$GSb+S|)p zX8YXE3nT}HFIR`gh0E$qHZ<$loShWreffroJV8eUM&Ao4fe8}r#(w?-yxJeFni88& z>aPCn3?H*)?@z4iPkwhdY!i-jsp!mTwdXoG?@CXNvdUhF-fNqQCab0zUOw3uxkz^XYVyP~8nsw!s@mw8Z^IG@P4lvc)%DnLb_Hvq>ndddyGPmY?yw=xn zSIVrMo3}KxCQsdFf7rejZ1i%bsd{!G;iaRU4Ryz>-}rWhO+0;{&b$ve`t`CS-KZn&#%hVwR+%EO0($rt4$(*~_RSJELitsV4@(?_;aGnT~q zK=kSRY~$7Ut$P;!-7LGW_IL8nX9{nqWxY!9DsCC1sP>}`^SkfC?TR;}wI|~t%lS{P zV`QcB2_n;SU?DMqG+58qkF4T9kRCl9^M`OE1MZ+jQ{MV?TF9$JA0{3k3#a$=(dOWh z$fIQWj-(9hKW!!2udKiWP(eJcHSbc+;Zie2FGF9}x&m^vJ03%4eD4i;w5S`%Hp|&c zpbE54Jy+f{QS_e^>g-A#*WzOm}&dpWznk#I*;2(Ec0dL$PyIf!PkiZJq zPfUUVlyLdG@-f>T|6_e0Vg_j@1OzH_ThO>2^}(s@3a#&tcgRHv-%H(lsEF0KFyUvP ziyEhZ-FjrImPa`G@+={K$|#oM+i>iSLiW8CA1%)gMTK( z-st;8b;fI<_`P0qD~3=3CAfsx(l{0_UHpSys%Y*;I4BdwGb>XcILGf*BbUD5QFwJ2 zOxylW_aK{=WUA5f^aAYIC@>-`MwKjFHQz!FMiQM}zPF(JzSULFeq?wj${*C|SE|6e zvMY{|`541nFW?Q|%m=^F^RNDp8Esg@>i+edD3xfdcmrwJZG{XNqjb1-la*=}0@> zA#L3s$lu4Ls>_Z(M7wXldbfSKJhrhX;o9QvT?W4C-HD`Jwx{3|{`p*p;*BN=s~O_v zJ}8S6=5iBE+s-u}El;-hZ^SJeO(<8R>U;LnxP(hFq`#iiAdgyb!OE6UY{EgSrgWrit3Mbsr?yi7JG-pXKj+x@+oYMWNYq=8 ze8H6DaZXgbzlam|$ zIH+N|Q$P4g*dWEVra39)Vs7bOJKdkGSEq8tBRw5^w*yzDOc(=PQ{M zT73SO?(2j*pvzD1lkvNmW9`uBv2<6Rh}qH+#x{(c-Uhnzs>`8l`AXwRK8=H1{C$kL z<%8{EXzG!|)By2Hj=uD9(gQK-$TN3^k17ZgV@ANXpfuW-^hQ}{WAfS~+1#tf^em%5 zM$qxZbIIiWHnZ*`W|%#ZPgExPyQC*3?XJV9 zFQGM&#_<(q;h)|RO%;mmX9|=SuGE6{FBGnIc-;}~W{kj2+q-DJZ#C}1kg?*!xTEaM zNrq5V&yl&cX84QWzbgL$c^IrSTcMxeFc)+KQ%wXXY>ElC^q59cw)XZVh~nA#kuF|_ zIj?2&EP9S@A=Zu}lEQ*=IbuyDu({|pP$3y{zl0|zCYXewqTW4_h=uGr${`0t&Ob2& zKGSt{e8bnD0x)z*S!LCyrAkmwh8!_cbG8{#K;g) z@iN#il#MS)g|hWOP4q9)^puQg_p_95?icbNcK1%5TFF_V@af63v@|I}Wk&q7_1H3L zz~i!$6;(phf9_UA)z6D~^=e->aLOEc5x_lzUw}dWTArHR5vSkAG$UGi+d1dd*w}=D zsm&8lV^4>b@<*4E6QRbZFI}YyLtzvMHPYytn*Yv`t1MbW7g>6~hMahkA{^!A8hQUD6S^5P{(aOnwdtxUg(aDvLw6>YR+0|_v+{7QN z5S4x!$%SyeY2pd;70i9i;7*BcbaAj_=`41rPV1E-ltxJyiC}?@qz!-L-#zw{hu`Ee zmsr-fiwl7nx@}STSBU0^+gi9$V~5&S>|}d_Z2FWfvoze8U;!<+N+C8-GypKxouhn60H;!eXk&Upar8wXBiG4g8%hVn%$SiPd6 z_%A0cfz9v4E3pWD`gv3nj88ADMsXns68Q~ida3iBK86y|xD#gu0-yOy+2Q$WMAN4>`H6vCT>E{+dQ8nAE#H{zQD$!_%B)vl9O(TOxeU&`x z?54eg{r8SF9CJn1Ey~7EzV_apV9iiyJb0|Tp#z?8!k?9u={JdP#EJ zrj_B;Jx~E8h(A)lniNGxhMoS+&BeOnV@(Df8Air)>-LX80)Wf;!vH?%Crbj$p>7Mk z=!y$NlgkU#*P+7SpM};Q(o%)ea*4%aVy91j@qQ_UeX8dB=rQ=)0`I~7#S`7Uif*Y#2wb@v`X3_jZ7 zssqm@+l63!I@)X}kKXKQ%JrVtFf0S{Wh6#bd^(wE$egk1hd<+icoS-#-mTszTS^~z zelkrpzNXXfxG7`wp;C%oJKH@%a%1 zyxRF(hL&AL{xVzFD}P=l5$G=mg;K$~c8R0~}*uq9re(9oU3lqr}% zENCr4Qoy-VDZgr8nh4`J>=INZ?|u8Qiwt})NhjAMl3rQ7(C;O<=vcfRuiJg|zf#E> zNT)uR_f(++OuUub+$8zTr)GwzTlDcPnrp3L02k_8n@O>I?kD}Sd!yD0KFD05d-%tC!j?Bkc%t$=CHs@El+Wc~!Z+3Oog8CmBL24vrNKY93GJq;yj z=SAGd`}y}xRs$u}>$rcPmQnNpLu{)!cRPWyN;E8K)O^87P|j3q$s7sG56JanQ!&j5C`oYO|mv0 zS~D1Tl&D^woZ5at3x47`UFqD=faKkH(CHj;qX*px#-1Y+)DpKk3SqxvO)m!zrWX1y zLWC#z?fnDCj(dm#>RdT3-1hZHi6ZP0K)D=^CU&b7wrELyGCdBIn;=)lsV)3yl2*g9|Ve^d!LN9!9~NC{i&~6 zXde)NiQq2#!(4!?+^s@lQi$C^u*~ZLOBkPE6vd_BC$7PD5|J7|kOs+r`_&&@M%9Rd z=dLwglb$MXH&YUPQBoMx`U+*Fp`*A0K?G9A{(@X5pl#!4w7X)LA0H_KV&cH}L0`B0 z7uCB#uPd5euSXDM#EB5 zUB|^^aOQ7dVVO1`fJ|@U-$Pa}R8z;b%@m`$v-O?lEBd!qHqv&%MgjY4Vp{R;WAH|C! za{HD@hpb795a%YU zW|p$%nK;fmQZ9B{P>#9aV5oo-F?V#8iYZh73P%*i4>|KFPSmm!ehDvRZs1Ft0as%j zU%L2ecz{z20Sf!O-HTz9B8(+PQH^9s3nrCK&*eb z4aAf?-B9u14m-s++*I=l8tt_YE#pC{uU8cMckPoN*z;(lR+^*CO6Vh+ZBW=kasjYeh(Yhoo?NqB_WDsUtagEge~nl2;PdQL*7`5%auz3ikhAqW(KF zqbd57WbRL4ujGLJ`KtIulgO_9+N7cD`s~qg!&Y2!;_0aY?G1w_`C6dE?Ee8ALF2x{ z{~xt_ne!hyS(RcPrd*csIR>i+;%|+|l<;}MMd%xlxPOARDJ%ft{$UM&LuURk@t0gJ zl!uFqziW4^^))YDxd`({-z|XCr%$T@=m72^cNGL?*ePo*$bhH?4h|+nV++XR0O4aO z?GrV*(x1x}exRIu6c&Zk%%j^T(Y`?jU2R6b`5h2}n}P;*DT2iU{9GyLpN4&PWM{|< z2x*rb2NmS+Gh1Y!(*~b$Bz4Lhsr>a_0C*{8451M4peMRS0Z!-mDgAQ&e3uOO#IsW)ABdCFF+{$?A=l$ z5=^D+w-5w?m(X8*?rE48`dkoB@X#6z7(=oE&Lw`FoFZoY*;uvJd9;mHAjXom}ev%m=%Ii7T*AYlPu zg?p!r!z)%X22gRSg_8aMJ~5!IVrl5$TH-dDD1?08f8jgpfeCIPc0(qEzm!=&fH2+g z*Bqs_e@YpY<`@9|27nSB=7oU>fWd12h#>`mJGTHZ6X?Q4tn*|ur+`Fs2S}g24|MvR zX%~OR6>GAl zh=YiPyP#oa!FM-s!w_2{`l9e{$#Q=Z*HcJeWH$%odF<2{W61sFvwvK0oXDSJD!dO5 zuNi#ZB)l*Vz$G^T^WTZ=P5N*kWk0{tZ622$le76tULgO0I>glY6}2A==Na^pMCul z=p6|QAhd;rlC?pY`QNs`QzYoGK07}PU?5Nd&=JCe?y4f_p*j%k1wbTGX!wVDiM4YR z2!MmZ{-3uDko>u4up1Y^xq!S@T$aMWKSHgTvOFpp?oR|7gQic!5Ho(Nw1t-4BR5Ko7=<|fUAgFTOLb9xJFnA z-V&m5lFbqgj#JWesGMXnmNotg!XW7qmM%&J2;2jgH2%;Rqlzx5kgh4nmhaa+Ki4(c zP+tsR@XtL}@1Kjm6X9a==Z`u5WtCb1JUUk?QY|Zbj!EfgzNa9~>3UrD!BC{iNEZ-k z|Dkx-c+ zXbBR{SHPcxYsGN(&k`%F;eMhQ8NxPn(Xji2;~S1xA(B)`VRZFkI3p-lB=zTxnzJiu zf#+EYj-T4iA4dnneOwuBKDX`d4&6L3955kCIBm^8kau`5r^uiLTY|Od=k&P9# zZ0WMHS-Y(_i@Y=tf3aI)c$&^mvW{uoB|GabmR55>^ukW;4 zBM1wk=ILOfRpJ)KIXv+bITlM%fi(G;%QP$`mm3CX2sc^DQo4Yuko}ShBPWIobv(0p zy~-7zi2f?<2jNFVV{%0+!1V++Bj65p6RUmcF1PbY(Bm`nvk|+d1KNFcX#a2eWZk|~{Nr%9mA;j1QJQe_AP#wW| zzPoxrCtBC%)}NM2>$S>l}3^%EfJY?|JW+Af zxzPM_1#xT!wmh7OhA`w~#r5EWr8zt=W+V0tu25H&;|Nx0o00&#sIni27!gtg>Eq8b=V3JFNZvy zhEs{!CK)NVB5)_%X&wnwV{pz6@f7fzUejs)w*PR1V6h2PH+Cc4au zl6?O~xVEbkLM#xGnA$b_a#C8FE2^&z>r%f@-h=$R8j5PhjOU zkXb+@s;@snq8H^KO4$z}5-+Ecf@o35ya_)ZcKvu^M?D811b~C)FH1rQ0Tkj7RbyJo z=Muh46Mt{@KMVxlbZqAdy02pbNdB<{E(3uWi~!i!*f`52p}VsHHv6NFFNa&Qv7?ZC zfsA(pc{1{(0+n#=SMjCtdGtI?qac@X9SHt-CbkMPECwS0PMtb+w(FA6E(XvN;B5m(0K&4BhuS!xdI+d_cY>kLR<7~_u=371?j{mU zP%v%g3Zl8hKMX-wxLHG0Bax;Ymw2lLifliiP6&la3$@f=AXp&~HEUo$x+f1gxCs+) zXq)sM8=H*w<xJEvnwbBf+=28vOuiF_h*IM%tnhedF@>1NB`XCSr3TOR|{b17*rMz zR|M_!3lN$YOtN+p?~jG(hvxeA7UZa5NL|1^TCK}~^utF2mr3?MdoKFrE-%PElD=dq zAmx{Y1QU~ur4n3je^JD0pPA;$KMDWR7oop^bpHfG02?!1vZ<9WBI#(RmHsjn1}D%i0P0n4U=o{ShfP1 zy{LJvz&3nKh)OK;hh0DH|L0CzWl4d0 zQ5GUrAeAmK@6rpgkRSjc{jG%&(NF-)w=Y1S2Zh1W3Sqz)WEyC97J%0}Hsj@FqD>@% z6)qkwWJaZYEC1Gd7lJ8#)tfNt7Q22#KL8g?fW+k>Edf^P^FnGI0IsU&l3H@32a?Wg zJt6y9>LXw*jl?AcfDk^R^Ov*+$Q@*vbRk~P9m&>=yKnNP({V`Xp)`h(E*m7#WiJSz z6Tf>I(;sbG7swHO;Uo3lDl0;LrdUyfV;yXLl%cMV zv;x=-l+*x{f#9+Po4aAShcf@Qk@Tb62Z;PRJ`=3~>HbM8gvNM7bp6=mlaqf`ay+_l z0rk}a7;+_0#Lz4N_pp7f{Q2Y1>S5SEY^49-2M6y*25$v8A1>FrK|&@M4ZCrGCpMl@ z26|~FC7VL97+Bj5SwNUlNiKa(q;eW`MKz`?*3vzt6ejAK9E6s4CCNXgS&ASq5lV6t zTN5t0?Bfx>Dr!XnpbTlCZpg?w9)Ln&L>yp()dkbf}4)N8}1|FD)h+Ut#CE5tH;Xn3+(8!A08_LUw!r|m=`z|w5JxppvfOGGz;Kdm*pT< z<)~nrLiEi#Vz3ZODf5f$3EFFR1!u5$dT}qLcPB&w&x5>H{IL*S6nsryha|->k+V1| zPa*}S_B(nmCWDFp>v4Gqh-~zeE_~YHwct5|7 z0bt7Khz5_L%pe%C1IRs}C71qh{h;zjXr>jU)<{KJFr^rQt0Z?&6{}uaa)Ts7fWH}j z4i%N)r($p>m|yJbV$Hb<8AjE}mwTv2BWM&`3u&KG2sC~0+$R41*%DylhcI=WzbeiK zvO&9#0b%L(;do81`A32Wn>c@fN4@jEQRobPsRyJ2V3)uZLA&Y)fG(gAfCZBfS^Muk zP%(_#94r90T!pL>uRBW3RydF3X(O{kXiRV~(Jq$B+OKgPrbz2{L{YK-$3n;?b)9UD zi$8b*^MkO*&Q2h%7yZ#yk}XnE22B+^feDQ@p1=?9xCE3A>pnC<4v`Ud`r^TH3PV9* z5dm<*ahWtxDg|Ac)G`RJ6I;fNpGwx^i9KRMfNbTof)6f7Kvn}TpX#2O47gLDBQazEs}fPvsApLqhtt2)z2->dtUc9YyaUXu8iJf>Zmgz$}R z?jJ5?Vw*VT;O41fCifli3Toj-DFe|f*yY%h`^R~^WjsP?y0QbB7Y5OX97nNg(;zMI zP>Mb^wu%MvDs}@A5mQi@(?5-@S3!RMB^TFN@`KBS{t6~o88I8D5}J3J*4-J=v=SYm zAoaTkHGtf5Y!M_DKyVw8Fbvlo1p#C$ajlUTJ`k>JL-}PZgb=%RA~{R<4{7>|5a1Hf zk=!er62FWqMC-x|*O&a>Y~$BvyjkmH!809|gzj5K&_%%DEP$X1btC{7b`xuPi;0Zf zI3~Do3}jlp5pEotYX1(=5{YYgro|)|E*I}`DcmrST=1-*xed?TE$)2G?QDm6FD> z3JTPmmz=PO`ae0`n1p4|Us3xe40tXwge;{?1|pP?QxJY3GNVj#mp0M-Ltr^C0>@gv z93xozH3Evc0FeL69O=U)c0=S&`v2Fex%3APHPz_y9IPP*;F_a~JW76H~P81o(% zn9-LwfUs!SVBi>(0I0Q>vrPJ3RRqP(U{8JZ$w^!fsTGj3y3m*$#PEeI%(%>ON?mlU z2z4grgIJZfgL#SHT_X>(PTTexG`UY$gXgmLlu_eq&J=kpg3nS3ArP$rkU>k3?jLR& zUaJ7ETgg46ZO9~|64_W10tW+|t=Sglgj)zwy4AMRT0KUp;6h5*)fGsPKBZ5_>7%aZBp)NcPeS2m`hNWC7r+Aq>(ipLh*`XsyLtY0evHDm3$S0ZApVZvwy$yb>s4&@P}Z zz+(cK7R`GWcsGnc1HVWiUpy#~EEM>@*ri~=B*RTc#5e-4AZ|73I0%Tf0h;u>s-m+gk{XAt5 z_;N>s!t^Z_bm(<}5Q7W?Bf1I%A6^~zqq8l`re!{EXV;FLPqKURQzYyj7bWFbq3tvI zbIPb?sSwZNk6{f4pJ7pWvLS&J`_lTq6%9u3Pi5pugdQ46BM1UPAP^5B|GD4KMV_7J zS^$^GHXIMY@@{qn95nWp6VWho^O7fj?%QCwAO?Y}K*F5rS;_&=gAU_c&J9Y5Q$MZ3SGSelt6ZzF7cL@w5Z41d14x0Kjh7ToJS@tRBR^0Q9142JSrx z>Joqqpn|WV;`xx-+IOwzN{i%e@T5m8!@6*Oh#Ee3NHXGF01#eQx}M*;N_)(L?=@OL zOh>KA<_UQJ7MrCN2Mf?czce@!HCkF$+M37ki0n0@= z7Z8mhK*4S!q@*WT(eX=U`^b2JbQQH#1vTt~BX<}JgRm}hrN}x&TxxwC@SsfKVx|m3lrAxs9$Illt<56%giqfR>Ljf&4iL3gQ4MlgOQ6 zY>-t}^hNNWBDp7jd=zBAr6|LmT~wQ-;KUjYxyZmBGSi$4Tnu7oBWRO8Te*(UjBNDA}H4b>Kp99D}f>g zB>+yHIeDX}haqmd}CfP^M zv320HgDCYA@}PQ2){5*`V8P~u0a6e^AS!6RstpDalMxqj3sGoWQjKRm-1@p~=5{w5ATZqVt1&2yyf3<$ zq%y0OPge*EYvVaY$GG6)3E4&#+R{ED)7~M`_EW7t2vn){(@(EK{@g~nKmSgXuQY$R zH*2$!^+Ca8VnqR696oAyAlA0LK-M! zFHLrR`67sbE@Ya%B=@*krh7_35SN24Z{karTMLHB)tE^BMhK(4-SK`5fCxYb81a(J zb+kI3E^5D4T%-LPvdOc=rWNGMC|oTdVIfe{U7rNZ_@UZKPWwmq4^;>CoyV5^c)}oh z=?d}>q)MNt{R<6UYUEPbiw7p;63ZC*AfRCZ$a4x;P_E@C7K0$~w%~7^N+AIW;fHTS zZj)93*yNs?_tE&;=%*m9*tq$bITnOttE&$JK*SstFL2iq+ z`swX(8aikFn2eB##KS4a#{i-;hWGS;1L23b1Fg4F5QO6_AK9YSHAr3V$&vSOMjBK+V9t`iPiF-buBe^28VagmL{SUs4b1nQ_|l1>Wy$4G!lKpn zV?(>cw_{=(gPV-^rRCtt0pZdSf(C?3C?|dh?TDJbWNCKyNWzz~0sxx{h1jm-hm_qT ze;#2a$@G9-H6t2S-t}c5jlW7#Knot)KwO%xpLDj$rZoCi+&>cn zh6HK&9^!LkK_AH1+QbEvxPrub=?;p|0|MzwH;zq6Tv!9PZ5rDn_io&i+!eBi*7h|@ z&<_zOm*!{zz(i((Z#UGq3Fr3PqvlUXI?~N-1IwkQiTsUF-a)#MQhhENUx4Z+f2PAS8Cf4TR5seSJMF*Mi^;upk&}7Lc3osvsO%0ZstWn-|}m z^yTsVX_6N**aE^`!+-f0MC@rR;sE@f5ivtX4kx*X!u8;J>(reZh&BrDWL5B zNt%<9e;|Att8OO3QnWD`a&ju}3Nj%R&&}5p9mJr`LXgJ`0RYtQ_+`Z#3UVjz8(l+E zAOMJ+GnF9yW;O--D(5*W*ltz?W%3s;wRb%9&_ipmAQ+qgkQG6@!l612kkRGXH^tgG zEF-NDM~O~D?yreC{Qx0NG!_PxL1D`B@oWg9Z!w*T-^G~u;;SOC+eTiOVPc!7JyMYa z$%02(08ul{o=58%vR*{1{r!85*4l!$R8g#1?wJ6T?G!BoW8{?ea<-NrTrZBO)wBed zyt$3xnbYBk*vf=JI3kd3DgdPRF9l9Q_#jB%+T>Rf_kp-xC>d6eyRj{$U@S`IJ@&&(OV@1ocLZCsoSq_iTz{9(j{bmh0f zypjJ*v@oP>Y7##P0!|z({`!2+CJJDa-Ad5@d1~ow;)Eo;D#gEg0QAGuz-E0gK>coZdl71GXN(EhjG(TFtAGdfGi^U zBL?XL;(2Sk&_B=upn5>^y-HY5tTViy3ECsSv`GMwPe$YpL^An#JlC4IEh@LERtl;1 zANCVI8)Geudt%-S;P#1EpV}X67sJ{+q#e@oXD|-(0a`&LRtPuR7J4Joe6#`L{o*i| zobKAH{oC{&A!>6F$(l*uCXEc1l=u!z+imiN!r_9Vt<400rOT$v(6*k=6e*)!(lpt0OHzA)f*5-*`6JbL8vTcy7s8Tq(lug)>~HB18tL9Wuxs#Q@WF zAX!0{(bYm130D{2k!)`0xeVeud@g>1g0zFM5hRqkn;Jrh1c4PlFq@IR%^y;O{B6+A z-R~)g4@eY%TxRpS$%0@!u=!n71byvmU;E2%d)wRIit~5fb=S!{K5(?&?mpm4#GLf) zvA6R&T0V)(^>ilTQSbXe{rS1ieC9JBgayW6(?AhjrGmP05cG25PqE^cvhjvwuUAl% ztXvD>wWL1@(FBbhfuB1CWmRDm$LsxxQMy4JQSyqZmLK5iGl-Xcx%r9h+DH z(NzVptuXHS$Y+pJjwgMSYOgeajqeOe4jQeS`a zJpsg$(DI%$B2P5^G4l<=7eXVfhbX*~#~FoAf^1P*i`iL{?UUxylbdXf?W7`T{mifD zbz2R_o;-Q-=z#+Vj@F9gNnEbad6Ku)*EoIY(xtT;gYV@#3kD|uPVGWP(9j#0-&K0S zJ#6~!8L0`<3J{AlmuO(w@qS|CwxHDm$c|)?9G0$4Ur}PQBD+pSnyrzJ6VWcPad<^O z#>OdkE@LuukH{pq(TYgEZ0^M6XtqOme#XYEps3xl1rY!GIX~Q`v;Z1}nrPpl0m*Xi z>*u`;->Zq|jn71qu_Sr`fY`G)YWduTF%|>2RX(G9e#`^TiF@2K3$Pf=$jN`gb?92G zVO+jE|NQ)#pl^U}g2){|Yp})FxLo5Jzg52AkhpVVCoq8ETPN*Zs_h1Zw>R4cAqz-`QN^W$Krn86-l7n- zgz&{ZR!jP9i9r_ zdE6@-ZGA^>Oz;qU6(C|PAQEVMOX(;hoH2Y#JME5zfRMzO2!d#30F%FTyNEMY7NW*$ zg)mI^C!!7alt>{E-z;VRq~sVFG8aCf9fGvOJ&0e7bn{4J4_CE9AWryw*)eo%VJyju zuf9R-Cfg@H%#INRHa;lAGhdr;XE0fdN3k;)qyVsfD7KSb34r4_iNIEPrwvG-?O06N z+}z!^yusq_HF0y`v;u_tg~+8KmS>^BTADH9^z6>D(XY)JMKk~lue(CL@}4)mf1)7$1++KlHI`wFL;SfjpzAlmo_T1U(#4&;?&_OKh=u*NSf2SNPu zCAO6(?}FV(O#CDSq~P(XLpEj^(M&S7foa}o@)*QI4BF;TB|hiq!>4=Um_y<^lGn6} zpomg4XEgB)pecW28%)#f0~vyr50JWo#B#Wo97^($uu36A*evsn=kK>I^x20wGq{1f8WNMfc z0bT=Tzc;yvn7CS`GCK9nDLnGWkiS|0) zB(QBHXN{CJG;4{YA_H41)X~N{(u?Fi_T&MGsZ49-)q)oju%|4DAK`L}+PqD#VbgR^ z$lH~iBbjNo*=B7?w?d{ewAO8suAsJGapN3GGc1TavDr&a zZXY@|#}oMUK?zM6$*1oVWE9i91~(5@sYKk z-wFjgzp(iJWN&B4h@aNRXAKFAY^i0hk%iRq5Z6kCL~KV}wo<(LNeJIUyq#>Tf$0(2G%!12TFTlJY-|<;{^D3reutDIiD}t`B(#T+}u-PfZZ`&6(BPY_g&;qAgI`CjG zmU8kfB$|KJ!Z~gM!l)2*Wus*fTt^%L#?e?XB~%81aa6;Cy+S7XwHrZV6WSfhTZBIV z2|d}i=VIwO0|a-FJb{Hwcx307Uyrp-616hBCGN~adRm)n{CSEgWCQ4c5FWzcA5P5a z!?w|m#=T{a0j6pU>56gM|D@kuDl8`LnTwXVYMvdzZ#v|YhB?Htjg!b5!TupPm8 zzOz8^O(!JJgVZ?3(*DGzjo+9AAo-OOWCJnE3LyZD3*_73XOaZU-6pC3i{cTXP@H(R zgU?^Mf!GodR)BjH+;4yb&(KUnjB?9lB%RLN7E*5pl5IPGiti*nzfFX6F0hR_Ni6@I zP9YjJNub-d2=d^i6WYF!ZMNC`xW?Pb+Fz(BiDf-*qKf;QKHrJ=;Yo0s*j?x_yqHHC9?rjXw z8iiU?mC0r;-YFflQUQ zOy-Ss&>j$`dtuTK7Dgt3_{rPM3Xm2_>%GJ)erY?Nz@|dJ#S?cjW7e?Bnr#W^joY~|fIq~9L0IA#0vWB4 z6+kbaPd61=Kn|k+0rx4$?$u)5Uwck=a&!&Gw(`Y|@J)1b2c(yaay0L-hVF4)SgF)I=r$jHn z?n**q7LZ9^U>OYN6wA%G#*X>SdTh&D+uR%|Gq}$9QWla?s(2$UhhEP}>@>D*Rmt^! z8?M7a)hin7Hhd~E&t%BQ0*DxCJf~<}vVS;EvB7ms_qN9~%Q_oc5tmbo)&DhCx`=GcL!ORHm*-~zXhqPS$6y5j zR|Lg=0A1j?Oao0ClFqd4lemj*%Z6#NGwe&-O~O{mruOqC(M;Y5E*NaXVC$A@43WTK zfxvNqARy=r6~uZ&MQm3Z0+xLh#Pu^WZ}_1tv|0zOZHvX0c?)fiAdys!jV=4IzyvF* zfy&)tTf%q_kO`d`A-~R9_D)EC%zF8tVjvo}&^muyA)eKhEAt-}OnU`Fz@ zltSXXoqX8%4YLRVGih~TqlPumBsj4?XD!motsLPicL_P4k6%XLenDM`xucjIl}vUd z3(-dwNTPp&$u#^l5Df`=+cD~HGteszobbgYq&)7sXtFz50x(9hj#(uIg`FUXVEid2 zt)Da>KGy$ID#$H*6B@ zCU-FH^EnsgyYWC`4fjxkEz+QH2xf|aZdLj1RS57_Vt!2UHw17YtoN6+Nn6sC$gmP@ z-tN5lHaiAj%(I>G3uo35soF$U$Id0d&<5z+Y1=q&}^>zR3Ne|NmH!6W?zZ4(4gt(769*` zSOI*l)XE5tiIzDfG)W63&AZjv#;4%pZT4K#Q%wFo>;#vLZFx?uuv5NP(=s=1$&9-~ zG7U}Qdj*@_SxWxtb~{EW$PE?d}DIfyzKd=eDf#-J?#Sq`G>>YyIe$-A+8s|L=j z)7&_T{N?$WEKJzXOgyed=?{MsO&6k!^BFNMm14LM9Ca8=Mh|Orm1VEL96*LN%rSvr zfV3U?LbASbz=RcJzK>*ezE9h-Z~R09VmzA9$310QO-qms`<1mG!VQq7_0?QyMB@}0lGkl1GJ%4yBxFMrZgUE^;0F&Lf{vg9UT*SkM z+(DMR%T`wGW5g(17Ni@Hf0|6(f)00r;gHoz8eDxBH)BeYjKMe?z3xa&VxPQyJTGmBhL7KVaZzr-v>Z9ia zBk6?OrhP&TAeqMPaUV(k=?eY_qD}Gn+jRf@(~u(BmzRG{ZOgW8#pLhTw9cE>WiV|= zwZM*BXD9BLwAR8l-KhT9n~&WBuX@E_g?U0#L3b8|eVRAiaKjqUcNGITadQ>~W`%Al zL9`q+24?EAX36H)8+b-T^`S zt}zfw^~imi4HIqzYZ9Wj$sXM{bQO(#WT0JtD%65-&M?y-_gKy z-2VJK;eYsVe-gR?yMXFmfib2ZkA zwux(IO=v!IlRXA#TQ;!)SxT?81dKRvY`}dC!nc|Pdh=gb`;jdYXEw}uOrx_{`%ds( z-}e3R+E>4x227eiM8=p3fE~ahxPZC~04>&hg>%mEu@iiNE8Mp5eR7&pr#c7 zkc$r9lQma)H#TWXI&YgR#SK`<29`-4l1VH8+KC3Ep(#WmZbG{ti5H}V-?AJo(R}hO zXyWZhCTF>p-#ELYj1deMAPxw22zbZA#;#aL;-6CwI*)dcH@mF zTyOS+j^I7fOOhV~G!1lTF=zpR;{x-1R|VlP5d7p*U*Q%&PG)V~0AlaZUTBd4#18Em zqtNgTG&KEj)8+*-whs3ouNl{wmirisoIpYL_oem-_m4lXiNp`Wa!5!&`#{Ecc0zOV zZN{XMxba9#%NJvFiPHF@&A2bV%@P<({wehzs|g!%!wtthp&uk-uRloUOzNwoxqI!s zvr-JZj@tFBZlG;q=mMbgil9uo>6(oEp+&RK7{9fpQmf9cXIk4~#%lg%%r$b&n_G&O zO(pIl*(%&1!t0X~zVvyu9n9x8(d`rJ20=>JcvS47mRZP1dfD+Pg@P2$crNz|2vcYKC{pL5?vgZ%SGS|JZi8f*>1 z2eJZtVyCd2-6O3>&HCU0?>0e~%8g9qP6PMa`6_AXxDCNm#eAR@LAQ^E$O1xOCQujt z!Be;20e|?1zZdJaWQh79jIjtN2`nah+K+{Y$+dh)$=;Z;RzRD!%35(A2sU)Fbi7{M zdOztxT){zBe;#lFQ$I*NM1g4K)%iLQf}nxO6XLgt5RjHt^NEUULdx|wVM%Ypfz3$h z=o`Q3CQsP7?xth65TWlaw~AtKVel>>p6@CU{Ng|N4K;tfCvi1Ir7{LPrJ@NCY1ocE zb57Lln!G3bJRQ`#aCnUj5GN z6;k`BsUvdhiTq|7r(w0$zB#aoz^ThRkb zcaQsg_Q5}brh}O0ntJ{$gc^yysnfEnE42bz1O#yRZWBE%`2}p2!U~X$KqcBa!TXc$ zDb($x;eJd2(;^bR=1mzXwR;809QU~C*omN>A3EUoVN$>8Ms=&~Wo&G0g!%gYSO5Pu zu@GsXh^{(=AzuH(KMHTZ|Ht6crSmOT0JLh*t!|V6)0hj|ze!y?Zkr(fFmK2TAlBz? znfjkL3P?N8Ht~QhNlb%X{<7J$?!=9^`sq!#y1o*JUC#KCIKLW+p3@DF4K^>MSU>g+U8|`UkM~=%bH9*En_Zh49+H`6KY&_x@Z%lg^RENTEfc7L0Gi zG>u1^hQ{BP3d(!R?ad3ND!LWN++6#>(UFF}a13S!A9?*bUXwfG_|3NlLO<-LM?j(I z0;v77tG9Ol{5mMMjYY5kTt(2XVgQWq{;t0XmoHs_fAz2b1+7W_=WSDfHVYtMO05Cb z?g5$^K2rPVWlzrN@AjJajly-ZN}Yh*a=qU9(d!o7q}sS*0JwPZVwkU8zyAyr+lGOG z=quZgTlZ2k^dLg&U^vBy!J4#MR5H1tu7J9xlRswzc_wY9kF}gdDzBo zl|$-QQ79Oa{L%McyMn$!{r@|I!3%&o2Jn%3axeA}l*2?S6pCR36FV+lx)d^hko@cS z{9CmE+|FU}F#xUz+U2NV3WZ`m!1s7G8o{+|*IdR==#;4BKNl=a8mI~Yg`!{Jv7j+Q z1E-v-%?TTF%KMB-=J;T31-#+5+ip|0&kkeo0)Q)mssK8U{XesmfALJ;0PvhN$PXNS*qxJmgd*$YoDv9r|anlHPAbM zEJ6%mt?P=Q3dL?h68S7{mE9n6TuJe{vsks4_gP+EcH7jK-w!O51<+MRP=#W<*hRO> zSP0_AsUvLE$m@6NEEitGeQeaKVr4Jhm69YhK96-@ECb?C1iOA1#m0Yrp z*J%C`UWZd9as^@$1VAz>m_o4?%;Fzcw~AuXFn9s5v9WQMOG0;D4@l8349%?~iM(FM zJa?ysE0HU@!a_t(AAR)E=jzGPef##okt140Vd#)Vo@?OhA6F=L4vP{5#(^R3#V+Gr z4GyoE4t1+26#d3R2!Q$p{^k0my%))&*1X{0!GoaK8EmFECvTfKkqhER!d@HaR#75X zC?;beROK^g&K#{@^fUGBQPlo#xZwu10y1dYp+cd^u`n$8*kg~qwI+?9#rfSX4Lwf` z$*n?Dw~Xsq8&@J%DEfhgQj@tfG|unV05P*blCt*ZR45d?g@qCT=nAT}|3Ah7VsIII z1*0W^V+G6u>Q+%G6hp?sIm&AxfTM$bgoOYCtpQ9CMb}VUY+%;joV;BgGbdQ+%G6nhy9ohpO7=CD@we!TD-{=;Sq_F4ijTv1B$f8sSs zVaIZ{57pU|_U(;pZDwB$yd(yAdl^@&)6k>J#Q(FJXcrspe0r>d0SG)@{an^LB{Ts5 D7(?3; diff --git a/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/stock-portfolio-alerts.png b/apps/openwork-memos-integration/apps/desktop/public/assets/usecases/stock-portfolio-alerts.png deleted file mode 100755 index 9fefc10d815864ca06757c4848c918097506cfd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6425 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

NzZCvz$*b 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Light.ttf b/apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Light.ttf deleted file mode 100644 index 14753d29775c7caf5b681716b6be431c85d94f3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56328 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 ~~aiE3a2X*q7lEd@Jgqu#BD~dW3|O2R8;k9=t<- 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Medium.ttf b/apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Medium.ttf deleted file mode 100644 index 4deeae0e4827fc7deaf317e64664fa28dd153df2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56376 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 diff --git a/apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Regular.ttf b/apps/openwork-memos-integration/apps/desktop/public/fonts/DMSans-Regular.ttf deleted file mode 100644 index b25fc0cc1cf3bd9cdd22e5a37f505f4d9fec474b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56344 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" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", - "license": "MIT", - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", - "license": "MIT", - "dependencies": { - "@hono/node-server": "^1.19.7", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "peer": true, - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "license": "BSD-2-Clause" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/zod": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.25 || ^4" - } - } - } -} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock deleted file mode 100644 index 350c6c95c..000000000 --- a/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/bun.lock +++ /dev/null @@ -1,443 +0,0 @@ -{ - "lockfileVersion": 1, - "configVersion": 1, - "workspaces": { - "": { - "name": "dev-browser", - "dependencies": { - "express": "^4.21.0", - "playwright": "^1.49.0", - }, - "devDependencies": { - "@types/express": "^5.0.0", - "tsx": "^4.21.0", - "vitest": "^2.1.0", - }, - }, - }, - "packages": { - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.27.1", "", { "os": "android", "cpu": "arm" }, "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg=="], - - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.1", "", { "os": "android", "cpu": "arm64" }, "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ=="], - - "@esbuild/android-x64": ["@esbuild/android-x64@0.27.1", "", { "os": "android", "cpu": "x64" }, "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ=="], - - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ=="], - - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ=="], - - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg=="], - - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ=="], - - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA=="], - - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q=="], - - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw=="], - - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg=="], - - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA=="], - - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ=="], - - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ=="], - - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw=="], - - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.1", "", { "os": "linux", "cpu": "x64" }, "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA=="], - - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.1", "", { "os": "none", "cpu": "arm64" }, "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ=="], - - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.1", "", { "os": "none", "cpu": "x64" }, "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg=="], - - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g=="], - - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg=="], - - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg=="], - - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.1", "", { "os": "win32", "cpu": "x64" }, "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw=="], - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.53.3", "", { "os": "android", "cpu": "arm" }, "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w=="], - - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.53.3", "", { "os": "android", "cpu": "arm64" }, "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w=="], - - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.53.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA=="], - - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.53.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ=="], - - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.53.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w=="], - - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.53.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q=="], - - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw=="], - - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg=="], - - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w=="], - - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A=="], - - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g=="], - - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.53.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw=="], - - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g=="], - - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A=="], - - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.53.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg=="], - - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w=="], - - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q=="], - - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.53.3", "", { "os": "none", "cpu": "arm64" }, "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw=="], - - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.53.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw=="], - - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.53.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA=="], - - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg=="], - - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ=="], - - "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], - - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], - - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - - "@types/express": ["@types/express@5.0.6", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "^2" } }, "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA=="], - - "@types/express-serve-static-core": ["@types/express-serve-static-core@5.1.0", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA=="], - - "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], - - "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], - - "@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="], - - "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], - - "@types/send": ["@types/send@1.2.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], - - "@types/serve-static": ["@types/serve-static@2.2.0", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*" } }, "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ=="], - - "@vitest/expect": ["@vitest/expect@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw=="], - - "@vitest/mocker": ["@vitest/mocker@2.1.9", "", { "dependencies": { "@vitest/spy": "2.1.9", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg=="], - - "@vitest/pretty-format": ["@vitest/pretty-format@2.1.9", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ=="], - - "@vitest/runner": ["@vitest/runner@2.1.9", "", { "dependencies": { "@vitest/utils": "2.1.9", "pathe": "^1.1.2" } }, "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g=="], - - "@vitest/snapshot": ["@vitest/snapshot@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "magic-string": "^0.30.12", "pathe": "^1.1.2" } }, "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ=="], - - "@vitest/spy": ["@vitest/spy@2.1.9", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ=="], - - "@vitest/utils": ["@vitest/utils@2.1.9", "", { "dependencies": { "@vitest/pretty-format": "2.1.9", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ=="], - - "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], - - "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], - - "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], - - "body-parser": ["body-parser@1.20.4", "", { "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "~1.2.0", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.14.0", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA=="], - - "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - - "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], - - "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], - - "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], - - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - - "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "cookie-signature": ["cookie-signature@1.0.7", "", {}, "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="], - - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], - - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - - "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "esbuild": ["esbuild@0.27.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.1", "@esbuild/android-arm": "0.27.1", "@esbuild/android-arm64": "0.27.1", "@esbuild/android-x64": "0.27.1", "@esbuild/darwin-arm64": "0.27.1", "@esbuild/darwin-x64": "0.27.1", "@esbuild/freebsd-arm64": "0.27.1", "@esbuild/freebsd-x64": "0.27.1", "@esbuild/linux-arm": "0.27.1", "@esbuild/linux-arm64": "0.27.1", "@esbuild/linux-ia32": "0.27.1", "@esbuild/linux-loong64": "0.27.1", "@esbuild/linux-mips64el": "0.27.1", "@esbuild/linux-ppc64": "0.27.1", "@esbuild/linux-riscv64": "0.27.1", "@esbuild/linux-s390x": "0.27.1", "@esbuild/linux-x64": "0.27.1", "@esbuild/netbsd-arm64": "0.27.1", "@esbuild/netbsd-x64": "0.27.1", "@esbuild/openbsd-arm64": "0.27.1", "@esbuild/openbsd-x64": "0.27.1", "@esbuild/openharmony-arm64": "0.27.1", "@esbuild/sunos-x64": "0.27.1", "@esbuild/win32-arm64": "0.27.1", "@esbuild/win32-ia32": "0.27.1", "@esbuild/win32-x64": "0.27.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA=="], - - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - - "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - - "expect-type": ["expect-type@1.2.2", "", {}, "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA=="], - - "express": ["express@4.22.1", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "~1.20.3", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "~1.3.1", "fresh": "~0.5.2", "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", "serve-static": "~1.16.2", "setprototypeof": "1.2.0", "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g=="], - - "finalhandler": ["finalhandler@1.3.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "statuses": "~2.0.2", "unpipe": "~1.0.0" } }, "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg=="], - - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - - "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], - - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - - "get-tsconfig": ["get-tsconfig@4.13.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="], - - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], - - "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - - "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], - - "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], - - "merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], - - "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], - - "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], - - "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], - - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], - - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - - "path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], - - "pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - - "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "playwright": ["playwright@1.57.0", "", { "dependencies": { "playwright-core": "1.57.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw=="], - - "playwright-core": ["playwright-core@1.57.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="], - - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - - "qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], - - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "raw-body": ["raw-body@2.5.3", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "unpipe": "~1.0.0" } }, "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA=="], - - "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - - "rollup": ["rollup@4.53.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.3", "@rollup/rollup-android-arm64": "4.53.3", "@rollup/rollup-darwin-arm64": "4.53.3", "@rollup/rollup-darwin-x64": "4.53.3", "@rollup/rollup-freebsd-arm64": "4.53.3", "@rollup/rollup-freebsd-x64": "4.53.3", "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", "@rollup/rollup-linux-arm-musleabihf": "4.53.3", "@rollup/rollup-linux-arm64-gnu": "4.53.3", "@rollup/rollup-linux-arm64-musl": "4.53.3", "@rollup/rollup-linux-loong64-gnu": "4.53.3", "@rollup/rollup-linux-ppc64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-musl": "4.53.3", "@rollup/rollup-linux-s390x-gnu": "4.53.3", "@rollup/rollup-linux-x64-gnu": "4.53.3", "@rollup/rollup-linux-x64-musl": "4.53.3", "@rollup/rollup-openharmony-arm64": "4.53.3", "@rollup/rollup-win32-arm64-msvc": "4.53.3", "@rollup/rollup-win32-ia32-msvc": "4.53.3", "@rollup/rollup-win32-x64-gnu": "4.53.3", "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA=="], - - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - - "send": ["send@0.19.1", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg=="], - - "serve-static": ["serve-static@1.16.2", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" } }, "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw=="], - - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], - - "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - - "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - - "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], - - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - - "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - - "tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], - - "tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], - - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - - "tsx": ["tsx@4.21.0", "", { "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw=="], - - "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], - - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - - "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - - "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], - - "vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], - - "vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "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.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], - - "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], - - "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], - - "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "send/http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], - - "send/statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - - "serve-static/send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], - - "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - - "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "serve-static/send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "serve-static/send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], - - "serve-static/send/http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], - - "serve-static/send/statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - - "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], - - "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], - - "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], - - "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], - - "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], - - "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], - - "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], - - "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], - - "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], - - "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], - - "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], - - "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], - - "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], - - "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], - - "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], - - "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], - - "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], - - "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], - - "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], - - "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], - - "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], - - "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], - - "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], - - "serve-static/send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - } -} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json b/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json deleted file mode 100644 index cbb6e75da..000000000 --- a/apps/openwork-memos-integration/apps/desktop/skills/dev-browser/package-lock.json +++ /dev/null @@ -1,3006 +0,0 @@ -{ - "name": "dev-browser", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "dev-browser", - "version": "0.0.1", - "dependencies": { - "@hono/node-server": "^1.19.7", - "@hono/node-ws": "^1.2.0", - "express": "^4.21.0", - "hono": "^4.11.1", - "playwright": "npm:rebrowser-playwright@^1.52.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - }, - "devDependencies": { - "@types/express": "^5.0.0", - "vitest": "^2.1.0" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@hono/node-ws": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@hono/node-ws/-/node-ws-1.3.0.tgz", - "integrity": "sha512-ju25YbbvLuXdqBCmLZLqnNYu1nbHIQjoyUqA8ApZOeL1k4skuiTcw5SW77/5SUYo2Xi2NVBJoVlfQurnKEp03Q==", - "license": "MIT", - "dependencies": { - "ws": "^8.17.0" - }, - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "@hono/node-server": "^1.19.2", - "hono": "^4.6.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.8.tgz", - "integrity": "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@vitest/expect": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", - "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "chai": "^5.1.2", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", - "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.1.9", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/pretty-format": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", - "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", - "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "2.1.9", - "pathe": "^1.1.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", - "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "2.1.9", - "magic-string": "^0.30.12", - "pathe": "^1.1.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", - "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^3.0.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", - "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "2.1.9", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/check-error": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", - "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/playwright": { - "name": "rebrowser-playwright", - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/rebrowser-playwright/-/rebrowser-playwright-1.52.0.tgz", - "integrity": "sha512-UjpqfwmF9+XtOuCCxGQ2ZlLeuSaSv//4Z6ZQgYPsJovz3d7nWodCd2hSRQigAswAUnsPmVwnQUpSn+TLKaKV+A==", - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "npm:rebrowser-playwright-core@~1.52.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "name": "rebrowser-playwright-core", - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/rebrowser-playwright-core/-/rebrowser-playwright-core-1.52.0.tgz", - "integrity": "sha512-gjrvLNh0RX6B/tg6pWaPNGf+9+z1Jl2EyAh5MXD5xMa2lputGRZ9V2MJ/uofcC5Np3vSOJ3SdVSRqwteC0FjfQ==", - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.1", - "@rollup/rollup-android-arm64": "4.55.1", - "@rollup/rollup-darwin-arm64": "4.55.1", - "@rollup/rollup-darwin-x64": "4.55.1", - "@rollup/rollup-freebsd-arm64": "4.55.1", - "@rollup/rollup-freebsd-x64": "4.55.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", - "@rollup/rollup-linux-arm-musleabihf": "4.55.1", - "@rollup/rollup-linux-arm64-gnu": "4.55.1", - "@rollup/rollup-linux-arm64-musl": "4.55.1", - "@rollup/rollup-linux-loong64-gnu": "4.55.1", - "@rollup/rollup-linux-loong64-musl": "4.55.1", - "@rollup/rollup-linux-ppc64-gnu": "4.55.1", - "@rollup/rollup-linux-ppc64-musl": "4.55.1", - "@rollup/rollup-linux-riscv64-gnu": "4.55.1", - "@rollup/rollup-linux-riscv64-musl": "4.55.1", - "@rollup/rollup-linux-s390x-gnu": "4.55.1", - "@rollup/rollup-linux-x64-gnu": "4.55.1", - "@rollup/rollup-linux-x64-musl": "4.55.1", - "@rollup/rollup-openbsd-x64": "4.55.1", - "@rollup/rollup-openharmony-arm64": "4.55.1", - "@rollup/rollup-win32-arm64-msvc": "4.55.1", - "@rollup/rollup-win32-ia32-msvc": "4.55.1", - "@rollup/rollup-win32-x64-gnu": "4.55.1", - "@rollup/rollup-win32-x64-msvc": "4.55.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tsx/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", - "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-node/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/vite-node/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/vitest": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", - "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "2.1.9", - "@vitest/mocker": "2.1.9", - "@vitest/pretty-format": "^2.1.9", - "@vitest/runner": "2.1.9", - "@vitest/snapshot": "2.1.9", - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "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.8.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.1", - "tinypool": "^1.0.1", - "tinyrainbow": "^1.2.0", - "vite": "^5.0.0", - "vite-node": "2.1.9", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.9", - "@vitest/ui": "2.1.9", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - } - } -} diff --git a/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json b/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json deleted file mode 100644 index de75c468d..000000000 --- a/apps/openwork-memos-integration/apps/desktop/skills/file-permission/package-lock.json +++ /dev/null @@ -1,1650 +0,0 @@ -{ - "name": "file-permission", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "file-permission", - "version": "0.0.1", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0", - "tsx": "^4.21.0", - "typescript": "^5.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", - "license": "MIT", - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", - "license": "MIT", - "dependencies": { - "@hono/node-server": "^1.19.7", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "peer": true, - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "license": "BSD-2-Clause" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/zod": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.25 || ^4" - } - } - } -} diff --git a/apps/openwork-memos-integration/docs/video-thumbnail.png b/apps/openwork-memos-integration/docs/video-thumbnail.png deleted file mode 100644 index 630942319d70057966af526dcf6d155a17487e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4605469 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�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

E-eU;=j4;Gv$3ag@|!57#Ta+IqT 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%0A%7tTFl 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%0D(Sj;1f4fcOl3-&7> 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­uTwXq-7~r7MAyjGlds-8& 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/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 i>XQ$HPjZe2W-~Oq7f=i- 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

-dxe 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

xD4tZHcXfM6`>Tu!8<>9s4 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

@CBO^5t3&Re|Ty-d(Xf@B9Dk>n5hNHhhnsQt)}P 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%0D>K&(9yRh?4xH)`v@nb9-(Wkq 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

ZY;jzFQ!j;&zeBASHjgVit2`K#P%%>dKKIfP z{>_&#d1$8e*p82+IlnQyv^TRQZFKq`pccKqoD8X!Qx?>!b$3@wN)gUk0RW$2;Q(j& zwQR8o>CI4&H6ewtPB=sPRo*peX_?rjsw0m%ux)Ojgh}w!p{AhPS>Ll|$`q1Z+W^74 zQaY%8j~4NqN*P=wZGYF!Kt*kzHcBQ&CRLJ)OCE+An(Q^m=;AHSyVW`i;0s} z@1kE^O-EDVqWoh9r^c3hMl>{6SDrt4^cG2XL&O*9){%olZFM_{WEXsbxg@E&Azi>mKtoB^TO1b%f^NUK@?Pvpc5X%sAV}A zN1Wr%k_K+AA5xlib`s=I)>+gXV8{Fcc^GQ<)2?2E8Hq*t@UUYRt4kqs2~3{xM9p{D z)0u%q@7!ou7d~a0z0ByNzI`cWksWE=yvINV+g5jqhW>y^+z?LkU=o3dh9LHdxfG-7 zB;t8I7SMKVzkYf)>$9eT6Dy-dt)%k|jF$OPlo73MtxZc=CUu?XQrSqBUF-xR%>9}$ z{s%{C8r%{c66@$9dk&Ycoi#orTZo6@A8?)e5;ebK zNo}h~9~-D2!UmRW`((yV;+B{KH{{klc!(^&oxgjkN?cAFXkmq%v>B{Rl|_HWK2b{c z7jYffP6dGG)Z&@px8_L{8q~Jchos-6?$gN-?*02T;%LW>WZMF{$0~f&>0_peN>2L< z`rc~#i#UCYym44XBJt-D<%u+9xdX1&*F@qZxlcx0f2i$K%Qch;hQ~NUBTUag_b~ zNZ2{cZq!Du?$X@p$5g&|vis6L^6KrJ;}ShQSIYvZNq(g%(gmX=U4{uY^rV$5VeYVt zo0ZF7hkGxsKRW234^iA%Ml=aBG;@EL;∋ls)F`*}eQyaxyPSKr6QdUcOO78L=1b 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�o(Nwo5d-G7|a29ID@uN+f62&4gz4(~Q* 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 =E;%f)G9 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